The first public release. What it does: https://weavesignal.top; what changed: CHANGELOG.md.
132 lines
4.1 KiB
Text
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
|