services: # ------------------------------------------------------------------ # Optional Neo4j sidecar # ------------------------------------------------------------------ neo4j: profiles: ["neo4j"] image: neo4j:5.26-community ports: - "127.0.0.1:7474:7474" - "127.0.0.1:7687:7687" environment: NEO4J_AUTH: "${NEO4J_USER:-neo4j}/${NEO4J_PASSWORD:-testpassword}" NEO4J_PLUGINS: '["apoc", "graph-data-science"]' volumes: - neo4j_data:/data - neo4j_logs:/logs healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7474"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped # ------------------------------------------------------------------ # Test Neo4j (ephemeral, for CI/integration tests) # ------------------------------------------------------------------ neo4j-test: profiles: ["integration"] image: neo4j:5.26-community ports: - "127.0.0.1:7688:7687" environment: NEO4J_AUTH: "${NEO4J_USER:-neo4j}/${NEO4J_PASSWORD:-testpassword}" tmpfs: - /data healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7474"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped # ------------------------------------------------------------------ # TLS Neo4j (ephemeral, for TLS integration tests) # ------------------------------------------------------------------ neo4j-tls: profiles: ["integration"] image: neo4j:5.26-community ports: - "127.0.0.1:7689:7687" - "127.0.0.1:7475:7474" environment: NEO4J_AUTH: "${NEO4J_USER:-neo4j}/${NEO4J_PASSWORD:-testpassword}" NEO4J_server_bolt_tls__level: REQUIRED NEO4J_dbms_ssl_policy_bolt_enabled: "true" NEO4J_dbms_ssl_policy_bolt_base__directory: /ssl/bolt NEO4J_dbms_ssl_policy_bolt_client__auth: NONE volumes: - ./.certs/neo4j:/ssl/bolt:ro tmpfs: - /data healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7474"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped # ------------------------------------------------------------------ # Zaxy MCP Server # ------------------------------------------------------------------ zaxy: build: context: . dockerfile: Dockerfile environment: PROJECTION_BACKEND: "${PROJECTION_BACKEND:-embedded}" EMBEDDED_GRAPH_PATH: "${EMBEDDED_GRAPH_PATH:-/app/.eventloom/projections/embedded.kuzu}" LATTICEDB_PATH: "${LATTICEDB_PATH:-/app/.eventloom/projections/memory.latticedb}" NEO4J_AUTO_START: "${NEO4J_AUTO_START:-false}" PGGRAPH_DSN: "${PGGRAPH_DSN:-postgresql://postgres:postgres@pggraph:5432/zaxy}" PGGRAPH_AUTO_START: "${PGGRAPH_AUTO_START:-false}" EVENTLOOM_PATH: /app/.eventloom EVENTLOOM_THREAD: "${EVENTLOOM_THREAD:-default}" PATHLIGHT_URL: "${PATHLIGHT_URL:-http://pathlight-collector:4100}" PATHLIGHT_ENABLED: "${PATHLIGHT_ENABLED:-false}" SERVER_NAME: "${SERVER_NAME:-zaxy-memory}" MCP_REMOTE_AUTH_TOKEN: "${MCP_REMOTE_AUTH_TOKEN:-}" MCP_REMOTE_SESSION_HEADER: "${MCP_REMOTE_SESSION_HEADER:-x-zaxy-session-id}" LOG_LEVEL: "${LOG_LEVEL:-INFO}" LOG_FORMAT: "${LOG_FORMAT:-console}" QUERY_DEFAULT_LIMIT: "${QUERY_DEFAULT_LIMIT:-10}" EMBEDDING_ENABLED: "${EMBEDDING_ENABLED:-true}" EMBEDDING_PROVIDER: "${EMBEDDING_PROVIDER:-hash}" EMBEDDING_DIMENSION: "${EMBEDDING_DIMENSION:-1536}" OPENAI_EMBEDDING_MODEL: "${OPENAI_EMBEDDING_MODEL:-text-embedding-3-small}" OPENAI_BASE_URL: "${OPENAI_BASE_URL:-https://api.openai.com/v1}" OPENAI_API_KEY: "${OPENAI_API_KEY:-}" volumes: - eventloom_data:/app/.eventloom healthcheck: test: ["CMD", "zaxy", "status"] interval: 10s timeout: 5s start_period: 10s retries: 3 restart: unless-stopped volumes: neo4j_data: neo4j_logs: eventloom_data: