Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Cloud / Hosting 26.06.2026 · 10 min Lesezeit

Owncast 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 dir, wie du in 15 Minuten deinen eigenen Live-Stream-Server auf einem Linux-Host produktionsbereit aufsetzt.

Owncast mit Docker installieren als selbstgehostete Live Streaming Plattform mit integriertem Chat, Weboberfläche, Docker Compose Container und persistenter Datenspeicherung.

Wer seinen Live-Stream lieber auf der eigenen Infrastruktur betreibt, als auf die Algorithmen und Regeln von Twitch oder YouTube angewiesen zu sein, findet in Owncast eine vollständige Antwort. Die Open-Source-Plattform (MIT-Lizenz, über 11.000 GitHub-Stars) ist ein einziger, eigenständiger Go-Container: Er nimmt den Stream per RTMP von OBS, Streamlabs oder Restream entgegen, transcodiert ihn intern über FFmpeg zu HLS und liefert ihn mit einem reaktiven Webplayer und einem integrierten Echtzeit-Chat an deine Zuschauer aus. Keine externe Datenbank, kein Redis, kein separater Medienserver – alles in einem Image unter 100 MB. Diese Anleitung richtet sich an Admins und ambitionierte Selfhoster, die ihre Streaming-Infrastruktur vollständig selbst kontrollieren wollen: von Community-Streams über Firmen-Webcasts bis hin zu privaten Broadcasts.

Voraussetzungen

  1. Docker Engine >= 20.10 und Docker Compose Plugin v2 (docker compose ohne Bindestrich) auf einem Linux-Host, einer VM oder einem NAS mit Docker-Unterstützung. Falls du Docker noch nicht installiert hast, hilft dir die Anleitung Docker und Docker Compose auf Linux installieren.
  2. Mindestens 2 CPU-Kerne und 1 GB RAM für eine Ausgabequalität; für mehrere Qualitätsstufen (z. B. 1080p + 720p) empfehlen sich 4 Kerne und 2 GB RAM, da FFmpeg-Transcodierung sehr CPU-intensiv ist.
  3. Offene Ports in der Host-Firewall: TCP 8080 (Webinterface) und TCP 1935 (RTMP). Im Heimnetz zusätzlich NAT-Portweiterleitung am Router für öffentliche Erreichbarkeit.
  4. Mindestens 10 GB freier Speicherplatz für lokale HLS-Segmente. Bei längeren Streams empfiehlt sich S3-kompatibler Objektspeicher (AWS S3, Backblaze B2, Wasabi) – Konfiguration im Admin-Panel.
  5. Optional: Einen Reverse-Proxy (Caddy, Nginx, Traefik) für HTTPS. Ohne TLS funktioniert die Fediverse/ActivityPub-Integration nicht. Die Anleitung Caddy als Reverse Proxy einrichten erklärt das in wenigen Schritten.
  6. Streaming-Software: OBS Studio, Streamlabs OBS, Restream oder jede andere RTMP-fähige Software auf deinem Rechner.

Eckdaten auf einen Blick

ParameterWertHinweis
Imageowncast/owncast:0.2.5Stabiles Produktions-Tag (April 2026); alternativ :latest für automatische Updates
Architekturenamd64, arm64, arm/v7, 386Läuft auf x86-Server, Raspberry Pi 3/4/5, NAS
Port 8080HTTP – Webplayer + AdminPflicht; im Admin-Panel änderbar (erfordert Neustart)
Port 1935RTMP – Stream-IngestPflicht; muss direkt vom Host erreichbar sein
Volume./data:/app/dataSQLite-DB, Konfiguration, Thumbnails, HLS-Segmente
DatenbankSQLite (eingebettet)Keine externe DB erforderlich
Standard-Loginadmin / abc123Sofort nach Erststart ändern!
Standard-Stream-Keyabc123Separat vom Admin-Passwort – in OBS eintragen
LizenzMIT11.300+ GitHub-Stars, Maintainer: Gabe Kangas

Schritt 1: Projektordner und Verzeichnisstruktur anlegen

Erstelle einen dedizierten Ordner für Owncast. Alle persistenten Daten (SQLite-Datenbank, Konfiguration, HLS-Segmente) landen im Unterordner data/, der als Docker-Volume gemountet wird. Docker legt diesen Ordner beim ersten Start automatisch an – du kannst ihn aber auch vorab anlegen, um Berechtigungsprobleme auszuschließen.

sudo mkdir -p /opt/owncast/data
cd /opt/owncast

Wenn du ohne sudo arbeitest oder einen NAS-Pfad nutzt, passe den Pfad entsprechend an, z. B. ~/owncast. Wichtig ist, dass der Docker-Daemon Schreibrechte auf das data/-Verzeichnis hat.

