So installierst du Jellyfin Media Server unter Debian 11

Jellyfin ist eine kostenlose und quelloffene Medien-Streaming-Anwendung, die digitale Mediendateien organisiert, verwaltet und an vernetzte Geräte weitergibt. Mit Jellyfin kannst du die hochgeladenen Mediendateien auf deinen PC, Laptop, dein Handy und deinen Roku streamen. Sie bietet eine interaktive Weboberfläche zur Verwaltung all deiner Fotos, Videos und Musik. Wenn du nach einer Alternative zu Plex und Netflix suchst, ist Jellyfin die beste Wahl.

Eigenschaften

  • Kostenlos, Open-Source und plattformübergreifend
  • Unterstützt die Hardware-Beschleunigung der Videokodierung/-dekodierung mit FFMpeg
  • Ermöglicht den Abruf von Metadaten aus TheTVDB und TheMovieDB
  • Keine Beschränkung der Wiedergabe auf mobilen Apps

In diesem Beitrag zeige ich dir, wie du die Medien-Streaming-Anwendung Jellyfin mit Nginx und Let’s Encrypt SSL unter Debian 11 installierst.

Voraussetzungen

  • Ein Server, auf dem Debian 11 läuft.
  • Ein gültiger Domainname, der auf die IP deines Servers zeigt.
  • Ein Root-Passwort ist auf dem Server konfiguriert.

Jellyfin installieren

Bevor du beginnst, musst du das Jellyfin-Repository zur APT hinzufügen. Dazu installierst du zunächst die erforderlichen Abhängigkeiten mit dem folgenden Befehl:

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

Sobald alle Abhängigkeiten installiert sind, fügst du den GPG-Schlüssel und das Repository mit dem folgenden Befehl hinzu:

wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/debian bullseye main" | tee /etc/apt/sources.list.d/jellyfin.list

Als Nächstes aktualisierst du das Repository und installierst Jellyfin mit dem folgenden Befehl:

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

Sobald Jellyfin installiert ist, kannst du den Status von Jellyfin mit folgendem Befehl überprüfen:

systemctl status jellyfin

Du erhältst die folgende Ausgabe:

? 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 Fri 2022-02-04 03:48:50 UTC; 9s ago
   Main PID: 4989 (jellyfin)
      Tasks: 19 (limit: 2341)
     Memory: 85.0M
        CPU: 4.069s
     CGroup: /system.slice/jellyfin.service
             ??4989 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --restartpath=/usr/lib/jellyfin/restart.sh --ffmpeg=/usr/lib/jellyfin->

Feb 04 03:48:56 debian11 jellyfin[4989]: [03:48:56] [INF] ServerId: 809b343f6da845699dd6447e1bb4f061
Feb 04 03:48:56 debian11 jellyfin[4989]: [03:48:56] [INF] Registering publisher for urn:schemas-upnp-org:device:MediaServer:1 on 127.0.0.1/32
Feb 04 03:48:56 debian11 jellyfin[4989]: [03:48:56] [WRN] 127.0.0.1/32: GetBindInterface: Loopback 127.0.0.1 returned.
Feb 04 03:48:56 debian11 jellyfin[4989]: [03:48:56] [INF] Executed all pre-startup entry points in 0:00:00.2808517
Feb 04 03:48:56 debian11 jellyfin[4989]: [03:48:56] [INF] Core startup complete
Feb 04 03:48:57 debian11 jellyfin[4989]: [03:48:57] [INF] Executed all post-startup entry points in 0:00:00.2169291
Feb 04 03:48:57 debian11 jellyfin[4989]: [03:48:57] [INF] Startup complete 0:00:06.7385186
Feb 04 03:48:59 debian11 jellyfin[4989]: [03:48:59] [INF] StartupTrigger fired for task: Update Plugins
Feb 04 03:48:59 debian11 jellyfin[4989]: [03:48:59] [INF] Queuing task PluginUpdateTask
Feb 04 03:48:59 debian11 jellyfin[4989]: [03:48:59] [INF] Executing Update Plugins

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

