weavesignal/deploy/cloudron/supervisord.conf
The WeaveSignal contributors 466b32ab6a WeaveSignal 1.0.0 — release one
The first public release. What it does: https://weavesignal.top; what changed: CHANGELOG.md.
2026-11-04 12:15:42 +00:00

132 lines
4.1 KiB
Text

; SPDX-License-Identifier: AGPL-3.0-only
; SPDX-FileCopyrightText: 2026 The WeaveSignal contributors
;
; WeaveSignal's services inside the one Cloudron container. start.sh writes every settings file
; under /run/weavesignal and exports the secrets before it starts supervisord. Each service logs
; to stdout and stderr, which Cloudron collects.
[unix_http_server]
file=/run/weavesignal/supervisor.sock
chmod=0700
[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
pidfile=/run/weavesignal/supervisord.pid
user=root
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///run/weavesignal/supervisor.sock
; LiveKit with its built-in TURN (ADR-0023, ADR-0059, ADR-0080).
[program:livekit]
priority=10
command=/app/code/bin/livekit-server --config /run/weavesignal/livekit.yaml
user=cloudron
autorestart=true
startsecs=2
startretries=1000
stopasgroup=true
; On SIGTERM LiveKit drains its rooms and outlasted supervisord's 10 s every time, so the
; container's stop ended in SIGKILL; its rooms live in memory only, so 3 s is enough.
stopwaitsecs=3
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
; The listener process (M4): icecast.server (dedicated_encoder=true, ADR-0029) and the one
; encoder listeners hear. It holds the mount, plays its own fallback while playout's feed is
; away, and runs the legal logger, so listeners outlive a playout or desk restart. Its harbor,
; the feed port and /status.json are on loopback only.
[program:listeners]
priority=10
command=/usr/bin/liquidsoap /app/code/playout/listeners.liq
user=cloudron
autorestart=true
startsecs=2
startretries=1000
stopasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
; nginx: the station on 8000, the listener stream on 8001, LiveKit's signalling on 8002, the
; public pages on 8003.
[program:nginx]
priority=10
command=/usr/sbin/nginx -c /run/weavesignal/nginx.conf -g "daemon off;"
user=cloudron
autorestart=true
startsecs=1
stopasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
; The control plane: migrations on every start, then the API on loopback.
[program:control]
priority=20
command=/app/code/bin/weavesignal-control --config /run/weavesignal/control.toml serve
user=cloudron
autorestart=true
startsecs=2
startretries=1000
stopasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
; Playout: the fixed script; connects to the desk's SRT listener and retries every second
; (ADR-0086), and sends the programme as PCM in WAV to the listener process's feed.
[program:playout]
priority=20
command=/usr/bin/liquidsoap /app/code/playout/weavesignal.liq
user=cloudron
autorestart=true
startsecs=2
startretries=1000
stopasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
; The desk: a hidden room participant; a silent bed from its first moment. 0.1.x started it
; only once the mount answered (desk-start.sh): playout's switch to the desk began a chained
; Ogg stream on the mount, which icecast.server dropped. Playout no longer holds the mount, so
; the desk starts with the rest (see the README's cold starts).
[program:desk]
priority=30
command=/app/code/bin/weavesignal-desk --config /run/weavesignal/desk.toml
user=cloudron
autorestart=true
startsecs=3
startretries=1000
stopasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
; The live chat (M6, ADR-0031): its own process on the station's database, following the
; control plane's studio view; after the control plane, which applies the migrations.
[program:chat]
priority=30
command=/app/code/bin/weavesignal-chat --config /run/weavesignal/chat.toml serve
user=cloudron
autorestart=true
startsecs=2
startretries=1000
stopasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0