From 88915b082bb101c0654227be732f2974212fc34a Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 22 Mar 2026 23:15:50 +0000 Subject: [PATCH] Upload files to "/" --- .env.example | 8 +++ README.md | 132 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 50 +++++++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 .env.example create mode 100644 README.md create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ff54c40 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +SECRET_KEY=change-this-to-a-long-random-string +ADMIN_USERNAME=admin +ADMIN_PASSWORD=ChangeMe123! +TZ=Europe/Copenhagen +PUBLIC_BASE_URL=https://stream.yourdomain.example +MEDIA_BASE_URL=http://mediamtx:8888 +MEDIA_PUBLIC_HLS_BASE=https://stream.yourdomain.example/hls +MEDIAMTX_API_URL=http://mediamtx:9997 diff --git a/README.md b/README.md new file mode 100644 index 0000000..b7a5fe7 --- /dev/null +++ b/README.md @@ -0,0 +1,132 @@ +# TuxiNet StreamHub v1 + +Et komplet, selvhostet streaming-kontrolpanel til **Ubuntu LXC i Proxmox** med **Docker Compose**, **MediaMTX**, **Flask backend** og **Caddy reverse proxy**. + +## Hvad den kan i v1 + +- Opret streams med navn, slug og token +- Start/stop adgang til at publicere +- Login til admin og streamer-roller +- HLS preview direkte i panelet +- Twitch/YouTube chat embed pr. stream +- Status: live/offline, opløsning, FPS, codec, lydkanaler, sample rate, bitrate hvis ffprobe kan aflæse det +- MediaMTX auth via HTTP mod backend +- Hooks fra MediaMTX til backend ved stream ready / not ready +- Simpelt mørkt webinterface + +## Vigtige noter + +- **Lyd**: Designet til stereo-AAC workflows. Mono markeres i UI som advarsel. +- **Lav forsinkelse**: v1-preview bruger **LL-HLS/HLS** for stabilitet. MediaMTX WebRTC-porte er eksponeret til senere udbygning. +- **Start stream** betyder i v1: streamen åbnes for publishing. Serveren kan ikke fjernstarte OBS på en anden maskine. +- **Stop stream** betyder i v1: publishing nægtes ved auth, og streamen markeres utilgængelig i panelet. Hvis du senere vil kunne *kikke* sessions mere aggressivt, kan det udvides via MediaMTX Control API. + +## Arkitektur + +- `mediamtx`: ingest + preview/media-routing +- `backend`: auth, admin, DB, status, hooks, UI +- `caddy`: reverse proxy + webadgang + +## 1) LXC i Proxmox + +Anbefalet: + +- Ubuntu 24.04 LTS +- 2 vCPU minimum +- 4 GB RAM minimum +- 20 GB disk minimum +- Fast IP +- Nesting **enabled** +- Keyctl **enabled** + +Hvis Docker i unprivileged LXC driller, så brug enten: + +- privileged LXC til denne ene container, eller +- en lille Ubuntu VM i stedet + +## 2) Installer Docker i LXC + +Kør `scripts/install_docker_ubuntu.sh` som root. + +## 3) Klargør projektet + +```bash +cd /opt +mkdir -p /opt/streamhub +cd /opt/streamhub +# kopier alle filer hertil +cp .env.example .env +nano .env +``` + +Sæt mindst: + +- `SECRET_KEY` +- `ADMIN_PASSWORD` +- `PUBLIC_BASE_URL` +- `MEDIA_PUBLIC_HLS_BASE` + +## 4) Start stacken + +```bash +docker compose build +docker compose up -d +``` + +## 5) Login + +Standard admin-bruger hentes fra `.env`: + +- brugernavn: `ADMIN_USERNAME` +- kodeord: `ADMIN_PASSWORD` + +## 6) Router / firewall + +Åbn som minimum: + +- `80/tcp` +- `443/tcp` +- `1935/tcp` for RTMP ingest + +Internt bruges også: + +- `8888/tcp` HLS (bag Caddy via `/hls/*`) +- `9997/tcp` MediaMTX API kun lokalt + +## 7) OBS anbefalinger til DJ stream + +- Audio sample rate: **48 kHz** +- Channels: **Stereo** +- Audio bitrate: **256–320 kbps AAC** +- Keyframe interval: **2 sek** +- Video: fx 1920x1080 / 30 eller 50 FPS alt efter setup + +## 8) URL'er + +Admin/UI: + +- `https://ditdomæne/` + +Preview HLS via Caddy: + +- `https://ditdomæne/hls//index.m3u8` + +RTMP publish: + +- `rtmp://ditdomæne:1935/?token=` + +## 9) Begrænsninger i v1 + +- Preview er HLS/LL-HLS, ikke fuld WebRTC-player endnu +- Session-kick er ikke tvunget ind i UI endnu +- Ingen transcoding-profiler +- Ingen 2FA +- Ingen multi-node / HA + +## 10) Senere udbygning + +- WebRTC preview med dedikeret spiller +- OBS WebSocket integration +- Push til Twitch/YouTube fra panelet +- Bedre real-time metrics via websocket +- Per-stream roller og share links diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ab725c4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,50 @@ +services: + mediamtx: + image: bluenviron/mediamtx:1.17.0 + container_name: streamhub-mediamtx + restart: unless-stopped + depends_on: + - backend + ports: + - "1935:1935" # RTMP ingest + - "8888:8888" # HLS / LL-HLS preview + - "8889:8889" # WebRTC HTTP signaling (optional for later) + - "8189:8189/udp" # WebRTC ICE/UDP (optional for later) + - "127.0.0.1:9997:9997" # MediaMTX API (local only) + - "127.0.0.1:9998:9998" # Metrics (local only) + volumes: + - ./mediamtx/mediamtx.yml:/mediamtx.yml:ro + networks: + - streamhub + + backend: + build: ./backend + container_name: streamhub-backend + restart: unless-stopped + env_file: + - .env + volumes: + - ./data/db:/app/data + - ./data/logs:/app/logs + networks: + - streamhub + + caddy: + image: caddy:2.8 + container_name: streamhub-caddy + restart: unless-stopped + depends_on: + - backend + ports: + - "80:80" + - "443:443" + volumes: + - ./proxy/Caddyfile:/etc/caddy/Caddyfile:ro + - ./data/caddy:/data + - ./data/caddy_config:/config + networks: + - streamhub + +networks: + streamhub: + driver: bridge