140 lines
3.6 KiB
YAML
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
|