prvng_platform/infrastructure/docker/docker-compose.yaml
2026-02-18 00:03:05 +00:00

258 lines
6.5 KiB
YAML

# Provisioning Platform Services
# Docker Compose configuration for running all platform services
services:
# Orchestrator - Core workflow coordination
orchestrator:
build:
context: ../..
dockerfile: crates/orchestrator/Dockerfile
container_name: provisioning-orchestrator
ports:
- "8080:8080"
volumes:
- orchestrator-data:/data
- orchestrator-logs:/var/log/orchestrator
- /var/run/docker.sock:/var/run/docker.sock # For test environment service
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: ../..
dockerfile: crates/control-center/Dockerfile
container_name: provisioning-control-center
command: ["control-center", "--config", "/etc/provisioning/config.defaults.toml"]
ports:
- "8081:8081"
volumes:
- control-center-data:/data
environment:
- ORCHESTRATOR_URL=http://orchestrator:8080
- RUST_LOG=info
depends_on:
orchestrator:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
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:
- ../../config/coredns/Corefile:/Corefile:ro
- ../../config/coredns/zones:/zones:ro
command: ["-conf", "/Corefile"]
# Health check disabled - minimal image has no networking tools
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
# Health check disabled - minimal image has no networking tools
restart: unless-stopped
networks:
- provisioning-net
# MCP Server - Model Context Protocol
mcp-server:
build:
context: ../..
dockerfile: crates/mcp-server/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
start_period: 10s
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
start_period: 10s
restart: unless-stopped
networks:
- provisioning-net
# Provisioning Daemon - Core provisioning service
provisioning-daemon:
build:
context: ../..
dockerfile: crates/provisioning-daemon/Dockerfile
container_name: provisioning-daemon
ports:
- "8079:8079"
volumes:
- daemon-data:/data
- daemon-config:/etc/provisioning
environment:
- RUST_LOG=info
- DATA_DIR=/data
- PROVISIONING_DAEMON_MODE=solo
- PROVISIONING_CONFIG_DIR=/etc/provisioning
depends_on:
orchestrator:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8079/api/v1/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
restart: unless-stopped
networks:
- provisioning-net
# RAG Service - Retrieval-Augmented Generation service
provisioning-rag:
build:
context: ../..
dockerfile: crates/rag/docker/Dockerfile
container_name: provisioning-rag
ports:
- "9090:9090"
volumes:
- rag-data:/app/data
- rag-cache:/app/cache
environment:
- PROVISIONING_LOG_LEVEL=info
- PROVISIONING_API_HOST=0.0.0.0
- PROVISIONING_API_PORT=9090
- PROVISIONING_CACHE_SIZE=1000
- PROVISIONING_CACHE_TTL_SECS=3600
depends_on:
orchestrator:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9090/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 5s
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
daemon-data:
driver: local
daemon-config:
driver: local
rag-data:
driver: local
rag-cache:
driver: local
networks:
provisioning-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16