provisioning-code/examples/docker-compose.local.yml

140 lines
3.6 KiB
YAML

version: '3.9'
services:
# Catalog Registry: Provides schemas and metadata for all taskservs
catalog-registry:
image: provisioning/catalog-registry:latest
container_name: catalog-registry
restart: unless-stopped
ports:
- "8082:8082"
environment:
REGISTRY_PORT: "8082"
EXTENSIONS_PATH: /extensions
LOG_LEVEL: ${LOG_LEVEL:-info}
volumes:
- ./extensions:/extensions:ro
- ./schemas:/schemas:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8082/api/v1/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
networks:
- provisioning
# Orchestrator: Batch workflow executor and taskserv coordinator
orchestrator:
image: provisioning/orchestrator:latest
container_name: orchestrator
restart: unless-stopped
ports:
- "9090:9090"
environment:
ORCHESTRATOR_PORT: "9090"
REGISTRY_URL: http://catalog-registry:8082
ETCD_ENDPOINTS: http://etcd:2379
LOG_LEVEL: ${LOG_LEVEL:-info}
volumes:
- ./workflows:/workflows:rw
- ./workspaces:/workspaces:rw
- ./config:/config:ro
depends_on:
catalog-registry:
condition: service_healthy
etcd:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9090/api/v1/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
networks:
- provisioning
# ETCD: Distributed coordination for orchestrator state
etcd:
image: quay.io/coreos/etcd:v3.5.11
container_name: etcd
restart: unless-stopped
ports:
- "2379:2379"
- "2380:2380"
environment:
ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
ETCD_ADVERTISE_CLIENT_URLS: http://etcd:2379
ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd:2380
ETCD_INITIAL_CLUSTER: "etcd=http://etcd:2380"
ETCD_INITIAL_CLUSTER_STATE: "new"
ETCD_INITIAL_CLUSTER_TOKEN: "provisioning-cluster"
ETCD_NAME: "etcd"
ETCD_SNAPSHOT_COUNT: "10000"
ETCD_LOG_LEVEL: info
volumes:
- etcd-data:/etcd-data
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
networks:
- provisioning
# API Gateway: Frontend for local testing
api-gateway:
image: provisioning/api-gateway:latest
container_name: api-gateway
restart: unless-stopped
ports:
- "8080:8080"
environment:
GATEWAY_PORT: "8080"
REGISTRY_URL: http://catalog-registry:8082
ORCHESTRATOR_URL: http://orchestrator:9090
LOG_LEVEL: ${LOG_LEVEL:-info}
depends_on:
catalog-registry:
condition: service_healthy
orchestrator:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/v1/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
networks:
- provisioning
# Optional: Prometheus for metrics collection
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9091:9090"
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
networks:
- provisioning
volumes:
etcd-data:
driver: local
prometheus-data:
driver: local
networks:
provisioning:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16