Verifizieren: Das Verzeichnis existiert und ist beschreibbar.

ls -la /opt/owncast/
# Erwartete Ausgabe:
# drwxr-xr-x  data/

Schritt 2: .env-Datei anlegen

Owncast benötigt keine Pflicht-Umgebungsvariablen – alle Konfiguration erfolgt über das Admin-Panel. Die .env-Datei ist trotzdem sinnvoll, um Port-Kollisionen mit anderen Diensten komfortabel zu lösen, ohne in der compose.yaml editieren zu müssen.

# /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),
# setze OWNCAST_WEB_PORT=8090 oder einen anderen freien Port.

Verifizieren: Die Datei ist vorhanden und korrekt formatiert.

cat /opt/owncast/.env
# Ausgabe: Die beiden PORT-Variablen erscheinen ohne Fehler.

Schritt 3: compose.yaml erstellen

Erstelle die Compose-Datei. Das Setup ist bewusst schlank: ein einziger Service, zwei Ports, ein Volume. Keine Datenbank-Abhängigkeit, kein separates Netzwerk notwendig – Owncast läuft vollständig eigenständig.

# /opt/owncast/compose.yaml
services:
  owncast:
    image: owncast/owncast:0.2.5
    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!

Wenn du lieber auf Updates reagieren möchtest, als ein fixes Tag zu pinnen, ersetze 0.2.5 durch latest und richte dir Diun oder WUD für automatische Update-Benachrichtigungen ein. Für Produktionsumgebungen ist das explizite Tag stabiler.

Verifizieren: Die YAML-Syntax ist gültig.

cd /opt/owncast
docker compose config
# Erwartete Ausgabe: Aufgelöste compose.yaml ohne Syntaxfehler.

Schritt 4: Container starten

Starte Owncast im Hintergrund. Docker lädt das Image beim ersten Start automatisch herunter (ca. 87–93 MB je nach Architektur).

cd /opt/owncast
docker compose up -d

Den aktuellen Status prüfst du so:

docker compose ps
# Erwartete Ausgabe (Spalte STATUS = "Up"):
# NAME       IMAGE                    COMMAND   SERVICE    STATUS    PORTS
# owncast    owncast/owncast:0.2.5    ...       owncast    Up        0.0.0.0:8080->8080/tcp, 0.0.0.0:1935->1935/tcp

Die Logs sollten keine Fehlermeldungen zu Ports oder Volumes zeigen:

docker compose logs owncast
# Erwartete Ausgabe enthaelt u. a.:
# Starting Owncast v0.2.5
# Web server is listening on port 8080
# RTMP is listening on port 1935

Verifizieren: HTTP-Endpunkt antwortet mit einer 200-Antwort.

curl -I http://localhost:8080
# Erwartete Ausgabe:
# HTTP/1.1 200 OK

Schritt 5: Ersteinrichtung im Admin-Panel

Öffne http://[HOST-IP]:8080/admin im Browser. Melde dich mit den Standard-Zugangsdaten admin / abc123 an – und ändere sie sofort. Ein öffentlich erreichbarer Server mit Standardpasswort ist innerhalb von Minuten kompromittiert.

Folgende Einstellungen solltest du direkt nach dem ersten Login vornehmen:

  1. Admin-Passwort ändern: Unter Server Settings → Change Admin Password. Wähle ein starkes, zufälliges Passwort.
  2. Stream-Key ändern: Unter Stream Keys. Der Stream-Key ist vom Admin-Passwort unabhängig und wird in OBS/Streamlabs eingetragen. Standard ist ebenfalls abc123.
  3. Server-Name und -URL setzen: Unter Server Settings → Server Name die öffentliche Domain eintragen (z. B. stream.example.com). Ohne korrekte Domain funktioniert die Fediverse-Integration nicht.
  4. Video-Ausgaben konfigurieren: Unter Video → Stream Output Variants. Für einen einzelnen VPS mit 2 CPU-Kernen empfehle ich eine einzige Ausgabevariante mit maximal 720p/30fps, um die CPU nicht zu überlasten.
  5. Chat-Einstellungen anpassen: Unter Chat kannst du Moderation, Authentifizierungspflicht und Emojis aktivieren.

Verifizieren: Melde dich nach dem Passwort-Wechsel erneut an – das alte Passwort abc123 darf nicht mehr funktionieren. Der neue Stream-Key ist unter Stream Keys sichtbar.

Schritt 6: OBS Studio verbinden und ersten Stream testen

In OBS Studio navigierst du zu Einstellungen > Stream und trägst folgende Werte ein:

