Add JARVIS_ROLE (full|browser|bot) via a run-if-role.sh supervisord guard so one image serves three layouts. Make Chrome CDP bind configurable (CDP_BIND) and publishable on the LAN (CDP_PUBLISH_BIND) so a bot on another PC can drive this host's on-screen Chrome over the internal network (no auth, as requested).
104 lines
3.2 KiB
Plaintext
104 lines
3.2 KiB
Plaintext
[supervisord]
|
|
nodaemon=true
|
|
user=root
|
|
logfile=/var/log/supervisord.log
|
|
pidfile=/run/supervisord.pid
|
|
|
|
[unix_http_server]
|
|
file=/run/supervisor.sock
|
|
|
|
[supervisorctl]
|
|
serverurl=unix:///run/supervisor.sock
|
|
|
|
[rpcinterface:supervisor]
|
|
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
|
|
|
[program:xvnc]
|
|
command=/app/docker/run-if-role.sh full,browser /app/docker/run-xvnc.sh
|
|
priority=100
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:pulse]
|
|
command=/app/docker/run-if-role.sh full,browser /app/docker/run-pulse.sh
|
|
priority=150
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:xfce]
|
|
command=/app/docker/run-if-role.sh full,browser /app/docker/run-xfce.sh
|
|
priority=200
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:novnc]
|
|
command=/app/docker/run-if-role.sh full,browser websockify --web=/usr/share/novnc 6080 localhost:5901
|
|
priority=250
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:melo-worker]
|
|
; Warm MeloTTS Korean voice (speed 1.5) in its own py3.11 venv. The bridge's
|
|
; synthesize() POSTs here; if this is down the bridge falls back to Piper.
|
|
command=/app/docker/run-if-role.sh full,bot /opt/melo/bin/python /app/bridge/melo_worker.py
|
|
directory=/app
|
|
; HF_HOME points at the dedicated, image-baked melo cache (warmed in
|
|
; setup-melo.sh). The brain's whisper_cache volume is mounted over
|
|
; /root/.cache/huggingface, so without this the pre-cached BERT + KR checkpoint
|
|
; would be shadowed and re-downloaded (and would fail if the host is offline).
|
|
; HF_HUB_OFFLINE/TRANSFORMERS_OFFLINE force pure-cache reads: the pinned old
|
|
; transformers/huggingface_hub otherwise retry the network on every load and
|
|
; error out instead of falling back to the (complete) baked cache.
|
|
; MELO_DEVICE inherits from the container env (compose sets it; default cuda)
|
|
; so the worker runs MeloTTS on the GPU. supervisord interpolates %(ENV_x)s
|
|
; from its own environment, which is the container's.
|
|
environment=MELO_LANGUAGE="KR",MELO_SPEED="1.5",MELO_DEVICE="%(ENV_MELO_DEVICE)s",MELO_WORKER_HOST="127.0.0.1",MELO_WORKER_PORT="8770",HF_HOME="/opt/melo-cache",HF_HUB_OFFLINE="1",TRANSFORMERS_OFFLINE="1"
|
|
priority=280
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:bridge]
|
|
command=/app/docker/run-if-role.sh full,bot /opt/venv/bin/python -m bridge.server
|
|
directory=/app
|
|
priority=300
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:chrome]
|
|
command=/app/docker/run-if-role.sh full,browser /app/docker/run-chrome.sh
|
|
priority=350
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:bot]
|
|
command=/app/docker/run-if-role.sh full,bot /app/docker/run-bot.sh
|
|
directory=/app/bot
|
|
priority=400
|
|
autorestart=true
|
|
startretries=999
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|