services:
graphiti-neo4j:
image: neo4j:5.26-community
container_name: graphiti-neo4j
restart: unless-stopped
environment:
NEO4J_AUTH: neo4j/graphiti2026
NEO4J_PLUGINS: '["apoc"]'
NEO4J_dbms_security_procedures_unrestricted: apoc.*
NEO4J_dbms_memory_heap_initial__size: 256m
NEO4J_dbms_memory_heap_max__size: 512m
volumes:
- graphiti_neo4j_data:/data
- graphiti_neo4j_logs:/logs
networks:
- struktur-net
healthcheck:
test:
- CMD
- cypher-shell
- -u
- neo4j
- -p
- graphiti2026
- RETURN 1
interval: 30s
timeout: 10s
retries: 5
graphiti-service:
build: ./service
container_name: graphiti-service
restart: unless-stopped
env_file:
- /etc/graphiti/graphiti.env
environment:
- NEO4J_URI=bolt://graphiti-neo4j:7687
- NEO4J_USER=neo4j
- LLM_BASE_URL=https://openrouter.ai/api/v1
- LLM_MODEL=qwen/qwen3.7-flash
- EMBED_MODEL=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
- GRAPHITI_WORK_DEADLINE_SECONDS=900
- GRAPHITI_REQUEST_DEADLINE_SECONDS=930
- GRAPHITI_EDGE_RESOLUTION_TIMEOUT_SECONDS=300
- GRAPHITI_HEARTBEAT_INTERVAL_SECONDS=12
- PROVIDER_CONNECT_TIMEOUT_SECONDS=20
- PROVIDER_READ_TIMEOUT_SECONDS=300
- PROVIDER_CALL_TIMEOUT_SECONDS=300
- PROVIDER_WRITE_TIMEOUT_SECONDS=20
- PROVIDER_POOL_TIMEOUT_SECONDS=20
- PROVIDER_MAX_RETRIES=0
- OPENROUTER_PROVIDER=
- OPENROUTER_ALLOW_FALLBACKS=true
ports:
- 127.0.0.1:8644:8000
volumes:
- /opt/struktur/graphiti/request-data:/var/lib/graphiti
- /run/graphiti-control:/run/graphiti-control:ro
depends_on:
graphiti-neo4j:
condition: service_healthy
networks:
- struktur-net
healthcheck:
test:
- CMD
- python3
- -c
- import urllib.request; urllib.request.urlopen('http://localhost:8000/health')
interval: 30s
timeout: 10s
retries: 5
volumes:
graphiti_neo4j_data: null
graphiti_neo4j_logs: null
networks:
struktur-net:
external: true