version: '3.8' # Provisioning Platform Services # Docker Compose configuration for running all platform services services: # Orchestrator - Core workflow coordination orchestrator: build: context: ./orchestrator dockerfile: Dockerfile.runtime container_name: provisioning-orchestrator ports: - "8080:8080" volumes: - orchestrator-data:/data - orchestrator-logs:/var/log/orchestrator environment: - RUST_LOG=info - DATA_DIR=/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 10s timeout: 5s retries: 3 start_period: 10s restart: unless-stopped networks: - provisioning-net # Control Center - Web UI control-center: build: context: ./control-center dockerfile: Dockerfile.runtime container_name: provisioning-control-center ports: - "8081:8081" volumes: - control-center-data:/data environment: - ORCHESTRATOR_URL=http://orchestrator:8080 depends_on: orchestrator: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081/health"] interval: 10s timeout: 5s retries: 3 restart: unless-stopped networks: - provisioning-net # CoreDNS - Local DNS resolution coredns: image: coredns/coredns:1.11.1 container_name: provisioning-coredns ports: - "5353:53/udp" - "5353:53/tcp" volumes: - ./coredns/Corefile:/Corefile:ro - ./coredns/zones:/zones:ro command: ["-conf", "/Corefile"] healthcheck: test: ["CMD", "dig", "@127.0.0.1", "-p", "53", "health.check"] interval: 10s timeout: 5s retries: 3 restart: unless-stopped networks: - provisioning-net # Gitea - Git server gitea: image: gitea/gitea:1.21 container_name: provisioning-gitea ports: - "3000:3000" - "222:22" volumes: - gitea-data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=sqlite3 - GITEA__server__DOMAIN=localhost - GITEA__server__HTTP_PORT=3000 - GITEA__server__ROOT_URL=http://localhost:3000/ healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"] interval: 15s timeout: 5s retries: 5 start_period: 30s restart: unless-stopped networks: - provisioning-net # OCI Registry - Container registry (Zot) oci-registry: image: ghcr.io/project-zot/zot:latest container_name: provisioning-oci-registry ports: - "5000:5000" volumes: - oci-registry-data:/var/lib/registry - ./oci-registry/config.json:/etc/zot/config.json:ro environment: - ZOT_LOG_LEVEL=info healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5000/v2/"] interval: 10s timeout: 5s retries: 3 restart: unless-stopped networks: - provisioning-net # MCP Server - Model Context Protocol mcp-server: build: context: ./mcp-server dockerfile: Dockerfile container_name: provisioning-mcp-server ports: - "8082:8082" volumes: - mcp-server-data:/data environment: - ORCHESTRATOR_URL=http://orchestrator:8080 depends_on: orchestrator: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8082/health"] interval: 10s timeout: 5s retries: 3 restart: unless-stopped networks: - provisioning-net # API Gateway - Unified REST API api-gateway: build: context: ./api-gateway dockerfile: Dockerfile container_name: provisioning-api-gateway ports: - "8083:8083" environment: - ORCHESTRATOR_URL=http://orchestrator:8080 - CONTROL_CENTER_URL=http://control-center:8081 - MCP_SERVER_URL=http://mcp-server:8082 depends_on: orchestrator: condition: service_healthy control-center: condition: service_healthy mcp-server: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8083/health"] interval: 10s timeout: 5s retries: 3 restart: unless-stopped networks: - provisioning-net volumes: orchestrator-data: driver: local orchestrator-logs: driver: local control-center-data: driver: local gitea-data: driver: local oci-registry-data: driver: local mcp-server-data: driver: local networks: provisioning-net: driver: bridge ipam: config: - subnet: 172.20.0.0/16