version: '3.8' services: # Core Infrastructure redis: image: redis:7-alpine container_name: agent-redis restart: unless-stopped volumes: - ./data/redis:/data command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru networks: - agent-network chromadb: image: chromadb/chroma:latest container_name: agent-memory-vector restart: unless-stopped ports: - "8000:8000" volumes: - ./data/chroma:/chroma/chroma environment: - IS_PERSISTENT=TRUE - PERSIST_DIRECTORY=/chroma/chroma - ANONYMIZED_TELEMETRY=FALSE networks: - agent-network # LLM Gateway litellm: image: ghcr.io/berriai/litellm:main-latest container_name: agent-gateway restart: unless-stopped ports: - "4000:4000" volumes: - ./config/litellm_config.yaml:/app/config.yaml - ./logs:/app/logs environment: - DATABASE_URL=sqlite:///app/db.sqlite3 - LITELLM_MASTER_KEY=${MASTER_KEY:-sk-agent} - REDIS_HOST=redis - REDIS_PORT=6379 command: --config /app/config.yaml --port 4000 networks: - agent-network # Agent Core with Reasoning Engines agent-core: build: context: ./services/agent-core dockerfile: Dockerfile container_name: agent-core restart: unless-stopped ports: - "8080:8080" volumes: - ./workspace:/workspace - ./config/agent:/app/config - ./data/agent:/app/data environment: - LLM_API_BASE=http://litellm:4000/v1 - LLM_API_KEY=${MASTER_KEY:-sk-agent} - REDIS_URL=redis://redis:6379/0 - CHROMA_URL=http://chromadb:8000 - DEFAULT_REASONING_MODE=${DEFAULT_REASONING:-auto} depends_on: - litellm - redis - chromadb networks: - agent-network # MCP Tool Gateway mcpo: build: context: ./services/mcpo dockerfile: Dockerfile container_name: agent-mcp-gateway restart: unless-stopped ports: - "8001:8000" volumes: - ./workspace:/workspace:ro - ./config/mcp:/app/config networks: - agent-network profiles: - mcp # VS Code Server with AI Assistant code-server: image: lscr.io/linuxserver/code-server:latest container_name: agent-ide restart: unless-stopped ports: - "8443:8443" environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - PASSWORD=${IDE_PASSWORD:-code} - SUDO_PASSWORD=${IDE_SUDO_PASSWORD:-sudo} - DEFAULT_WORKSPACE=/workspace volumes: - ./workspace:/workspace - ./data/code-server:/config - ./config/continue:/config/.continue:ro networks: - agent-network profiles: - ide # Web UI open-webui: image: ghcr.io/open-webui/open-webui:main container_name: agent-ui restart: unless-stopped ports: - "3000:8080" volumes: - ./data/open-webui:/app/backend/data environment: - OPENAI_API_BASE_URL=http://agent-core:8080/v1 - OPENAI_API_KEY=${MASTER_KEY:-sk-agent} - ENABLE_SIGNUP=false - DEFAULT_MODELS=agent/orchestrator depends_on: - agent-core networks: - agent-network profiles: - ui # Auto-updater watchtower: image: containrrr/watchtower container_name: agent-watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - WATCHTOWER_POLL_INTERVAL=86400 - WATCHTOWER_CLEANUP=true networks: - agent-network networks: agent-network: driver: bridge