Upload files to "/"
This commit is contained in:
@@ -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
|
||||||
@@ -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/<slug>/index.m3u8`
|
||||||
|
|
||||||
|
RTMP publish:
|
||||||
|
|
||||||
|
- `rtmp://ditdomæne:1935/<slug>?token=<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
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user