Ctrl K
ComunidadGuías…

docker-compose.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
services:
  openclaw:
    build:
      context: deploy/openclaw
      args:
        OPENCLAW_VERSION: ${OPENCLAW_VERSION:-2026.5.7}
        CODING_CLI: ${CODING_CLI:-pi}
    volumes:
      - openclaw-data:/root/.openclaw
      # Bundled OpenVoiceUI agent skills (./skills) in OpenClaw's managed skills dir.
      # Read-only; `git pull` updates them (live via OpenClaw's skills watcher, or on restart).
      # Your own skills go in /root/.openclaw/skills/<name>/ or the workspace skills/ dir.
      # See docs/SKILLS.md.
      - ./skills:/root/.openclaw/skills/openvoiceui:ro
      # Dual-mount pattern: both paths resolve to the same volume so agents
      # can't put files in the wrong place — both paths are the right place.
      - canvas-pages:/app/runtime/canvas-pages
      - canvas-pages:/root/.openclaw/workspace/canvas-pages
      - uploads:/app/runtime/uploads
      - uploads:/root/.openclaw/workspace/uploads
      # transcripts: the agent must be able to READ its own voice transcripts. They are
      # written by the OpenVoiceUI app (runtime/transcripts) but the agent only sees its
      # workspace — so a transcript/note "sent to the AI" is invisible to it without this
      # shared volume. Dual-mounted like the others.
      - transcripts:/app/runtime/transcripts
      - transcripts:/root/.openclaw/workspace/transcripts
      - generated-music:/app/runtime/generated_music
      - generated-music:/root/.openclaw/workspace/generated_music
      - music:/app/runtime/music
      - music:/root/.openclaw/workspace/music
    ports:
      - "18791:18791"
      - "${PORT:-5001}:${PORT:-5001}"
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "node", "-e", "const h=require('http');h.get('http://localhost:18791',r=>{process.exit(r.statusCode<500?0:1)}).on('error',()=>process.exit(1))"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s

  supertonic:
    build: deploy/supertonic
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8765/health')"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 120s

  openvoiceui:
    build: .
    network_mode: "service:openclaw"
    env_file:
      - .env
    environment:
      - CLAWDBOT_GATEWAY_URL=ws://127.0.0.1:18791
      - SUPERTONIC_API_URL=http://supertonic:8765
    volumes:
      - openvoiceui-runtime:/app/runtime
      - canvas-pages:/app/runtime/canvas-pages
      - uploads:/app/runtime/uploads
      - transcripts:/app/runtime/transcripts
      - generated-music:/app/runtime/generated_music
      - music:/app/runtime/music
    depends_on:
      openclaw:
        condition: service_healthy
      supertonic:
        condition: service_healthy
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5001/health/ready', timeout=5)"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s

volumes:
  openclaw-data:
  openvoiceui-runtime:
  canvas-pages:
  uploads:
  transcripts:
  generated-music:
  music: