version: "3.9" services: neo4j: image: neo4j:5.18-community ports: - "7474:7474" - "7687:7687" environment: # NEO4J_PASSWORD falls back to a dev-only value so `docker compose up` # works out of the box. PRODUCTION MUST set NEO4J_PASSWORD in .env or # inject it from a secrets manager — never ship the fallback. NEO4J_AUTH: neo4j/${NEO4J_PASSWORD:-synapse123} NEO4J_PLUGINS: '["apoc"]' NEO4J_dbms_security_procedures_unrestricted: apoc.* volumes: - neo4j_data:/data healthcheck: test: [ "CMD-SHELL", "cypher-shell -u neo4j -p '${NEO4J_PASSWORD:-synapse123}' 'RETURN 1'", ] interval: 10s timeout: 5s retries: 10 qdrant: image: qdrant/qdrant:v1.12.4 ports: - "6333:6333" - "6334:6334" volumes: - qdrant_data:/qdrant/storage healthcheck: test: ["CMD-SHELL", "bash -c '