Owncast – Der eigene Livestream-Server

In dieser Anleitung erstellen wir einen eigenen Livestream-Server mit Owncast.
Damit können wir unser eigenes “Twitch” oder “Trovo” aufsetzen.

Was brauchen wir dafür?
– Einen Linux-Server
– Vollen Root-Zugang
– Minimum 1 CPU-Kern
– Minimum 1GB RAM
– Minimum 20GB Speicherplatz
– Optional aber Empfohlen: Eine statische IP und Domain
Hinweis: Wer die Kodierung in andere Auflösungen nutzen möchte, benötigt deutlich mehr Ressourcen. Dafür kann ich aber keine Empfehlung geben, da diese Werte sehr variabel sind.

Los gehts!

1. Server Updaten

# apt update && apt upgrade -y

2. Notwendige Software installieren:

# apt install curl nano wget htop iftop unzip -y

3. Extra Benutzer für Owncast erstellen:

# adduser livestream

4. Melde dich mit diesem Nutzer an:

# su livestream

5. Downloade dir das Installationsscript von Owncast und führe es aus:

# curl -s https://owncast.online/install.sh | bash

6. Wechsel nun in den Ordner und führe Owncast aus:

# cd owncast
# ./owncast

7. Öffne einen Browser und rufe deine IP des Servers oder direkt die Domain auf. Füge dahinter den Port 8080 dazu, da Owncast in der Standardkonfiguration über Port 8080 läuft.
http://123.123.123.123:8080 | http://deine-domain.com:8080
Mit /admin kommst du in den Administrationsbereich.
http://123.123.123.123:8080/admin | http://deine-domain.com:8080/admin
Benutzername: admin
Passwort: abc123

Bis hier her, haben wir Owncast nun gestartet. Für Tests reicht dieses Setup erst einmal aus. Wer damit aber wirklich “online” gehen möchte, sollte den Server noch absichern und den Owncast-Server in den Autostart schieben, damit er bei jedem Serverneustart auch automatisch läuft.
Daher gehts jetzt weiter!

8. Stoppe den Owncast Server wieder
STRG + C

9. Werde wieder Root

# exit

10. Installiere folgende Pakete:

# apt install nginx python3 python3-venv libaugeas0 ufw -y

11. Installiere den Certbot, um ein SSL-Zertifikat auszustellen:

# python3 -m venv /opt/certbot/
# /opt/certbot/bin/pip install --upgrade pip
# /opt/certbot/bin/pip install certbot certbot-nginx
# ln -s /opt/certbot/bin/certbot /usr/bin/certbot

12. Lass ein Zertifikat für deine Domain erstellen:

# certbot --nginx

13. Entferne die Default-Konfiguration von nginx:

# rm /etc/nginx/sites-enabled/default

14. Lege eine neue Konfiguration an und befülle sie mit folgendem Inhalt:

# nano /etc/nginx/sites-enabled/domain.com
server {
    listen 80;
    listen [::]:80;
    access_log  /var/log/nginx/owncast.domain.com.access.log;
    error_log   /var/log/nginx/owncast.domain.com.error.log;
    server_name owncast.domain.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name owncast.domain.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_pass http://127.0.0.1:8080;
    }

        # ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        # ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

}

Ersetze hier überall owncast.domain.com gegen deine Domain!
Speichere dann die Konfiguration ab.

15. Prüfe, ob Fehler in nginx vorhanden sind:

# nginx -t

16. Starte nginx neu

# service nginx restart

17. Erstelle nun 3 Firewall-Regeln, damit SSH, HTTP und HTTPS erlaubt sind:

# ufw allow 22/any comment 'SSH'
# ufw allow 80/any comment 'HTTP'
# ufw allow 443/any comment 'HTTPS'
# ufw allow 1935/any comment 'RTMP'
# ufw enable

Damit sperren wir den Port 8080. Somit kann niemand mehr unverschlüsselt Owncast erreichen.

18. Wechsel nun in den SystemD-Ordner und lege eine neue Service-Datei an:

# cd /etc/systemd/system
# nano owncast.service

19. Befülle sie mit folgendem Inhalt:

[Unit]
Description=Owncast Service
After=network.target
 
[Service]
Type=forking
WorkingDirectory=/pfad/zum/server
User=benutzername
Group=benutzername
ExecStart=/pfad/zum/server/owncast
Restart=on-failure
RestartSec=10
 
[Install]
WantedBy=multi-user.target

