services: # PostgreSQL with pgvector extension for vector storage postgres: image: pgvector/pgvector:pg15 container_name: mem0-postgres environment: POSTGRES_DB: ${POSTGRES_DB:-mem0_db} POSTGRES_USER: ${POSTGRES_USER:-mem0_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mem0_password} ports: - "5433:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./config/postgres-init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mem0_user} -d ${POSTGRES_DB:-mem0_db}"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped # Neo4j with APOC for graph relationships neo4j: image: neo4j:5.18-community container_name: mem0-neo4j environment: NEO4J_AUTH: ${NEO4J_AUTH:-neo4j/mem0_neo4j_password} NEO4J_PLUGINS: '["apoc"]' NEO4J_apoc_export_file_enabled: true NEO4J_apoc_import_file_enabled: true NEO4J_apoc_import_file_use__neo4j__config: true NEO4J_ACCEPT_LICENSE_AGREEMENT: yes NEO4J_dbms_security_procedures_unrestricted: apoc.* NEO4J_dbms_security_procedures_allowlist: apoc.* ports: - "7474:7474" # HTTP - "7687:7687" # Bolt volumes: - neo4j_data:/data - neo4j_logs:/logs - neo4j_import:/var/lib/neo4j/import - neo4j_plugins:/plugins healthcheck: test: ["CMD", "cypher-shell", "-u", "neo4j", "-p", "${NEO4J_PASSWORD:-mem0_neo4j_password}", "RETURN 1"] interval: 10s timeout: 10s retries: 5 restart: unless-stopped # Backend API service backend: build: context: ./backend dockerfile: Dockerfile container_name: mem0-backend environment: OPENAI_API_KEY: ${OPENAI_COMPAT_API_KEY} OPENAI_BASE_URL: https://veronica.pratikn.com/v1 EMBEDDER_API_KEY: ${EMBEDDER_API_KEY:-AIzaSyA_} POSTGRES_HOST: postgres POSTGRES_PORT: 5432 POSTGRES_DB: ${POSTGRES_DB:-mem0_db} POSTGRES_USER: ${POSTGRES_USER:-mem0_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mem0_password} NEO4J_URI: bolt://neo4j:7687 NEO4J_USERNAME: ${NEO4J_USERNAME:-neo4j} NEO4J_PASSWORD: ${NEO4J_PASSWORD:-mem0_neo4j_password} LOG_LEVEL: ${LOG_LEVEL:-INFO} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:3000} DEFAULT_MODEL: ${DEFAULT_MODEL:-claude-sonnet-4} EXTRACTION_MODEL: ${EXTRACTION_MODEL:-o4-mini} FAST_MODEL: ${FAST_MODEL:-o4-mini} ANALYTICAL_MODEL: ${ANALYTICAL_MODEL:-gemini-2.5-pro} REASONING_MODEL: ${REASONING_MODEL:-claude-sonnet-4} EXPERT_MODEL: ${EXPERT_MODEL:-o3} ports: - "${BACKEND_PORT:-8000}:8000" depends_on: postgres: condition: service_healthy neo4j: condition: service_healthy restart: unless-stopped volumes: - ./backend:/app command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] volumes: postgres_data: neo4j_data: neo4j_logs: neo4j_import: neo4j_plugins: networks: default: name: mem0-network