Jellyfin Media Server installeren op Debian 10

Jellyfin is een open-source media streaming systeem waarmee je je media kunt beheren en streamen. Het is een cross-platform en een alternatief voor andere toepassingen zoals Emby en Plex. Met Jellyfin kun je je mediabestanden, TV programma’s, muziek en foto’s organiseren en delen via de web-gebaseerde interface. Je hebt toegang tot die gestreamde media op je PC, Tablet, Telefoon, Roku en TV via het internet. Jellyfin haalt automatisch metadata uit de databanken TheMovieDB, OpenMovie, Rotten Tomatoes en TheTVDB.

In dit artikel laten we je zien hoe je Jellyfin media streaming server met Nginx als reverse proxy op Debian 10 kunt installeren.

Vereisten

  • Een server met Debian 10.
  • Een geldige domeinnaam gericht met je server IP.
  • Een root wachtwoord is op de server geconfigureerd.

Aan de slag

Eerst moet je je systeempakketten bijwerken met de nieuwste versie. Je kunt ze bijwerken met het volgende commando:

apt-get update -y

Zodra alle pakketten zijn bijgewerkt, installeer je andere benodigde pakketten met het volgende commando:

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

Als alle pakketten geïnstalleerd zijn, kun je verder gaan met de volgende stap.

Installeer Jellyfin

Standaard is het Jellyfin pakket niet opgenomen in de Debian 10 repository. Je zult dus de Jellyfin repository aan je APT moeten toevoegen.

Je kunt het toevoegen met het volgende commando:

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

Als de repository is toegevoegd, voeg je de GPG sleutel toe met het volgende commando:

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

Werk vervolgens de repository bij en installeer Jellyfin met het volgende commando:

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

Als Jellyfin geïnstalleerd is, kun je de status van Jellyfin controleren met het volgende commando:

systemctl status jellyfin

Je zou de volgende uitvoer moeten krijgen:

? 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 Mon 2021-03-22 08:27:42 UTC; 5min ago
 Main PID: 10192 (jellyfin)
    Tasks: 17 (limit: 4701)
   Memory: 113.9M
   CGroup: /system.slice/jellyfin.service
           ??10192 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --restartpath=/usr/lib/jellyfin/restart.sh --ffmpeg=/usr/lib/jellyfin-ffm

Mar 22 08:27:45 debian10 jellyfin[10192]: [08:27:45] [WRN] 127.0.0.1/32: GetBindInterface: Loopback 127.0.0.1 returned.
Mar 22 08:27:45 debian10 jellyfin[10192]: [08:27:45] [INF] Executed all pre-startup entry points in 0:00:00.1545678
Mar 22 08:27:45 debian10 jellyfin[10192]: [08:27:45] [INF] Core startup complete
Mar 22 08:27:46 debian10 jellyfin[10192]: [08:27:46] [INF] Executed all post-startup entry points in 0:00:00.1976994
Mar 22 08:27:46 debian10 jellyfin[10192]: [08:27:46] [INF] Startup complete 0:00:03.6985068
Mar 22 08:27:48 debian10 jellyfin[10192]: [08:27:48] [INF] StartupTrigger fired for task: Update Plugins
Mar 22 08:27:48 debian10 jellyfin[10192]: [08:27:48] [INF] Queuing task PluginUpdateTask
Mar 22 08:27:48 debian10 jellyfin[10192]: [08:27:48] [INF] Executing Update Plugins
Mar 22 08:27:49 debian10 jellyfin[10192]: [08:27:49] [INF] Update Plugins Completed after 0 minute(s) and 0 seconds
Mar 22 08:27:49 debian10 jellyfin[10192]: [08:27:49] [INF] ExecuteQueuedTasks

Op dit moment is Jellyfin gestart en luistert op poort 8096. Je kunt het controleren met het volgende commando:

ss -antpl | grep 8096

Uitvoer:

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

Configureer Nginx als omgekeerde proxy

Vervolgens moet je Nginx instellen als een omgekeerde proxy om Jellyfin op poort 80 te benaderen.

Installeer eerst het Nginx pakket met het volgende commando:

apt-get install nginx -y

Eenmaal geïnstalleerd maak je een nieuw Nginx configuratiebestand met het volgende commando:

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

Voeg de volgende regels toe:

server {
      listen 80;
      server_name jellyfin.example.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";
}

Bewaar en sluit het bestand en controleer dan de Nginx op eventuele syntaxfouten met het volgende commando:

nginx -t

Uitvoer:

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

Herstart vervolgens de Nginx dienst om de veranderingen toe te passen:

systemctl reload nginx

Toegang tot Jellyfin

Open nu je webbrowser en ga naar de Jellyfin webinterface met de URL http://jellyfin.example.com. Je wordt doorverwezen naar de volgende pagina:

Jellyfin Media server

Kies je taal en klik op de Volgende knop. Je zou de volgende pagina moeten zien:

Stel een gebruikersnaam en wachtwoord in

Geef je gebruikersnaam en wachtwoord op en klik op de Volgende knop. Je zou de volgende pagina moeten zien:

Mediabibliotheken

Klik op de volgende knop. Je zou de volgende pagina moeten zien:

Taalinstellingen

Kies je metadata taal en klik op het knopje Volgende. Je zou de volgende pagina moeten zien:

Configureer toegang op afstand

Allow remote access en klik op de Next knop. Als de installatie voltooid is, zou je de volgende pagina moeten zien:

Voltooi de installatie

Klik op de Finish knop om de installatie te beëindigen. Je zou nu de Jellyfin login pagina moeten zien:

meld je aan bij Jellyfin

Geef je gebruikersnaam en wachtwoord op en klik op de Sign In knop. Je zou het Jellyfin dashboard moeten zien op de volgende pagina:

Jellyfin Dashboard

Beveilig Jellyfin met Let’s Encrypt SSL

Vervolgens moet je het Certbot client pakket installeren om de Let’s Encrypt SSL te beheren. Installeer eerst de Certbot met het volgende commando:

apt-get install python3-certbot-nginx -y

Als de installatie klaar is, voer je het volgende commando uit om de Let’s Encrypt SSL op je website te installeren:

certbot --nginx -d jellyfin.example.com

Je wordt gevraagd een geldig e-mail adres op te geven en de servicevoorwaarden te accepteren zoals hieronder:

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

Kies vervolgens of je HTTP verkeer al dan niet wilt omleiden naar HTTPS zoals hieronder:

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

Type 2 en druk op Enter om de installatie te voltooien. Je zou de volgende uitvoer moeten zien:

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

Nu is je website beveiligd met Let’s Encrypt SSL. Je kunt er veilig naar toe via de URL https://jellyfin.example.com.

Conclusie

Gefeliciteerd! Je hebt met succes Jellyfin op de Debian 10 server geïnstalleerd. Je kunt nu gemakkelijk je media delen met je vrienden, familie en andere gebruikers.