So installierst du Jellyfin Media Server mit Nginx unter Ubuntu 20.04

Jellyfin ist eine kostenlose und quelloffene Medien-Streaming-Lösung, mit der du deinen eigenen Medienserver betreiben kannst. Sie kann auf Linux, Windows und macOS installiert werden. Mit Jellyfin kannst du deine Medien wie Filme, Fernsehsendungen, Musik und Fotos verwalten und sie auf mehreren Geräten teilen. Es bietet auch Anwendungen für Android, Android TV und Amazon Fire TV. Jellyfin bietet verschiedene Funktionen, darunter DLNA-Unterstützung, keine Wiedergabebeschränkung, automatischer Abruf von Metadaten aus TheTVDB, TheMovieDB und Rotten Tomatoes, automatische Aufnahmen, Unterstützung von Hardware-Beschleunigung und vieles mehr.

In diesem Tutorial erklären wir dir, wie du einen Medienserver mit Jellyfin unter Ubuntu 20.04 installierst und einrichtest.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 20.04 läuft.
  • Ein gültiger Domainname, der auf die IP deines Servers zeigt.
  • Der Server ist mit einem Root-Passwort konfiguriert.

Erste Schritte

Bevor du beginnst, aktualisiere deine Systempakete mit dem folgenden Befehl:

apt-get update -y

Sobald alle Pakete aktualisiert sind, installierst du die anderen erforderlichen Abhängigkeiten mit dem folgenden Befehl:

apt-get install apt-transport-https ca-certificates gnupg2 -y

Nachdem du alle Abhängigkeiten installiert hast, kannst du mit dem nächsten Schritt fortfahren.

Jellyfin installieren

Standardmäßig ist das Paket Jellyfin nicht im Standard-Repository von Ubuntu 20.04 verfügbar. Daher musst du das Jellyfin-Repository zu deinem System hinzufügen. Lade zunächst den GPG-Schlüssel herunter und füge ihn mit dem folgenden Befehl hinzu:

wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | apt-key add -

Sobald der GPG-Schlüssel hinzugefügt ist, fügst du das Jellyfin-Repository mit dem folgenden Befehl zur APT hinzu:

echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu focal main" | tee /etc/apt/sources.list.d/jellyfin.list

Als Nächstes aktualisierst du den Repository-Cache und installierst Jellyfin mit dem folgenden Befehl:

apt-get update -y
apt-get install jellyfin -y

Nachdem du Jellyfin installiert hast, kannst du den Status des Jellyfin-Dienstes mit folgendem Befehl überprüfen:

systemctl status jellyfin

Du solltest die folgende Ausgabe erhalten:

? jellyfin.service - Jellyfin Media Server
     Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/jellyfin.service.d
             ??jellyfin.service.conf
     Active: active (running) since Sun 2020-12-27 06:15:40 UTC; 58s ago
   Main PID: 8454 (jellyfin)
      Tasks: 16 (limit: 4691)
     Memory: 92.3M
     CGroup: /system.slice/jellyfin.service
             ??8454 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --restartpath=/usr/lib/jellyfin/restart.sh --ffmpeg=/usr/lib/jellyfin-f>

Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Registering publisher for urn:schemas-upnp-org:device:MediaServer:1 on 104.245.33.>
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Executed all pre-startup entry points in 0:00:00.6715621
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Core startup complete
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Executed all post-startup entry points in 0:00:00.3885698
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Startup complete 0:00:08.0109863
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] StartupTrigger fired for task: Update Plugins
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] Queueing task PluginUpdateTask
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] Executing Update Plugins
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] Update Plugins Completed after 0 minute(s) and 0 seconds
Dec 27 06:15:51 ubuntu2004 jellyfin[8454]: [06:15:51] [INF] ExecuteQueuedTasks

Standardmäßig lauscht Jellyfin auf Port 8096. Du kannst dies mit dem folgenden Befehl überprüfen:

ss -antpl | grep 8096

Du solltest die folgende Ausgabe erhalten:

LISTEN    0         512                      *:8096                   *:*        users:(("jellyfin",pid=8454,fd=285))                                           

Jetzt ist Jellyfin installiert und läuft. Du kannst jetzt mit dem nächsten Schritt fortfahren.

Nginx als Reverse Proxy konfigurieren

Als Nächstes empfiehlt es sich, Nginx als Reverse Proxy für Jellyfin zu konfigurieren. Dazu installierst du zunächst den Nginx-Webserver mit dem folgenden Befehl:

apt-get install nginx -y

Sobald Nginx installiert ist, erstellst du eine neue Konfigurationsdatei für den virtuellen Nginx-Host:

nano /etc/nginx/conf.d/jellyfin.conf

Füge die folgenden Zeilen hinzu:

server {
      listen 80;
      server_name jellyfin.yourdomain.com;

      access_log /var/log/nginx/jellyfin.access;
      error_log /var/log/nginx/jellyfin.error;

      set $jellyfin 127.0.0.1;

      location / {
          proxy_pass http://127.0.0.1:8096;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;

          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Protocol $scheme;
          proxy_set_header X-Forwarded-Host $http_host;

          # Disable buffering when the nginx proxy gets very resource heavy upon streaming
          proxy_buffering off;
      }

      # location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
      location ~ ^/web/$ {
          # Proxy main Jellyfin traffic
          proxy_pass http://$jellyfin:8096/web/index.html/;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Protocol $scheme;
          proxy_set_header X-Forwarded-Host $http_host;
      }

      location /socket {
          # Proxy Jellyfin Websockets traffic
          proxy_pass http://$127.0.0.1:8096;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Protocol $scheme;
          proxy_set_header X-Forwarded-Host $http_host;
      }

        # Security / XSS Mitigation Headers
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";

}

Speichere und schließe die Datei, wenn du fertig bist. Überprüfe dann den Nginx mit folgendem Befehl auf Syntaxfehler:

nginx -t

Wenn alles in Ordnung ist, solltest du die folgende Ausgabe erhalten:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte anschließend den Nginx-Dienst neu, um die Konfigurationsänderungen zu übernehmen:

systemctl restart nginx

Du kannst den Status von Nginx auch mit dem folgenden Befehl überprüfen:

systemctl status nginx

Du solltest die folgende Ausgabe sehen:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-12-27 06:18:13 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 9865 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 9879 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 9883 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 3.6M
     CGroup: /system.slice/nginx.service
             ??9883 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??9884 nginx: worker process
             ??9885 nginx: worker process

Dec 27 06:18:13 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 27 06:18:13 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Jetzt ist Nginx installiert und so konfiguriert, dass es Jellyfin bedienen kann. Du kannst nun mit dem nächsten Schritt fortfahren.

Zugriff auf die Jellyfin-Weboberfläche

Öffne nun deinen Webbrowser und rufe die Jellyfin Web UI über die URL http://jellyfin.yourdomain.com auf. Du wirst auf den folgenden Bildschirm weitergeleitet:

Wähle deine Sprache aus und klicke auf die Schaltfläche Weiter. Du solltest den folgenden Bildschirm sehen:

Gib deinen Admin-Benutzernamen und dein Passwort ein und klicke auf die Schaltfläche Weiter. Du solltest den folgenden Bildschirm sehen:

Klicke auf die Schaltfläche Weiter. Du solltest den folgenden Bildschirm sehen:

Wähle die Sprache und das Land deiner Metadaten und klicke dann auf die Schaltfläche Weiter. Du solltest den folgenden Bildschirm sehen:

Wähle die gewünschte Option und klicke auf die Schaltfläche Weiter. Du solltest den folgenden Bildschirm sehen:

Klicke auf die Schaltfläche Fertig stellen. Du solltest die Anmeldeseite von Jellyfin sehen:

Gib deinen Benutzernamen und dein Passwort ein und klicke auf die Schaltfläche “ Anmelden“. Du solltest das Jellyfin-Dashboard auf dem folgenden Bildschirm sehen:

Du kannst jetzt deine Medien zur Bibliothek hinzufügen und über das Internet darauf zugreifen.

Jellyfin mit Let’s Encrypt sichern

Als Nächstes musst du das Certbot Client-Paket installieren, um Let’s Encrypt SSL zu installieren und zu verwalten. Installiere zunächst Certbot mit dem folgenden Befehl:

apt-get install python3-certbot-nginx -y

Sobald die Installation abgeschlossen ist, führe den folgenden Befehl aus, um Let’s Encrypt SSL auf deiner Website zu installieren:

certbot --nginx -d jellyfin.yourdomain.com

Du wirst aufgefordert, eine gültige E-Mail-Adresse anzugeben und die Nutzungsbedingungen zu akzeptieren (siehe unten):

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for jellyfin.yourdomain.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/jellyfin.conf

Als Nächstes wählst du aus, ob der HTTP-Datenverkehr auf HTTPS umgeleitet werden soll oder nicht (siehe unten):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Gib 2 ein und drücke die Eingabetaste, um die Installation abzuschließen. Du solltest die folgende Ausgabe sehen:

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/jellyfin.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://jellyfin.yourdomain.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=jellyfin.yourdomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/jellyfin.yourdomain.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/jellyfin.yourdomain.com/privkey.pem
   Your cert will expire on 2020-10-30. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

Jetzt ist deine Website mit Let’s Encrypt SSL gesichert. Du kannst sie sicher über die URL https://jellyfin.yourdomain.comaufrufen .

Fazit

Herzlichen Glückwunsch! Du hast Jellyfin mit Nginx und Let’s Encrypt SSL erfolgreich auf einem Ubuntu 20.04 Server installiert und konfiguriert. Jetzt kannst du deine Medien streamen und über den Webbrowser oder über die Jellyfin-Anwendung darauf zugreifen. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.

Das könnte dich auch interessieren …