Ändere hierbei folgendes ab:
WorkingDirector = Gebe hier den Pfad an, wo Owncast liegt (z.B. /home/benutzername/owncast)
User = Gebe den Benutzername an, der Owncast ausführen soll – Der Aus Schritt 3
Group = Gebe den Benutzername an, der Owncast ausführen soll – Der Aus Schritt 3
ExecStart= Gebe hier den Pfad an, wo Owncast mit der ausführbaren Datei liegt (z.B. /home/benutzername/owncast/owncast

20. Aktiviere den Service und starte ihn

# systemctl enable owncast.service
# systemctl start owncast.service

Du kannst über z.B. OBS Studio jetzt zu deinem Server streamen!
Deine RTMP-URL ist nun die IP oder Domain des Servers:
rtmp://123.123.123.123/live ODER rtmp://deine-domain.com/live
Dein Key ist: abc123


WICHTIG:

Melde dich nun im Admin-Panel an und ändere deinen Key im Bereich “Configuration” ab, damit sich keine fremden Personen bei deinem Server anmelden und Streamen können!

Qualitätsauswahl

Um deinen Zuschauern eine Qualitätsauswahl zu ermöglichen, kannst du bei “Configuration -> Video Configuration”, verschiedene Qualitätsoptionen einrichten.
Bedenke allerdings, dass das umwandeln des Streams in andere Auflösungen, jede Menge Performance benötigt. Wie viel, hängt immer von den Einstellungen ab, die du gesetzt hast.
In der Standardkonfiguration ist schon eine Konvertierung aktiv! Dort wird dein Input auf maximal 800kbps heruntergestuft. Du solltest also diese Einstellungen dringend anpassen.
Daher nutze hier mein Vorschlag für die Auflösungsvarianten:
QUELLE:
Lege eine Variante “Quelle” an und setze bei “Advanced Settings” den Haken bei “Video Passthrough”. Dies leitet dein orginal Stream einfach durch. Das benötigt absolut keine Rechenleistung beim Server. Dies wird bei 1CPU-Servern dringend empfohlen!

720p:
– CPU or GPU Utilization = High
– Video Bitrate = 3500kbps
– Resolution = 1280×720
– FPS = 30 oder 60

480p:
– CPU or GPU Utilization = High
– Video Bitrate = 1500kbps
– Resolution = 852×480
– FPS = 30

480p:
– CPU or GPU Utilization = High
– Video Bitrate = 800kbps
– Resolution = 640×360
– FPS = 30

Spiele mit den Werten herum, bis deine Auslastung des Servers in einem angenehmen Rahmen ist. Je mehr Auflösung du zur Verfügung stellst, um so mehr Power wird benötigt.


7 Kommentare

  1. Hallo,
    erstmal vielen Dank für diese Super Anleitung! Ich fand sie sehr hilfreich und habe einiges dazugelernt. (auch wenn ich vielleicht noch immer nicht ganz alles verstanden habe XD)
    Allerdings erscheint bei mir jedes mal wenn ich Owncast oder den Service starten will eine Fehlermeldung: “failed to start/run the router listen tcp 0.0.0.0:8080: bind: address already in use”… kann mir hierbei möglichst zeitnah weitergeholfen werden? Ich weiß nicht woran es liegt.
    Ich habe paar Punkte ausprobiert… an der Firewall z.b. kann es nicht liegen. Und die Schritte 14 und 19 wurden auch richtig durchgeführt. Ich habe die überprüft und wiederholt.
    Ich weiß leider echt nicht weiter oder woran es liegen könnte…

    LG
    Dominik

    • Hi Dominik,

      scheinbar läuft da noch ein Prozess, welcher Port 8080 nutzt.
      Wenn es Owncast nicht ist, dann musst du selbst einmal prüfen, welcher Dienst den Port nutzt.
      Zur Not einfach mal den Server neu starten.

  2. Große Klasse die Anleitung! Vielen Dank! Super professionell!

    Mich würde noch interessieren, ob und falls ja wie man owncast so konfigurieren kann, dass der Streamplayer nur auf einer bestimmten Domain eingebettet/angezeigt werden kann (innerhalb einer Website, die den Zugriff z.B. kostenpflichtig verwaltet).

    Geht das?

    • Danke für dein Feedback.

      Um den Zugriff einzuschränken, muss aktuell mit Zusatzsoftware gearbeitet werden, welche das Unterstützt.
      nginx sollte das soweit können, ich hab es aber noch nie getestet / gebraucht.
      Ebenfalls muss mit Hilfe einer Firewall der Quellport von Owncast abgeschottet werden, damit man den nginx-Proxy nicht umgehen kann.

  3. Danke, dann mach ich mich da mal schlau.

  4. Im Beispiel hast du den Port 80 für IPv4 und IPv6 gebunden:
    > listen 80;
    > listen [::]:80;

    Den Port 443 bindest du nur für IPv4:
    > listen 443 ssl http2;

    Hat das einen bestimmten Grund?

    • Hi!
      Das hat kein bestimmten Grund.
      IPv6 sollte so auch funktionieren.
      Wenn du magst, kannst du auch noch die Zeile für IPv6 von Hand hinzufügen.
      [::]:443 ssl http2;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.


CAPTCHA-Bild
Bild neu laden

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.