OBS-FeldWert
DienstBenutzerdefiniert…
Serverrtmp://[DEINE-IP-ODER-DOMAIN]:1935/live
Stream-KeyDein in Owncast gesetzter Stream-Key

Klicke auf „Streaming starten". Wechsle danach im Browser zu http://[HOST]:8080 – der Webplayer sollte nach wenigen Sekunden (HLS-Pufferzeit) deinen Stream anzeigen.

Verifizieren: Im Owncast-Admin unter Home wechselt der Status von „Offline" zu „Live". Die Logs zeigen die eingehende RTMP-Verbindung.

docker compose logs -f owncast
# Erwartete Ausgabe enthaelt:
# [RTMP] Connected: [OBS-Client-IP]
# Stream is now live

Schritt 7: Reverse Proxy und HTTPS einrichten

Owncast selbst terminiert kein TLS. Für HTTPS – Pflicht bei öffentlichen Streams und notwendig für die ActivityPub/Fediverse-Integration – schaltest du einen Reverse Proxy vor. Die ausführliche Konfiguration findest du in der Anleitung Caddy als Reverse Proxy einrichten.

Wichtig für Owncast: Der RTMP-Port 1935 kann nicht über einen HTTP-Proxy geleitet werden. Er muss immer direkt vom Host erreichbar sein – per Portmapping (1935:1935 in der compose.yaml) oder einem TCP-Proxy. Nur der Webport 8080 wird über den Reverse Proxy weitergeleitet.

Ein minimales Caddy-Beispiel:

stream.example.com {
    reverse_proxy owncast:8080
}

Nach der HTTPS-Konfiguration trägst du im Owncast-Admin unter Server Settings → Server URL die vollständige HTTPS-Domain ein, damit Fediverse-Links und Sharing-Funktionen korrekt funktionieren.

Verifizieren: HTTPS-Aufruf liefert 200 ohne Zertifikatsfehler.

curl -I https://stream.example.com
# HTTP/2 200

Schritt 8: Updates durchführen und Backup einrichten

Owncast-Updates sind unkompliziert, weil alle Daten im Volume liegen:

cd /opt/owncast
docker compose pull
docker compose up -d
docker compose logs owncast | head -20

Für das Backup reicht es, das ./data-Verzeichnis zu sichern – es enthält die SQLite-Datenbank owncast.db, alle Konfigurationen und Thumbnails. Owncast legt in diesem Verzeichnis automatisch Datenbank-Backups an. Für externe Sicherungen empfiehlt sich Restic; die Grundlagen erklärt die Anleitung 3-2-1-Backup-Strategie umsetzen.

Verifizieren: 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

  1. OBS verbindet sich, Stream startet aber nicht: Port 1935 ist in der Host-Firewall oder im Router blockiert. Prüfen mit curl -v telnet://[HOST]:1935. Auf Ubuntu/Debian öffnen mit: sudo ufw allow 1935/tcp.
  2. „address already in use" beim Containerstart: Ein anderer Dienst belegt Port 8080 (häufig: Portainer, Gitea, Grafana). Lösung: OWNCAST_WEB_PORT=8090 in der .env setzen und docker compose up -d erneut ausführen.
  3. Einstellungen nach Neustart weg: Das Volume ./data:/app/data ist nicht gemountet oder der Pfad stimmt nicht. Prüfen mit docker inspect owncast | grep -A5 Mounts. Das lokale data/-Verzeichnis muss Docker-beschreibbar sein.
  4. Stream laggt oder bricht ab: Die CPU ist durch FFmpeg-Transcodierung überlastet. Im Admin-Panel unter Video → Stream Output Variants eine Ausgabevariante löschen oder die Auflösung reduzieren. docker stats owncast zeigt die CPU-Last in Echtzeit.
  5. Falscher Stream-Key in OBS: Eine falsche Key-Eingabe führt zur sofortigen Trennung ohne klare Fehlermeldung in OBS. Den aktuellen Key im Owncast-Admin unter Stream Keys kopieren und exakt in OBS eintragen.
  6. Fediverse-Integration funktioniert nicht: ActivityPub erfordert eine öffentlich erreichbare HTTPS-Domain. Localhost und reine IP-Adressen werden abgelehnt. Die Server-URL im Admin-Panel muss auf https://deine-domain.tld zeigen.
  7. Volume-Speicher füllt sich: HLS-Segmente langer Streams wachsen in ./data. Entweder S3-Speicher im Admin-Panel konfigurieren oder alte Segmente manuell löschen. du -sh /opt/owncast/data/ zeigt den aktuellen Verbrauch.
  8. Raspberry Pi armv6 nicht unterstützt: Das offizielle Image unterstützt arm/v7 und arm64, aber nicht armv6. Raspberry Pi 3/4/5 funktionieren problemlos.

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. Keinerlei externe Datenbankdienste erforderlich – das macht das Setup deutlich einfacher als viele andere Self-Hosting-Projekte.

