111 lines
3 KiB
YAML
111 lines
3 KiB
YAML
services:
|
|
codex-worker:
|
|
image: ai-cluster-codex-worker
|
|
restart: unless-stopped
|
|
environment:
|
|
- AGENT_ID=vps-dev-1
|
|
- ROLE=dev
|
|
- MQTT_HOST=mosquitto
|
|
- MQTT_PORT=1883
|
|
- MQTT_USERNAME=${MQTT_USERNAME:-codex}
|
|
- MQTT_PASSWORD=${MQTT_PASSWORD}
|
|
- GATEWAY_BASE_URL=${GATEWAY_BASE_URL:-http://piha:8080}
|
|
- REQUEST_TIMEOUT_SECONDS=30
|
|
command: ["python", "worker.py"]
|
|
networks:
|
|
- internal
|
|
|
|
openclaw:
|
|
image: ai-cluster-openclaw
|
|
restart: unless-stopped
|
|
environment:
|
|
- MQTT_HOST=mosquitto
|
|
- MQTT_PORT=1883
|
|
- MQTT_USERNAME=${MQTT_USERNAME:-codex}
|
|
- MQTT_PASSWORD=${MQTT_PASSWORD}
|
|
command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
ports:
|
|
- "8000:8000"
|
|
networks:
|
|
- internal
|
|
- npm_default
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-qO-", "http://localhost:8000/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 15s
|
|
|
|
planner-worker:
|
|
image: ai-cluster-planner-worker
|
|
restart: unless-stopped
|
|
environment:
|
|
- AGENT_ID=vps-planner-1
|
|
- ROLE=planner
|
|
- MQTT_HOST=mosquitto
|
|
- MQTT_PORT=1883
|
|
- MQTT_USERNAME=${MQTT_USERNAME:-codex}
|
|
- MQTT_PASSWORD=${MQTT_PASSWORD}
|
|
command: ["python", "planner_worker.py"]
|
|
networks:
|
|
- internal
|
|
|
|
service-ops-worker:
|
|
image: ai-cluster-service-ops-worker
|
|
restart: unless-stopped
|
|
environment:
|
|
- AGENT_ID=vps-service-ops-1
|
|
- ROLE=service-ops
|
|
- MQTT_HOST=mosquitto
|
|
- MQTT_PORT=1883
|
|
- MQTT_USERNAME=${MQTT_USERNAME:-codex}
|
|
- MQTT_PASSWORD=${MQTT_PASSWORD}
|
|
- COMPOSE_PROJECT_NAME=ai-cluster
|
|
command: ["python", "service_ops_worker.py"]
|
|
volumes:
|
|
# Post-migration: compose definition and env are in the repo/runtime paths.
|
|
# Pre-cutover these are overridden to old paths via docker-compose.override.yml.
|
|
- /home/oskar/homelab-codex-ws/services/ai-cluster/docker-compose.yml:/app/docker-compose.yml:ro
|
|
- /opt/homelab/config/ai-cluster/.env:/app/.env:ro
|
|
- /var/run/docker.sock:/var/run/docker.sock:rw
|
|
networks:
|
|
- internal
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
restart: unless-stopped
|
|
command: ["redis-server"]
|
|
volumes:
|
|
- redis_data:/data
|
|
networks:
|
|
- internal
|
|
|
|
mosquitto:
|
|
image: eclipse-mosquitto:2
|
|
container_name: mosquitto
|
|
restart: unless-stopped
|
|
command: ["/usr/sbin/mosquitto", "-c", "/mosquitto/config/mosquitto.conf"]
|
|
ports:
|
|
# Tailscale IP binding — matches running container
|
|
- "100.95.58.48:1883:1883"
|
|
volumes:
|
|
# Config: kept at old path until mosquitto config migration is complete
|
|
- /home/dockeruser/docker/ai-cluster/mosquitto:/mosquitto/config:ro
|
|
- mosquitto_data:/mosquitto/data
|
|
- mosquitto_log:/mosquitto/log
|
|
networks:
|
|
- internal
|
|
|
|
volumes:
|
|
redis_data:
|
|
mosquitto_data:
|
|
mosquitto_log:
|
|
|
|
networks:
|
|
internal:
|
|
driver: bridge
|
|
name: ai-cluster_ai-cluster
|
|
npm_default:
|
|
external: true
|
|
name: npm_default
|