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=simple 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.
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.
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.
Danke, dann mach ich mich da mal schlau.
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;
Frage es funktioniert alles bei mir nur wen ich den port 8080 dazu mache funktioniert https nicht nur http. Ich habe keine subdomain sonder nur domein gemacht. und wen ich nur die domain mache über https funktioniert alles aber der chat nicht.
In dem Fall hast du irgendwas mit nginx falsch gemacht.
Wenn du den nginx korrekt als Proxy konfiguriert hast, sollte Port 80 und 443 sauber funktionieren.
Jetzt habe ich admin panel unter https und die streaming homepage unter https aber kein chat beim live streaming 🙁
Habe was gesehen das mann irgend was mit Websockets machen mus.
Habe da kein plan wie mann so etwas installiert:(
Ich habe keine richtige domain sondern nur eine weiterleitung von NOIP.com, wie bekomme ich das ssl/tls zum laufen ?
Geht es auch nur mit IP ?
Hi!
Ja mit NOIP ist es auch möglich, Lets Encrypt-Zertifikate zu nutzen.
Sofern die Domain auf deinen Webserver zeigt, ist das problemlos machbar.
Zur Not schau dir die Lösung mit dem ACME.sh-Script an.
Eine Anleitung dazu gibts auch hier zu finden.
ACME script ist leider nix zu finden mit noip.com
Ich habe das selbe Problem, bei http geht der Chat bei https nicht
Wäre es möglich den Owncast Server generell Passwort zu schützen ??
Lg Dennis
Du kannst dem nginx Webserver beibringen, nach einem Nutzernamen und Passwort zu fragen.
Hab dazu keine Anleitung auf Lager, aber es gibt viele im Internet diesbezüglich.
Owncast kann das von Haus aus nicht.
Ich nutze Caddy da mit ngingx und ssl der chat nicht funktioniert
Hallo Hoerli,
ich habe alles nach Deiner Anleitung erfolgreich eingerichtet, jedoch ist auch bei mir der Chat nur über Port 8080 im Livestream aktiv, über SSL 443 ist der Chat immer Offline. Gibt es da eine Lösung um das Problem zu beheben?
Es wäre toll, wenn Du mir da weiterhelfen kannst.
LG Volkmar
Ho Volkmar,
probier mal die nginx-Konfiguration von Owncast direkt: https://owncast.online/docs/sslproxies/nginx/
Vielleicht hilft die.
Falls nicht, hab ich gerade keine Idee.
Nimm mal Caddy als reverse Proxy . Einfach einzurichten mit dem habe ich keine Probleme.
Anleitung dafür findest du auch auf der OC Seite.
Hast Du da selber eine Anleitung erstellt, denn deine sind mir lieber, bevor ich wieder alles kaputt mache. Hehe
Ich bin da ehrlich gesagt nicht der Profi.
So habe den Fehler gefunden und behoben
Folgendes habe ich in meiner /etc/nginx/site-enabled/livestream Datei eingetragen.
Wenn diese zwei Einträge fehlen, wird der Chat mit SSL nicht angezeigt:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection „upgrade“;
Genau so muss das in die Conf
Hier ist die komplette, tragt einfach Eure Daten rein.
##########################################################
server {
listen 80;
listen [::]:80;
access_log /var/log/nginx/[Eure_Domain].access.log;
error_log /var/log/nginx/[Eure_Domain].error.log;
server_name [Eure_Domain];
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name [Eure_Domain];
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection „upgrade“;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8080;
}
ssl_certificate /etc/letsencrypt/live/[Eure_Domain]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[Eure_Domain]/privkey.pem;
}
Die Anführungszeichen müssen so sein “
proxy_set_header Connection „upgrade“;
Sonst wird der Chat nicht angezeigt.