Wie verbinde ich OBS mit Owncast genau?

In OBS unter Einstellungen > Stream: Dienst = „Benutzerdefiniert…", Server = rtmp://[DEINE-IP-ODER-DOMAIN]:1935/live, Stream-Key = der in Owncast konfigurierte Key. Nach dem Klick auf „Streaming starten" erscheint der Stream nach wenigen Sekunden im Owncast-Webplayer.

Funktioniert Owncast auf einem Raspberry Pi?

Ja, das offizielle Image unterstützt linux/arm64 und linux/arm/v7, also Raspberry Pi 3, 4 und 5. Beachte jedoch: FFmpeg-Transcodierung ist CPU-intensiv. 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?

RTMP ist ein TCP-Protokoll und kann nicht über einen HTTP-Reverse-Proxy geleitet werden. Port 1935 muss per Docker-Portmapping (1935:1935) direkt vom Host erreichbar sein. Wenn du Traefik verwendest, ist ein TCP-Entrypoint konfigurierbar, aber das direkte Portmapping ist in den meisten Setups die einfachste Lösung.

Was ist die Fediverse-Integration und wie aktiviere ich sie?

Owncast unterstützt ActivityPub: Nutzer auf Mastodon und anderen Fediverse-Plattformen können deinem Owncast-Account folgen und erhalten automatisch Benachrichtigungen, wenn du live gehst. Voraussetzung ist eine öffentlich erreichbare HTTPS-Domain. Die Integration aktivierst du im Admin-Panel unter Federation nach dem Setzen der korrekten Server-URL.

Kann ich S3-Speicher für die Video-Segmente nutzen?

Ja. Im Admin-Panel unter Storage kannst du einen S3-kompatiblen Objektspeicher (AWS S3, Backblaze B2, Wasabi, MinIO) konfigurieren. Damit werden die HLS-Segmente direkt in den Objektspeicher geschrieben, was lokalen Speicherplatz spart und die Bandbreite des Servers entlastet – empfehlenswert für längere Streams oder viele gleichzeitige Zuschauer.

Was passiert bei einem Container-Neustart mit meinen Einstellungen?

Solange das Volume ./data:/app/data korrekt gemountet ist, bleiben alle Einstellungen, die SQLite-Datenbank, der Stream-Key und Thumbnails vollständig erhalten. Ohne korrektes Volume-Mapping gehen beim nächsten docker compose down alle Daten verloren.

Fazit

Owncast ist eines der kompaktesten Self-Hosting-Projekte überhaupt: ein einziger Container, zwei Ports, ein Volume – und du hast eine vollständige Live-Streaming-Plattform mit integriertem Chat, die du vollständig selbst kontrollierst. Der Verzicht auf externe Abhängigkeiten macht Setup und Betrieb erfreulich unkompliziert. Die größten Stolperfallen sind die Standard-Zugangsdaten (abc123 unbedingt sofort ändern!), der RTMP-Port in der Firewall und die CPU-Last bei mehreren Transcodierungs-Varianten. Für öffentliche Streams ist ein Reverse Proxy mit HTTPS unverzichtbar – sowohl aus Sicherheitsgründen als auch für die Fediverse-Integration. Wer seinen Stream nicht in der Cloud von Twitch oder YouTube lassen möchte, findet in Owncast eine ausgereifte, aktiv gepflegte Alternative.

Weiterführende Anleitungen und Quellen

  1. Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
  2. Caddy als Reverse Proxy einrichten: Anfänger-Anleitung mit automatischem HTTPS
  3. Docker-Container automatisch aktualisieren: Diun, WUD und Renovate im Vergleich
  4. 3-2-1-Backup-Strategie umsetzen: Anleitung mit Restic, USB-Disk und S3-Cloud
  5. Jellyfin mit Docker: eigener Media-Server ohne Abo

Offizielle Quellen: Owncast Container/Docker Guide · Owncast GitHub Repository · Owncast auf Docker Hub

Passende Anleitungen auf S-EDV

  1. PCI DSS 4.0.1: Checkout-Skripte als Sicherheitsrisiko - was Admins jetzt prüfen
  2. OpenSSL: Neun Schwachstellen im Sicherheitsrelease vom 9. Juni 2026, darunter Hi
  3. Automatische Sicherheitsupdates unter Debian/Ubuntu mit unattended-upgrades rich