version: '3.8'
# Standard deployment - Code Graph + Memory Store
# Embedding required, LLM optional
services:
# Neo4j Database
neo4j:
image: neo4j:5.15-community
container_name: codebase-rag-neo4j-standard
ports:
- "${NEO4J_HTTP_PORT:-7474}:7474"
- "${NEO4J_BOLT_PORT:-7687}:7687"
environment:
- NEO4J_AUTH=${NEO4J_USER:-neo4j}/${NEO4J_PASSWORD:-password}
- NEO4J_PLUGINS=["apoc"]
- NEO4J_dbms_security_procedures_unrestricted=apoc.*
- NEO4J_dbms_security_procedures_allowlist=apoc.*
- NEO4J_dbms_memory_heap_initial__size=512m
- NEO4J_dbms_memory_heap_max__size=2G
- NEO4J_dbms_memory_pagecache_size=512m
volumes:
- neo4j_standard_data:/data
- neo4j_standard_logs:/logs
- neo4j_standard_import:/var/lib/neo4j/import
- neo4j_standard_plugins:/plugins
healthcheck:
test: ["CMD-SHELL", "cypher-shell -u ${NEO4J_USER:-neo4j} -p ${NEO4J_PASSWORD:-password} 'RETURN 1' || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- codebase-rag-standard
restart: unless-stopped
# MCP Server - Standard mode
mcp:
build:
context: ..
dockerfile: docker/Dockerfile.standard
image: royisme/codebase-rag:standard
container_name: codebase-rag-mcp-standard
ports:
- "${MCP_PORT:-8000}:8000" # MCP SSE Service (PRIMARY)
- "${WEB_UI_PORT:-8080}:8080" # Web UI + REST API (SECONDARY)
environment:
# Application
- APP_NAME=${APP_NAME:-Code Graph Knowledge System}
- DEBUG=${DEBUG:-false}
- HOST=0.0.0.0
# Two-Port Architecture
- MCP_PORT=8000 # MCP SSE Service (PRIMARY)
- WEB_UI_PORT=8080 # Web UI + REST API (SECONDARY)
- PORT=8000 # Legacy (deprecated)
# Deployment mode
- DEPLOYMENT_MODE=standard
- ENABLE_KNOWLEDGE_RAG=false
- ENABLE_AUTO_EXTRACTION=false
- ENABLE_MEMORY_SEARCH=true
# Neo4j Configuration
- NEO4J_URI=bolt://neo4j:7687
- NEO4J_USER=${NEO4J_USER:-neo4j}
- NEO4J_PASSWORD=${NEO4J_PASSWORD:-password}
- NEO4J_DATABASE=${NEO4J_DATABASE:-neo4j}
# Embedding Provider (required for memory search)
- EMBEDDING_PROVIDER=${EMBEDDING_PROVIDER:-ollama}
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://host.docker.internal:11434}
- OLLAMA_EMBEDDING_MODEL=${OLLAMA_EMBEDDING_MODEL:-nomic-embed-text}
# OpenAI Embedding (alternative)
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- OPENAI_EMBEDDING_MODEL=${OPENAI_EMBEDDING_MODEL:-text-embedding-3-small}
# Timeouts
- CONNECTION_TIMEOUT=${CONNECTION_TIMEOUT:-30}
- OPERATION_TIMEOUT=${OPERATION_TIMEOUT:-120}
# Vector settings
- VECTOR_DIMENSION=${VECTOR_DIMENSION:-384}
volumes:
- ${REPOS_PATH:-./repos}:/repos
- ./data:/data
- ./logs:/app/logs
depends_on:
neo4j:
condition: service_healthy
extra_hosts:
- "host.docker.internal:host-gateway" # Access host services (e.g., Ollama on host)
healthcheck:
# Health check on Web UI port (where REST API lives)
test: ["CMD", "curl", "-f", "http://localhost:8080/api/v1/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- codebase-rag-standard
restart: unless-stopped
volumes:
neo4j_standard_data:
driver: local
neo4j_standard_logs:
driver: local
neo4j_standard_import:
driver: local
neo4j_standard_plugins:
driver: local
networks:
codebase-rag-standard:
driver: bridge