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