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

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

Titelbild: Owncast mit Docker installieren, Livestream, Chat, Server

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 compose ohne 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

ParameterWertHinweis
Imageowncast/owncast:0.3.0Stabiles Tag (September 2026), siehe Schritt 3
Architekturenamd64, arm64, arm/v7, 386x86-Server, Raspberry Pi 3/4/5, NAS
Port 8080HTTP: Webplayer und 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
Standard-Loginadmin / abc123Sofort nach Erststart ändern!
Standard-Stream-Keyabc123Separat vom Admin-Passwort
LizenzMITMaintainer: 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/owncast

Ohne 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 -d

Den 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/tcp

Die 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 OK

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

  1. Admin-Passwort ändern: Unter Configuration → Server Setup, Reiter Server Config, Feld Admin Password. Wählen Sie ein starkes, zufälliges Passwort.
  2. Stream-Key ändern: Unter Configuration → Server Setup, Reiter Stream Keys. Er ist vom Admin-Passwort unabhängig, Standard ist ebenfalls abc123.
  3. 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.
  4. 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.
  5. 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-FeldWert
DienstBenutzerdefiniert…
Serverrtmp://[IP-ODER-DOMAIN]:1935/live
Stream-KeyDer 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 200

Schritt 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 -20

Fü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:

  1. ./data sichern, solange der Container gestoppt ist: docker compose stop, dann sudo tar czf owncast-data-vor-0.3.tar.gz data (die Dateien gehören root).
  2. In der compose.yaml das Tag von 0.2.5 auf 0.3.0 setzen, danach docker compose pull und docker compose up -d.
  3. 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=8090 in der .env setzen und docker compose up -d erneut ausführen.

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.

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.tld zeigen.

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

  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