homelab-codex-ws/services/ai-cluster/docker-compose.yml

111 lines
3 KiB
YAML
Raw Normal View History

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