7.6 KiB
🐳 VDO.Ninja Docker
Automatisiertes Docker Image für VDO.Ninja – die kostenlose, browserbasierte Peer-to-Peer-Video-Streaming-Lösung.
Dieses Repository baut täglich ein aktuelles Docker Image aus dem originalen VDO.Ninja-Quellcode und stellt es über die Gitea Container Registry bereit.
📋 Übersicht
VDO.Ninja (ehemals OBS.Ninja) ermöglicht es, Video- und Audiostreams direkt im Browser zu teilen – ohne Server, ohne Accounts, ohne Software-Installation. Es wird häufig in Kombination mit OBS Studio verwendet, um Gäste remote in Livestreams einzubinden.
Da das Original-Repository kein offizielles Docker Image anbietet, übernimmt dieses Projekt den automatisierten Build und die Bereitstellung als Docker Container.
✨ Features
- 🔄 Täglicher automatischer Build – Prüft täglich um 20:00 Uhr auf neue Commits
- 🧠 Intelligenter Update-Check – Baut nur, wenn sich im Upstream etwas geändert hat
- 🏷️ Versionierte Tags – Jedes Image wird mit Upstream-Version (z.B.
v29.0) undlatestgetaggt - 🪶 Leichtgewichtig – Basiert auf
nginx:alpinefür minimale Imagegröße - 🔒 Security Headers – Nginx-Konfiguration mit Sicherheits-Headern
- 📦 Gzip-Komprimierung – Optimierte Auslieferung der statischen Dateien
- ❤️ Healthcheck – Integrierter Docker-Healthcheck
🚀 Schnellstart
Docker Run
docker run -d \
--name vdo-ninja \
-p 8080:80 \
--restart unless-stopped \
git.techniverse.net/scriptos/vdo-ninja:latest
Danach ist VDO.Ninja unter http://localhost:8080 erreichbar. Alle verfügbaren Versionen findest du in der 📦 Container Registry.
Docker Compose
Eine fertige docker-compose.yml liegt im Repository:
docker compose up -d
Die Compose-Datei kann das Image bei Bedarf direkt aus dem lokalen Repository bauen:
docker compose build
docker compose up -d
Oder manuell erstellen:
services:
vdo-ninja:
build:
context: .
image: git.techniverse.net/scriptos/vdo-ninja:latest
container_name: vdo-ninja
restart: unless-stopped
ports:
- "8080:80"
⚙️ Konfiguration
🔌 Ports
| Container-Port | Beschreibung |
|---|---|
80 |
HTTP (Nginx Webserver) |
Der Container lauscht intern auf Port 80. Über -p oder ports: kann dieser auf einen beliebigen Host-Port gemappt werden.
🔐 Reverse Proxy (empfohlen)
Wichtig: WebRTC benötigt eine sichere Verbindung (HTTPS). Für den produktiven Einsatz sollte ein Reverse Proxy mit TLS-Terminierung vorgeschaltet werden.
Beispiel: Traefik (via Docker Labels)
services:
vdo-ninja:
image: git.techniverse.net/scriptos/vdo-ninja:latest
container_name: vdo-ninja
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.vdo-ninja.rule=Host(`vdo.example.de`)"
- "traefik.http.routers.vdo-ninja.entrypoints=websecure"
- "traefik.http.routers.vdo-ninja.tls.certresolver=letsencrypt"
- "traefik.http.services.vdo-ninja.loadbalancer.server.port=80"
networks:
- proxy
networks:
proxy:
external: true
Beispiel: Caddy
vdo.example.de {
reverse_proxy vdo-ninja:80
}
🔄 Automatische Updates
Der Gitea Workflow (.gitea/workflows/daily-docker.yml) prüft täglich um 20:00 Uhr (MESZ) ob es neue Commits im originalen VDO.Ninja Repository gibt.
So funktioniert der Update-Check:
- 🔍 Versions-Tag abrufen – Der neueste Versions-Tag (z.B.
v29.0) wird viagit ls-remotevom Upstream abgefragt - 🏷️ Registry prüfen – Es wird geprüft, ob ein Image mit diesem Versions-Tag bereits in der Registry existiert
- 🏗️ Nur bei neuer Version bauen – Ein neues Image wird nur gebaut, wenn die Version noch nicht vorhanden ist
- 📤 Push zur Registry – Das fertige Image wird mit
latestund dem Versions-Tag in die Registry gepusht
⏰ Zeitplan
| Zeitzone | Uhrzeit |
|---|---|
| MESZ (Sommerzeit) | 20:00 Uhr |
| MEZ (Winterzeit) | 19:00 Uhr |
| UTC | 18:00 Uhr |
Der Workflow kann jederzeit auch manuell über die Gitea-Oberfläche gestartet werden (
workflow_dispatch).
📦 Image-Tags
| Tag | Beschreibung |
|---|---|
latest |
Immer das neueste Build |
vX.Y |
VDO.Ninja Upstream-Version (z.B. v29.0) |
Beispiel: Bestimmte Version verwenden
# Immer die neueste Version
docker pull git.techniverse.net/scriptos/vdo-ninja:latest
# Bestimmte Version pinnen
docker pull git.techniverse.net/scriptos/vdo-ninja:v29.0
🏗️ Manuell bauen
Das Image kann auch lokal gebaut werden:
# Docker Image bauen
docker build -t vdo-ninja:local .
# Container starten
docker run -d -p 8080:80 --name vdo-ninja vdo-ninja:local
Der VDO.Ninja-Quellcode wird beim Build automatisch aus dem Upstream-Repository geladen. Ohne weitere Angaben wird der Default-Branch des Upstream-Repositories verwendet.
Optional kann ein bestimmter Branch oder Tag gebaut werden:
docker build \
--build-arg VDO_NINJA_REF=v29.0 \
-t vdo-ninja:v29.0 \
.
Das mit docker build erzeugte lokale Image kann anschließend auch per Compose gestartet werden:
VDO_NINJA_IMAGE=vdo-ninja:v29.0 docker compose up -d
🛡️ Secrets & Variablen
Folgende Secrets und Variablen müssen in Gitea konfiguriert sein:
Secrets
| Name | Beschreibung |
|---|---|
REGISTRY_USER |
Benutzername für die Container Registry |
REGISTRY_TOKEN |
Token/Passwort für die Container Registry |
Variablen
| Name | Beschreibung | Beispiel |
|---|---|---|
REGISTRY_URL |
URL der Container Registry | https://git.techniverse.net |
🗂️ Projektstruktur
.
├── .gitea/
│ └── workflows/
│ └── daily-docker.yml # 🔄 Gitea Workflow (täglicher Build)
├── Dockerfile # 🐳 Docker-Bauanleitung
├── nginx.conf # ⚙️ Nginx-Konfiguration
├── docker-compose.yml # 🚀 Compose-Datei für einfaches Deployment
├── .dockerignore # 🚫 Dateien die nicht ins Image gehören
├── LICENSE # 📄 MIT-Lizenz (dieses Repo)
└── README.md # 📖 Diese Datei
📄 Lizenz
Dieses Repository (Dockerfile, Workflow, Konfiguration) steht unter der MIT-Lizenz.
VDO.Ninja selbst steht unter der AGPL-3.0-Lizenz.
🔗 Links
| Link | |
|---|---|
| 🌐 VDO.Ninja | https://vdo.ninja |
| 📦 Original-Repository | https://github.com/steveseguin/vdo.ninja |
| 📖 VDO.Ninja Dokumentation | https://docs.vdo.ninja |
| 🐳 Docker Image (Registry) | git.techniverse.net/scriptos/vdo-ninja |