Owncast 0.3 mit Docker installieren: Selbstgehostete Live-Streaming-Plattform mit integriertem Chat
Owncast ist die quelloffene Twitch-Alternative als Docker-Container: RTMP-Ingest, HLS-Transcodierung, Webplayer und Chat ohne externe Datenbank. Diese Anleitung zeigt, wie Sie Owncast 0.3 in 15 Minuten auf einem Linux-Host produktionsbereit aufsetzen und eine bestehende 0.2-Installation umstellen.
Werbung Mit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Wer Live-Streams auf eigener Infrastruktur statt bei Twitch oder YouTube betreiben will, findet in Owncast eine passende Lösung. Die Open-Source-Plattform (MIT-Lizenz) ist ein einziger, eigenständiger Go-Container: Er nimmt den Stream per RTMP von OBS, Streamlabs oder Restream entgegen, wandelt ihn per FFmpeg in HLS (HTTP Live Streaming) um und liefert ihn mit Webplayer und Chat an Ihre Zuschauer aus. Eine externe Datenbank oder einen separaten Medienserver brauchen Sie nicht. Version 0.3.0 bringt zusätzlich Plugins, hervorgehobene Streams anderer Owncast-Server (Featured Streams) und eine Benutzerverwaltung. Typische Einsätze sind Community-Streams, Firmen-Webcasts und interne Übertragungen.
Voraussetzungen
- Docker Engine >= 20.10 und Docker Compose Plugin v2 (
docker composeohne Bindestrich) auf Linux-Host, VM oder NAS. Zur Installation siehe Docker und Docker Compose auf Linux installieren. - x86-64 oder ARM (arm64, arm/v7), mindestens 2 CPU-Kerne und 1 GB RAM für eine Ausgabequalität; für mehrere Qualitätsstufen (z. B. 1080p + 720p) 4 Kerne und 2 GB RAM, da die Transcodierung CPU-intensiv ist.
- Offene Ports in der Firewall: TCP 8080 (Web) und TCP 1935 (RTMP), im Heimnetz zusätzlich Portweiterleitung am Router.
- Mindestens 10 GB freier Speicherplatz für lokale HLS-Segmente, bei langen Streams alternativ S3-kompatibler Objektspeicher.
- Optional: Reverse Proxy (Caddy, Nginx, Traefik) für HTTPS, ohne TLS keine Fediverse-Integration. Die Anleitung Caddy als Reverse Proxy einrichten erklärt das.
- Streaming-Software: OBS Studio oder eine andere RTMP-fähige Software.
Eckdaten auf einen Blick
| Parameter | Wert | Hinweis |
|---|---|---|
| Image | owncast/owncast:0.3.0 | Stabiles Tag (September 2026), siehe Schritt 3 |
| Architekturen | amd64, arm64, arm/v7, 386 | x86-Server, Raspberry Pi 3/4/5, NAS |
| Port 8080 | HTTP: Webplayer und Admin | Pflicht; im Admin-Panel änderbar (erfordert Neustart) |
| Port 1935 | RTMP: Stream-Ingest | Pflicht; muss direkt vom Host erreichbar sein |
| Volume | ./data:/app/data | SQLite-DB, Konfiguration, Thumbnails, HLS-Segmente |
| Datenbank | SQLite (eingebettet) | Keine externe DB |
| Standard-Login | admin / abc123 | Sofort nach Erststart ändern! |
| Standard-Stream-Key | abc123 | Separat vom Admin-Passwort |
| Lizenz | MIT | Maintainer: Gabe Kangas |
Schritt 1: Projektordner und Verzeichnisstruktur anlegen
Alle dauerhaften Daten (SQLite-Datenbank, Konfiguration, HLS-Segmente) landen im Unterordner data/, der als Volume eingebunden wird.
sudo mkdir -p /opt/owncast/data
cd /opt/owncastOhne sudo oder auf einem NAS passen Sie den Pfad an, z. B. ~/owncast. Der Container braucht Schreibrechte auf data/.
Das Verzeichnis existiert und ist beschreibbar.
ls -la /opt/owncast/
# Erwartete Ausgabe:
# drwxr-xr-x data/Schritt 2: .env-Datei anlegen
Pflicht-Variablen gibt es nicht, die Konfiguration erfolgt im Admin-Panel. Die .env hält nur die Host-Ports, damit Sie Port-Kollisionen ohne Eingriff in die compose.yaml lösen.
# /opt/owncast/.env
# Externe Ports für den Owncast-Container (Host-seitig)
OWNCAST_WEB_PORT=8080
OWNCAST_RTMP_PORT=1935
# Hinweis: Falls Port 8080 bereits belegt ist (z. B. durch Portainer),
# OWNCAST_WEB_PORT=8090 oder einen anderen freien Port setzen.Die Datei ist vorhanden und korrekt formatiert.
cat /opt/owncast/.env
# Ausgabe: Die beiden PORT-Variablen erscheinen ohne Fehler.Schritt 3: compose.yaml erstellen
Erstellen Sie die Compose-Datei: ein Service, zwei Ports, ein Volume, keine Datenbank und kein eigenes Netzwerk.
# /opt/owncast/compose.yaml
services:
owncast:
image: owncast/owncast:0.3.0
container_name: owncast
restart: unless-stopped
ports:
- "${OWNCAST_WEB_PORT:-8080}:8080" # Webinterface + Admin-Panel
- "${OWNCAST_RTMP_PORT:-1935}:1935" # RTMP-Ingest (OBS, Streamlabs ...)
volumes:
- ./data:/app/data # SQLite-DB, Konfig, HLS-Segmente
# Keine Pflicht-Umgebungsvariablen erforderlich.
# Alle Einstellungen im Admin-Panel: http://[HOST]:8080/admin
# Standard-Login: admin / abc123 -- SOFORT aendern!
# Standard-Stream-Key: abc123 -- SOFORT aendern!Das offizielle Beispiel nutzt latest. Damit holt jedes docker compose pull ungeprüft neue Versionen, auch Sprünge wie von 0.2 auf 0.3. Schreiben Sie 0.3.0 fest und lassen Sie sich per Diun oder WUD über neue Versionen benachrichtigen. Die Plugin-Unterstützung steckt laut Release Notes bereits in 0.3.0; das Nightly-Image ghcr.io/owncast/owncast:nightly, auf das die Container-Doku noch verweist, brauchen Sie dafür nicht.
Die YAML-Syntax ist gültig.
cd /opt/owncast
docker compose config
# Erwartete Ausgabe: Aufgelöste compose.yaml ohne Syntaxfehler.Schritt 4: Container starten
Starten Sie Owncast im Hintergrund. Docker lädt das Image beim ersten Start automatisch herunter.
cd /opt/owncast
docker compose up -dDen aktuellen Status prüfen Sie so:
docker compose ps
# Erwartete Ausgabe (Spalte STATUS = "Up"):
# NAME IMAGE COMMAND SERVICE STATUS PORTS
# owncast owncast/owncast:0.3.0 ... owncast Up 0.0.0.0:8080->8080/tcp, 0.0.0.0:1935->1935/tcpDie Logs sollten keine Fehlermeldungen zu Ports oder Volumes zeigen:
docker compose logs owncast
# Erwartete Ausgabe enthält u. a.:
# msg="Owncast v0.3.0-linux-64bit (...)"
# msg="Web server is listening on port 8080."
# msg="Configure this server by visiting /admin."Der HTTP-Endpunkt antwortet mit 200. Im Test auf einem Debian-12-Host mit Docker lief owncast/owncast:0.3.0 mit genau dieser compose.yaml und .env nach wenigen Sekunden.
curl -I http://localhost:8080
# Erwartete Ausgabe:
# HTTP/1.1 200 OKSchritt 5: Ersteinrichtung im Admin-Panel
Öffnen Sie http://[HOST-IP]:8080/admin im Browser. Melden Sie sich mit admin / abc123 an und nehmen Sie sofort diese Einstellungen vor, denn ein öffentlich erreichbarer Server mit Standardpasswort ist schnell übernommen:
- Admin-Passwort ändern: Unter Configuration → Server Setup, Reiter Server Config, Feld Admin Password. Wählen Sie ein starkes, zufälliges Passwort.
- Stream-Key ändern: Unter Configuration → Server Setup, Reiter Stream Keys. Er ist vom Admin-Passwort unabhängig, Standard ist ebenfalls
abc123. - Server-Name und -URL setzen: Unter Configuration → General die Felder Name und Server URL ausfüllen (z. B.
https://stream.example.com). Ohne korrekte Server-URL funktioniert die Fediverse-Integration nicht. - Video-Ausgaben konfigurieren: Unter Configuration → Video, Abschnitt Stream output. Auf einem VPS mit 2 CPU-Kernen genügt eine Ausgabevariante mit höchstens 720p/30fps.
- Chat-Einstellungen anpassen: Unter Configuration → Chat stellen Sie Moderation, Authentifizierungspflicht und Emojis ein.
Melden Sie sich erneut an; abc123 darf nicht mehr funktionieren (im Test: altes Passwort 401, neues 200, auch nach Neustart). Der neue Stream-Key ist im Reiter Stream Keys sichtbar.
Schritt 6: OBS Studio verbinden und ersten Stream testen
Tragen Sie in OBS Studio unter Einstellungen > Stream ein:
| OBS-Feld | Wert |
|---|---|
| Dienst | Benutzerdefiniert… |
| Server | rtmp://[IP-ODER-DOMAIN]:1935/live |
| Stream-Key | Der in Owncast gesetzte Stream-Key |
Klicken Sie auf „Streaming starten“. Unter http://[HOST]:8080 zeigt der Webplayer den Stream nach wenigen Sekunden Pufferzeit.
Im Owncast-Admin unter Home wechselt der Status von „Offline“ zu „Live“, die Status-API meldet "online":true, und die Logs zeigen die eingehende RTMP-Verbindung.
curl -s http://localhost:8080/api/status
# Erwartet: ... "versionNumber":"0.3.0", ... "online":true}
docker compose logs owncast | tail -5
# Erwartete Ausgabe enthält:
# msg="Inbound stream connected from [CLIENT-IP]:[PORT]"
# msg="Processing video using codec x264 with 1 output qualities configured."Schritt 7: Reverse Proxy und HTTPS einrichten
Owncast selbst spricht kein HTTPS. Dafür schalten Sie einen Reverse Proxy vor, Details in der Anleitung Caddy als Reverse Proxy einrichten.
Der RTMP-Port 1935 läuft nicht über einen HTTP-Proxy. Er bleibt per Portmapping (1935:1935) oder TCP-Proxy direkt erreichbar, nur Port 8080 geht über den Reverse Proxy.
Ein minimales Caddy-Beispiel (Caddy im selben Docker-Netzwerk wie Owncast; läuft Caddy direkt auf dem Host, lautet das Ziel localhost:8080):
stream.example.com {
reverse_proxy owncast:8080
}Tragen Sie danach im Owncast-Admin unter Configuration → General im Feld Server URL die vollständige HTTPS-Adresse ein, damit Fediverse-Links stimmen.
HTTPS-Aufruf liefert 200 ohne Zertifikatsfehler.
curl -I https://stream.example.com
# HTTP/2 200Schritt 8: Updates durchführen und Backup einrichten
Alle Daten liegen im Volume. Für ein Update ändern Sie das Tag in der compose.yaml und führen aus:
cd /opt/owncast
docker compose pull
docker compose up -d
docker compose logs owncast | head -20Für das Backup sichern Sie das Verzeichnis ./data per sudo mit der SQLite-Datenbank owncast.db und allen Einstellungen. Owncast legt dort zusätzlich stündlich eine Datenbanksicherung unter backup/ an. Externe Sicherungen mit Restic erklärt die Anleitung 3-2-1-Backup-Strategie umsetzen.
Umstieg von 0.2.x auf 0.3.0
Für Container genügt laut Upgrade-Hinweis der Tausch des Images, einen manuellen Migrationsschritt nennen die Release Notes nicht:
./datasichern, solange der Container gestoppt ist:docker compose stop, dannsudo tar czf owncast-data-vor-0.3.tar.gz data(die Dateien gehören root).- In der
compose.yamldas Tag von0.2.5auf0.3.0setzen, danachdocker compose pullunddocker compose up -d. - Eigene Anpassungen der Weboberfläche (CSS, Seiten) vorher sichern und nach dem Update prüfen, wie es die Upgrade-Hinweise empfehlen.
Neu in 0.3.0 sind unter anderem Plugins, Featured Streams, eine Benutzerverwaltung, Autoplay und ein optionaler Modus mit geringerer Latenz. Der Webhook für Fediverse-Follows enthält neu die Felder status und serverURL; prüfen Sie gegebenenfalls Ihre Gegenstelle.
Container läuft nach dem Update mit der neuen Image-Version.
docker compose ps
docker inspect owncast | grep -i image
# Ausgabe zeigt das neue Image-Digest.Troubleshooting / Typische Fehler
- OBS verbindet sich, Stream startet aber nicht
Port 1935 ist in Firewall oder Router blockiert. Prüfen mit
curl -v telnet://[HOST]:1935. Auf Ubuntu/Debian öffnen mit:sudo ufw allow 1935/tcp.- „address already in use“ beim Containerstart
Ein anderer Dienst belegt Port 8080. Lösung:
OWNCAST_WEB_PORT=8090in der.envsetzen unddocker compose up -derneut ausführen.- Einstellungen nach Neustart weg
Das Volume
./data:/app/dataist nicht gemountet oder der Pfad stimmt nicht. Prüfen mitdocker inspect owncast | grep -A5 Mounts.- Stream ruckelt oder bricht ab
Die Transcodierung überlastet die CPU (
docker stats owncast). Unter Configuration → Video eine Ausgabevariante löschen oder die Auflösung senken.- Falscher Stream-Key in OBS
OBS wird sofort getrennt, ohne klare Fehlermeldung. Den aktuellen Key im Owncast-Admin im Reiter Stream Keys kopieren und exakt in OBS eintragen.
- Fediverse-Integration funktioniert nicht
ActivityPub braucht eine öffentlich erreichbare HTTPS-Domain, localhost und reine IP-Adressen funktionieren nicht. Die Server-URL muss auf
https://ihre-domain.tldzeigen.- Volume-Speicher füllt sich
HLS-Segmente langer Streams wachsen in
./data. S3-Speicher nutzen (siehe Häufige Fragen) oder alte Segmente löschen. Den Verbrauch zeigt:du -sh /opt/owncast/data/- Raspberry Pi armv6 nicht unterstützt
Das offizielle Image gibt es für arm/v7 und arm64, nicht für armv6 (Raspberry Pi 1/Zero).
Häufige Fragen
Brauche ich eine externe Datenbank wie PostgreSQL oder MySQL?
Nein. Owncast verwendet eine eingebettete SQLite-Datenbank, die automatisch als owncast.db in /app/data angelegt wird. Externe Datenbankdienste sind nicht nötig.
Wie verbinde ich OBS mit Owncast genau?
In OBS unter Einstellungen > Stream den Dienst „Benutzerdefiniert…“ wählen, als Server rtmp://[IP-ODER-DOMAIN]:1935/live und als Stream-Key den in Owncast gesetzten Key eintragen. Die Tabelle in Schritt 6 zeigt alle Felder.
Funktioniert Owncast auf einem Raspberry Pi?
Ja, für linux/arm64 und linux/arm/v7, also Raspberry Pi 3, 4 und 5. Auf einem Raspberry Pi 4 sind 720p/30fps mit einer Ausgabevariante realistisch; 1080p kann die CPU überlasten. armv6 (Raspberry Pi 1/Zero) wird nicht unterstützt.
Wie richte ich RTMP hinter einem Reverse Proxy ein?
Gar nicht über HTTP: RTMP ist ein eigenes TCP-Protokoll, Port 1935 bleibt direkt gemappt. Traefik kann RTMP per TCP-Entrypoint durchreichen, einfacher ist das Portmapping.
Was ist die Fediverse-Integration und wie aktiviere ich sie?
Über ActivityPub können Nutzer von Mastodon und anderen Fediverse-Diensten Ihrem Owncast-Server folgen und werden benachrichtigt, wenn Sie live gehen. Voraussetzung ist eine öffentlich erreichbare HTTPS-Domain. Aktivieren Sie sie unter Configuration → Social, nachdem die Server-URL gesetzt ist.
Kann ich S3-Speicher für die Video-Segmente nutzen?
Ja. Unter Configuration → Server Setup, Reiter S3 Object Storage, hinterlegen Sie einen S3-kompatiblen Objektspeicher (AWS S3, Backblaze B2, Wasabi, MinIO). Die HLS-Segmente landen dann dort, das spart Platz und Server-Bandbreite.
Was passiert bei einem Container-Neustart mit meinen Einstellungen?
Mit gemountetem Volume ./data:/app/data bleiben Einstellungen, Datenbank und Stream-Keys erhalten. Ohne Volume gehen beim nächsten docker compose down alle Daten verloren.
Fazit
Owncast liefert mit einem Container, zwei Ports und einem Volume eine vollständige Live-Streaming-Plattform mit Chat unter eigener Kontrolle. Stolperfallen sind die Standard-Zugangsdaten abc123, der RTMP-Port in der Firewall und die CPU-Last mehrerer Ausgabevarianten. Öffentliche Streams brauchen einen Reverse Proxy mit HTTPS, auch für die Fediverse-Integration.
Weiterführende Anleitungen und Quellen
- Docker und Docker Compose auf Linux installieren: die Self-Hosting-Grundlage
- Caddy als Reverse Proxy einrichten: Anfänger-Anleitung mit automatischem HTTPS
- Docker-Container automatisch aktualisieren: Diun, WUD und Renovate im Vergleich
- 3-2-1-Backup-Strategie umsetzen: Anleitung mit Restic, USB-Disk und S3-Cloud
- Jellyfin mit Docker: eigener Media-Server ohne Abo
Offizielle Quellen: Owncast Container/Docker Guide · Owncast GitHub Repository · Owncast auf Docker Hub


