The compose file's environment: block only forwarded the variables it explicitly referenced — CORE_ADDRESS, CORE_API_AUTH_*, CORE_WEBRTC_*, CORE_LOG_LEVEL. Everything else got the upstream Core defaults regardless of what was in .env. So 'CORE_RTMP_ADDRESS=:1937' in .env was silently ignored and Core kept binding 1935. Hit on the live TrueNAS host where another datarhei/restreamer container was already on 1935 with active stream state — couldn't just stop it. Adding explicit env passthrough for the four common collision points (RTMP, RTMPS, SRT, TLS) so an operator can remap each individually without editing this file: CORE_RTMP_ADDRESS=:1937 CORE_RTMP_ADDRESS_TLS=:1938 CORE_SRT_ADDRESS=:6002 CORE_TLS_ADDRESS=:8183 Defaults are unchanged — empty .env keeps :1935/:1936/:6000/:8181. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| core | ||
| docker-compose.yml | ||
| README.md | ||
TrueNAS deploy — WebRTC PoC (M1)
Host-networked Docker stack that runs cmd/webrtc-poc on TrueNAS for
manual end-to-end testing. Not wired into the Core binary.
Prereqs
- Docker on the TrueNAS host (TrueNAS SCALE includes it)
- LAN or public IP that clients can reach
- One free TCP port (WHEP) and one free UDP port (RTP ingest)
One-time setup
# On TrueNAS:
sudo mkdir -p /mnt/NVME/Docker/dragonfork-webrtc-poc
cd /mnt/NVME/Docker/dragonfork-webrtc-poc
# Copy the repo's deploy/truenas/docker-compose.yml in here, and the
# whole repo (or just cmd/ + core/ + go.mod + vendor/) somewhere the
# Dockerfile build context can see. Simplest: clone the repo adjacent
# and symlink docker-compose.yml, or point `context:` at the clone.
cat > .env <<EOF
WHEP_PORT=45121
RTP_PORT=49248
STREAM_ID=test
PUBLIC_IP=10.0.0.25
EOF
Run
docker compose up -d --build
docker compose logs -f
You should see:
listening for RTP on 127.0.0.1:49248 # or 0.0.0.0:49248 on real deploy
WHEP listening on :45121 — POST /whep/test to subscribe
Verify from another host on the LAN
curl -i -X GET http://10.0.0.25:45121/whep/test # → 405 (POST only)
curl -i -X POST http://10.0.0.25:45121/whep/nope # → 404 (stream not found)
For a real end-to-end check, point the repo's test/publish.sh at
10.0.0.25 49248 and the whep-client at http://10.0.0.25:45121/whep/test.
Teardown
docker compose down
Security notes
- WHEP is served plain HTTP. Put nginx-proxy-manager or Caddy in front for TLS — but note that WHEP itself is fine over HTTPS; the real media is DTLS-SRTP-encrypted regardless.
- No auth in M1. Anyone who can reach the port can subscribe. M3 adds a token check.
- The binary runs as PID 1 in
scratch— no shell, no package manager, no privilege escalation path. Exit codes only.