Aggiunge registry nodi stream e provisioning Hetzner/lab per lo scale-out.

Prepara l'architettura multi-nodo (MediaMTX+ffmpeg) con assignment URL per sessione, admin di provision/drain e provider Cloud/DNS astratti verso mltv-stream.net.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-09 19:52:47 +02:00
co-authored by Cursor
parent 45bdda7c95
commit c3878cdc6d
48 changed files with 1980 additions and 25 deletions
+18
View File
@@ -104,3 +104,21 @@ OPS_LOG_SUBSCRIBER=false
# Sentry (opzionale — error tracking produzione)
SENTRY_DSN=
SENTRY_TRACES_SAMPLE_RATE=0.1
# --- Stream autoscale (Hetzner Cloud + DNS mltv-stream.net) ---
# Token progetto matchlivetv-stream (Read & Write). Non committare il valore reale.
HCLOUD_TOKEN=
HCLOUD_LOCATION=fsn1
HCLOUD_SERVER_TYPE=cpx21
HCLOUD_IMAGE=debian-12
HCLOUD_SSH_KEY=matchlivetv-stream
HCLOUD_NETWORK_ID=
HCLOUD_USER_DATA_FILE=/opt/matchlivetv/infra/stream-node/cloud-init.yaml
STREAM_DNS_ZONE=mltv-stream.net
STREAM_DNS_TTL=60
STREAM_CLOUD_DNS_SUFFIX=mltv-stream.net
STREAM_CLOUD_MAX_PUBLISHERS=4
STREAM_NODE_ENV=prod
# Lab locale di default; il bottone admin "Provisiona nodo Hetzner" usa comunque i provider hetzner.
STREAM_CLOUD_PROVIDER=local_lab
STREAM_DNS_PROVIDER=lab
+41
View File
@@ -0,0 +1,41 @@
#cloud-config
# Cloud-init minimale per nodo stream Hetzner (MediaMTX + ffmpeg).
# Uso in .env produzione:
# HCLOUD_USER_DATA_FILE=/opt/matchlivetv/infra/stream-node/cloud-init.yaml
#
# Per boot più veloci: creare uno snapshot dopo il primo setup e usare HCLOUD_IMAGE=<snapshot>.
package_update: true
packages:
- docker.io
- ffmpeg
- curl
runcmd:
- systemctl enable --now docker
- mkdir -p /opt/stream-node /recordings /slates
- |
cat >/opt/stream-node/docker-compose.yml <<'EOF'
services:
mediamtx:
image: bluenviron/mediamtx:latest
network_mode: host
restart: unless-stopped
volumes:
- ./mediamtx.yml:/mediamtx.yml:ro
- /recordings:/recordings
- /slates:/slates:ro
command: /mediamtx.yml
EOF
- |
cat >/opt/stream-node/mediamtx.yml <<'EOF'
logLevel: info
api: yes
apiAddress: :9997
rtmp: yes
rtmpAddress: :1935
hls: yes
hlsAddress: :8888
paths:
all_others:
EOF
- cd /opt/stream-node && docker compose up -d