- Add MOSAIC_TELEMETRY_* variables to .env.example with descriptions - Pass telemetry env vars to api service in production compose - Pass telemetry env vars to coordinator service in dev and swarm composes - Swarm composes default to production URL (https://tel-api.mosaicstack.dev) - Dev compose includes commented-out telemetry-api service placeholder - All compose files default MOSAIC_TELEMETRY_ENABLED to false for safety Refs #374 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
168 lines
4.5 KiB
YAML
168 lines
4.5 KiB
YAML
services:
|
|
postgres:
|
|
build:
|
|
context: ./postgres
|
|
dockerfile: Dockerfile
|
|
container_name: mosaic-postgres
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:-mosaic}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mosaic_dev_password}
|
|
POSTGRES_DB: ${POSTGRES_DB:-mosaic}
|
|
ports:
|
|
- "${POSTGRES_PORT:-5432}:5432"
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mosaic} -d ${POSTGRES_DB:-mosaic}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
networks:
|
|
- mosaic-network
|
|
|
|
valkey:
|
|
image: valkey/valkey:8-alpine
|
|
container_name: mosaic-valkey
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${VALKEY_PORT:-6379}:6379"
|
|
volumes:
|
|
- valkey_data:/data
|
|
healthcheck:
|
|
test: ["CMD", "valkey-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
networks:
|
|
- mosaic-network
|
|
|
|
coordinator:
|
|
build:
|
|
context: ../apps/coordinator
|
|
dockerfile: Dockerfile
|
|
container_name: mosaic-coordinator
|
|
restart: unless-stopped
|
|
environment:
|
|
GITEA_WEBHOOK_SECRET: ${GITEA_WEBHOOK_SECRET}
|
|
GITEA_URL: ${GITEA_URL:-https://git.mosaicstack.dev}
|
|
LOG_LEVEL: ${LOG_LEVEL:-info}
|
|
HOST: 0.0.0.0
|
|
PORT: 8000
|
|
# Telemetry (task completion tracking & predictions)
|
|
MOSAIC_TELEMETRY_ENABLED: ${MOSAIC_TELEMETRY_ENABLED:-false}
|
|
MOSAIC_TELEMETRY_SERVER_URL: ${MOSAIC_TELEMETRY_SERVER_URL:-http://telemetry-api:8000}
|
|
MOSAIC_TELEMETRY_API_KEY: ${MOSAIC_TELEMETRY_API_KEY:-}
|
|
MOSAIC_TELEMETRY_INSTANCE_ID: ${MOSAIC_TELEMETRY_INSTANCE_ID:-}
|
|
MOSAIC_TELEMETRY_DRY_RUN: ${MOSAIC_TELEMETRY_DRY_RUN:-false}
|
|
ports:
|
|
- "8000:8000"
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD",
|
|
"python",
|
|
"-c",
|
|
"import urllib.request; urllib.request.urlopen('http://localhost:8000/health')",
|
|
]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 5s
|
|
networks:
|
|
- mosaic-network
|
|
|
|
openbao:
|
|
image: quay.io/openbao/openbao:2.5.0
|
|
container_name: mosaic-openbao
|
|
restart: unless-stopped
|
|
user: root
|
|
ports:
|
|
- "127.0.0.1:${OPENBAO_PORT:-8200}:8200"
|
|
volumes:
|
|
- openbao_data:/openbao/data
|
|
- openbao_init:/openbao/init
|
|
- ./openbao/config.hcl:/openbao/config/config.hcl:ro
|
|
environment:
|
|
VAULT_ADDR: http://0.0.0.0:8200
|
|
SKIP_SETCAP: "true"
|
|
entrypoint: ["dumb-init", "--"]
|
|
command: ["bao", "server", "-config=/openbao/config/config.hcl"]
|
|
cap_add:
|
|
- IPC_LOCK
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD-SHELL",
|
|
"wget --spider --quiet 'http://127.0.0.1:8200/v1/sys/health?standbyok=true&uninitcode=200&sealedcode=200'",
|
|
]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
networks:
|
|
- mosaic-network
|
|
labels:
|
|
com.mosaic.service: "secrets"
|
|
com.mosaic.description: "OpenBao secrets management"
|
|
|
|
openbao-init:
|
|
image: quay.io/openbao/openbao:2.5.0
|
|
container_name: mosaic-openbao-init
|
|
restart: unless-stopped
|
|
user: root
|
|
volumes:
|
|
- openbao_init:/openbao/init
|
|
- ./openbao/init.sh:/init.sh:ro
|
|
environment:
|
|
VAULT_ADDR: http://openbao:8200
|
|
command: /init.sh
|
|
depends_on:
|
|
openbao:
|
|
condition: service_healthy
|
|
networks:
|
|
- mosaic-network
|
|
labels:
|
|
com.mosaic.service: "secrets-init"
|
|
com.mosaic.description: "OpenBao auto-initialization sidecar"
|
|
|
|
# ======================
|
|
# Telemetry API (Optional - for local development)
|
|
# ======================
|
|
# Uncomment to run the telemetry API locally for self-contained development.
|
|
# For production, use an external telemetry API URL instead.
|
|
# telemetry-api:
|
|
# image: git.mosaicstack.dev/mosaic/telemetry-api:latest
|
|
# container_name: mosaic-telemetry-api
|
|
# restart: unless-stopped
|
|
# environment:
|
|
# HOST: 0.0.0.0
|
|
# PORT: 8000
|
|
# ports:
|
|
# - "8001:8000"
|
|
# healthcheck:
|
|
# test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
|
# interval: 30s
|
|
# timeout: 10s
|
|
# retries: 3
|
|
# start_period: 10s
|
|
# networks:
|
|
# - mosaic-network
|
|
|
|
volumes:
|
|
postgres_data:
|
|
name: mosaic-postgres-data
|
|
valkey_data:
|
|
name: mosaic-valkey-data
|
|
openbao_data:
|
|
name: mosaic-openbao-data
|
|
openbao_init:
|
|
name: mosaic-openbao-init
|
|
|
|
networks:
|
|
mosaic-network:
|
|
name: mosaic-network
|
|
driver: bridge
|