# Docker Compose Profiles Strategy: # - "backend": Starts only backend services (server, mcp, agents) for hybrid development # - "frontend": Starts only the frontend UI service # - "full": Starts all services for complete Docker deployment (same as default) # - "default": All services start when no profile is specified # Use --profile flag to control which services start: # docker compose up # All services (default profile) # docker compose --profile backend up # Backend only for hybrid dev # docker compose --profile full up # Everything in Docker (same as default) services: # Server Service (FastAPI + Socket.IO + Crawling) archon-server: profiles: ["backend", "full", "default"] build: context: ./python dockerfile: Dockerfile.server args: BUILDKIT_INLINE_CACHE: 1 ARCHON_SERVER_PORT: ${ARCHON_SERVER_PORT:-8181} container_name: archon-server ports: - "${ARCHON_SERVER_PORT:-8181}:${ARCHON_SERVER_PORT:-8181}" environment: - SUPABASE_URL=${SUPABASE_URL} - SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY} - OPENAI_API_KEY=${OPENAI_API_KEY:-} - LOGFIRE_TOKEN=${LOGFIRE_TOKEN:-} - SERVICE_DISCOVERY_MODE=docker_compose - LOG_LEVEL=${LOG_LEVEL:-INFO} - ARCHON_SERVER_PORT=${ARCHON_SERVER_PORT:-8181} - ARCHON_MCP_PORT=${ARCHON_MCP_PORT:-8051} - ARCHON_AGENTS_PORT=${ARCHON_AGENTS_PORT:-8052} networks: - app-network volumes: - /var/run/docker.sock:/var/run/docker.sock # Docker socket for MCP container control - ./python/src:/app/src # Mount source code for hot reload - ./python/tests:/app/tests # Mount tests for UI test execution extra_hosts: - "host.docker.internal:host-gateway" command: [ "python", "-m", "uvicorn", "src.server.main:socket_app", "--host", "0.0.0.0", "--port", "${ARCHON_SERVER_PORT:-8181}", "--reload", ] healthcheck: test: [ "CMD", "sh", "-c", 'python -c "import urllib.request; urllib.request.urlopen(''http://localhost:${ARCHON_SERVER_PORT:-8181}/health'')"', ] interval: 30s timeout: 10s retries: 3 start_period: 40s # Lightweight MCP Server Service (HTTP-based) archon-mcp: profiles: ["backend", "full", "default"] build: context: ./python dockerfile: Dockerfile.mcp args: BUILDKIT_INLINE_CACHE: 1 ARCHON_MCP_PORT: ${ARCHON_MCP_PORT:-8051} container_name: archon-mcp ports: - "${ARCHON_MCP_PORT:-8051}:${ARCHON_MCP_PORT:-8051}" environment: - SUPABASE_URL=${SUPABASE_URL} - SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY} - LOGFIRE_TOKEN=${LOGFIRE_TOKEN:-} - SERVICE_DISCOVERY_MODE=docker_compose - TRANSPORT=sse - LOG_LEVEL=${LOG_LEVEL:-INFO} # MCP needs to know where to find other services - API_SERVICE_URL=http://archon-server:${ARCHON_SERVER_PORT:-8181} - AGENTS_SERVICE_URL=http://archon-agents:${ARCHON_AGENTS_PORT:-8052} - ARCHON_MCP_PORT=${ARCHON_MCP_PORT:-8051} - ARCHON_SERVER_PORT=${ARCHON_SERVER_PORT:-8181} - ARCHON_AGENTS_PORT=${ARCHON_AGENTS_PORT:-8052} networks: - app-network depends_on: - archon-server - archon-agents extra_hosts: - "host.docker.internal:host-gateway" healthcheck: test: [ "CMD", "sh", "-c", 'python -c "import socket; s=socket.socket(); s.connect((''localhost'', ${ARCHON_MCP_PORT:-8051})); s.close()"', ] interval: 30s timeout: 10s retries: 3 start_period: 60s # Give dependencies time to start # AI Agents Service (ML/Reranking) archon-agents: profiles: ["backend", "full", "default"] build: context: ./python dockerfile: Dockerfile.agents args: BUILDKIT_INLINE_CACHE: 1 ARCHON_AGENTS_PORT: ${ARCHON_AGENTS_PORT:-8052} container_name: archon-agents ports: - "${ARCHON_AGENTS_PORT:-8052}:${ARCHON_AGENTS_PORT:-8052}" environment: - SUPABASE_URL=${SUPABASE_URL} - SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY} - OPENAI_API_KEY=${OPENAI_API_KEY:-} - LOGFIRE_TOKEN=${LOGFIRE_TOKEN:-} - SERVICE_DISCOVERY_MODE=docker_compose - LOG_LEVEL=${LOG_LEVEL:-INFO} - ARCHON_AGENTS_PORT=${ARCHON_AGENTS_PORT:-8052} networks: - app-network healthcheck: test: [ "CMD", "sh", "-c", 'python -c "import urllib.request; urllib.request.urlopen(''http://localhost:${ARCHON_AGENTS_PORT:-8052}/health'')"', ] interval: 30s timeout: 10s retries: 3 start_period: 40s # Frontend archon-frontend: profiles: ["frontend", "full", "default"] build: ./archon-ui-main container_name: archon-ui ports: - "${ARCHON_UI_PORT:-3737}:3737" environment: - VITE_API_URL=http://${HOST:-localhost}:${ARCHON_SERVER_PORT:-8181} - VITE_ARCHON_SERVER_PORT=${ARCHON_SERVER_PORT:-8181} - ARCHON_SERVER_PORT=${ARCHON_SERVER_PORT:-8181} - HOST=${HOST:-localhost} - PROD=${PROD:-false} networks: - app-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3737"] interval: 30s timeout: 10s retries: 3 volumes: - ./archon-ui-main/src:/app/src - ./archon-ui-main/public:/app/public depends_on: - archon-server networks: app-network: driver: bridge