237 lines
7.3 KiB
Markdown
237 lines
7.3 KiB
Markdown
# 🐳 VDO.Ninja Docker
|
||
|
||
Automatisiertes Docker Image für [VDO.Ninja](https://github.com/steveseguin/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](https://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`) und `latest` getaggt
|
||
- 🪶 **Leichtgewichtig** – Basiert auf `nginx:alpine` fü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
|
||
|
||
```bash
|
||
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](https://git.techniverse.net/scriptos/-/packages/container/vdo-ninja).
|
||
|
||
### Docker Compose
|
||
|
||
Eine fertige `docker-compose.yml` liegt im Repository:
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
Oder manuell erstellen:
|
||
|
||
```yaml
|
||
services:
|
||
vdo-ninja:
|
||
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)
|
||
|
||
```yaml
|
||
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](https://github.com/steveseguin/vdo.ninja) gibt.
|
||
|
||
### So funktioniert der Update-Check:
|
||
|
||
1. 🔍 **Versions-Tag abrufen** – Der neueste Versions-Tag (z.B. `v29.0`) wird via `git ls-remote` vom Upstream abgefragt
|
||
2. 🏷️ **Registry prüfen** – Es wird geprüft, ob ein Image mit diesem Versions-Tag bereits in der Registry existiert
|
||
3. 🏗️ **Nur bei neuer Version bauen** – Ein neues Image wird nur gebaut, wenn die Version noch nicht vorhanden ist
|
||
4. 📤 **Push zur Registry** – Das fertige Image wird mit `latest` und 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
|
||
|
||
```bash
|
||
# 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:
|
||
|
||
```bash
|
||
# 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:
|
||
|
||
```bash
|
||
docker build \
|
||
--build-arg VDO_NINJA_REF=v29.0 \
|
||
-t vdo-ninja:v29.0 \
|
||
.
|
||
```
|
||
|
||
---
|
||
|
||
## 🛡️ 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](./LICENSE).
|
||
|
||
**VDO.Ninja** selbst steht unter der [AGPL-3.0-Lizenz](https://github.com/steveseguin/vdo.ninja/blob/master/AGPLv3.md).
|
||
|
||
---
|
||
|
||
## 🔗 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](https://git.techniverse.net/scriptos/-/packages/container/vdo-ninja) |
|
||
|
||
<p align="center">
|
||
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
|
||
</p>
|
||
|
||
<p align="center">
|
||
<img src="https://assets.techniverse.net/f1/logos/small/license.png" alt="License" width="15" height="15"> <a href="./LICENSE">License</a> | <img src="https://assets.techniverse.net/f1/logos/small/matrix2.svg" alt="Matrix" width="15" height="15"> <a href="https://matrix.to/#/#community:techniverse.net">Matrix</a> | <img src="https://assets.techniverse.net/f1/logos/small/mastodon2.svg" alt="Mastodon" width="15" height="15"> <a href="https://social.techniverse.net/@donnerwolke">Mastodon</a>
|
||
</p>
|