ss -antpl | grep 8096

Du erhältst die folgende Ausgabe:

LISTEN 0      512          0.0.0.0:8096      0.0.0.0:*    users:(("jellyfin",pid=4989,fd=289))

Nginx als Reverse Proxy für Jellyfin konfigurieren

Als Nächstes musst du Nginx als Reverse Proxy für Jellyfin installieren und konfigurieren. Installiere zunächst Nginx mit dem folgenden Befehl:

apt-get install nginx -y

Als Nächstes erstellst du eine Nginx-Konfigurationsdatei für virtuelle Hosts mit dem folgenden Befehl:

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

Füge die folgenden Zeilen hinzu:

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

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

    resolver 127.0.0.1 valid=30;

    # 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";


    location / {
        # Proxy main Jellyfin traffic
        proxy_pass http://localhost: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://localhost: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://localhost:8096/socket;
        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;
    }
}

Speichere und schließe die Datei und überprüfe den Nginx auf Syntaxfehler.

nginx -t

Du erhältst die folgende Ausgabe:

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

Starte Nginx schließlich neu, um die Änderungen zu übernehmen:

systemctl reload nginx

Um den Status von Nginx zu überprüfen, verwende den folgenden Befehl:

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 Fri 2022-02-04 03:49:27 UTC; 55s ago
       Docs: man:nginx(8)
    Process: 6314 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 6315 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 6454 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
   Main PID: 6395 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.8M
        CPU: 66ms
     CGroup: /system.slice/nginx.service
             ??6395 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??6455 nginx: worker process

Feb 04 03:49:27 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 04 03:49:27 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Feb 04 03:49:27 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.
Feb 04 03:50:17 debian11 systemd[1]: Reloading A high performance web server and a reverse proxy server.
Feb 04 03:50:17 debian11 systemd[1]: Reloaded A high performance web server and a reverse proxy server.

Zugriff auf Jellyfin Web Interface

Öffne nun deinen Webbrowser und rufe das Jellyfin-Webinterface über die URL http://jellyfin.example.com auf. Du wirst auf die folgende Seite weitergeleitet:

Wähle deine Sprache aus und klicke auf die Schaltfläche Weiter. Du solltest die folgende Seite sehen:

Gib deinen Admin-Benutzer und dein Passwort ein und klicke auf die Schaltfläche Weiter. Du solltest die folgende Seite sehen:

Klicke auf die Schaltfläche Weiter. Du solltest die folgende Seite sehen:

Wähle deine Metadaten-Sprache und klicke auf die Schaltfläche Weiter. Du solltest die folgende Seite sehen:

Wähle deine bevorzugte Option und klicke auf die Schaltfläche Weiter. Sobald Jellyfin installiert ist, solltest du die folgende Seite sehen:

Klicke auf die Schaltfläche Fertigstellen. Du wirst auf die Anmeldeseite von Jellyfin weitergeleitet:

Gib deinen Admin-Benutzernamen und dein Passwort ein und klicke auf die Schaltfläche “ Anmelden „. Auf der folgenden Seite solltest du das Jellyfin-Dashboard sehen:

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 certbot python3-certbot-nginx -y

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

certbot --nginx -d jellyfin.example.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): hitjethva@gmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/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/conf.d/jellyfin.conf

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

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/jellyfin.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/jellyfin.example.com/privkey.pem
   Your cert will expire on 2022-05-07. 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.

Fazit

Herzlichen Glückwunsch! Du hast Jellyfin mit Nginx und Let’s Encrypt SSL erfolgreich auf Debian 11 installiert. Du kannst jetzt damit beginnen, deine Medien hochzuladen und sie von mobilen Geräten aus zu streamen.

Das könnte dich auch interessieren …