version: '3.8' services: # Agent Coordinator MCP Server agent-coordinator: build: context: . dockerfile: Dockerfile container_name: agent-coordinator environment: - MIX_ENV=prod - NATS_HOST=nats - NATS_PORT=4222 volumes: # Mount local mcp_servers.json for easy configuration - ./mcp_servers.json:/app/mcp_servers.json:ro # Mount a directory for persistent data (optional) - agent_data:/app/data ports: # Expose port 4000 if the app serves HTTP endpoints - "4000:4000" depends_on: nats: condition: service_healthy restart: unless-stopped healthcheck: test: ["/app/bin/agent_coordinator", "ping"] interval: 30s timeout: 10s retries: 3 start_period: 30s # NATS Message Broker (optional but recommended for production) nats: image: nats:2.10-alpine container_name: agent-coordinator-nats command: - '--jetstream' - '--store_dir=/data' - '--max_file_store=1G' - '--max_mem_store=256M' ports: # NATS client port - "4222:4222" # NATS HTTP monitoring port - "8222:8222" # NATS routing port for clustering - "6222:6222" volumes: - nats_data:/data restart: unless-stopped healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8222/healthz"] interval: 10s timeout: 5s retries: 3 start_period: 10s # Optional: NATS Monitoring Dashboard nats-board: image: devforth/nats-board:latest container_name: agent-coordinator-nats-board environment: - NATS_HOSTS=nats:4222 ports: - "8080:8080" depends_on: nats: condition: service_healthy restart: unless-stopped profiles: - monitoring volumes: # Persistent storage for NATS JetStream nats_data: driver: local # Persistent storage for agent coordinator data agent_data: driver: local networks: default: name: agent-coordinator-network