[Tuto] Installation de Jellyfin + Transcodage matériel (HW) + Acces HTTPS en Docker

EVO

Administreur
Membre du personnel
25 Novembre 2019
8 160
1 563
278
/var/run/docker.sock
Bonjour,
Voici un petit tuto, pour ceux qui souhaiterai installer Jellyfin en Docker.

fRgGkBt.png

Jellyfin, c'est quoi ? :giggle:
Jellyfin est une suite d'applications multimédias conçues pour organiser, gérer et partager des fichiers multimédias numériques sur des appareils en réseau. Jellyfin se compose d'une application serveur installée sur une machine exécutant Microsoft Windows, macOS, Linux ou dans un conteneur Docker, et une autre application exécutée sur un appareil client tel qu'un smartphone, une tablette, une télévision intelligente, un lecteur multimédia en continu, une console de jeu ou dans un navigateur Web. Jellyfin peut également diffuser des fichiers multimédias sur les appareils compatibles DLNA et Chromecast. C'est un fork logiciel gratuit et open-source d'Emby.

Retrouvez plus d'informations sur Jellyfin ici : Jellyfin, le media center 100% gratuit


Disclamer :
Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert de docker/docker compose, n’hésiter pas à répondre à ce sujet avec vos interrogations, .. Pour ceux qui sont plus a l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...

Pour un support sur Jellyfin ne concernant pas une installation via ce tutoriel, merci de poster votre question dans Applications.


Pré-requis :
Avoir Docker et Docker Compose installé sur sa machin, voir [Tuto] Installation de Docker, Docker-compose et Portainer sur Debian 11
Ce connecter en SSH à votre Serveur/NAS, si vous ne savez pas le faire, vous trouverez ici un tuto explicatif : [Tuto] Acceder à son NAS en lignes de commande.
Pour le point 6 ( Accès extérieur en HTTPS grâce au Reverse Proxy ), on considère que vous avec déjà un reverse proxy en place, si ce n'est pas le cas, regarder par exemple [Tuto] Installer SWAG en Docker ( Reverse Proxy )

A modifier selon votre installation :
Toute mon installation, va ce faire dans un dossier "jellyfin" inclu dans mon dossier "docker"
Je vais donc installer Jellyfin dans docker/jellyfin
Les PUID/PGID de mon compte utilisateur sont : PUID=9999 PGID=111 **

** Pour connaitre le PUID/GUID de l'utilisateur : [Tuto] Connaitre le PUID / PGID d'un utilisateur.

Sommaire :
1/ Créer les dossiers nécessaires
2/ Le fichier "docker-compose.yml"
3/ Création et démarrage du conteneur
4/ Accès a Jellyfin
5/ Activer le transcodage hardware (HW) ( Optionnel )

A/ Ajout du groupe et du device
B/ Activation du transcodage sur Jellyfin
6/ Accès extérieur en HTTPS grâce au Reverse Proxy ( Optionnel )
7/ Activation du DNLA ( Optionnel )

A/ Modification du "docker-compose.yml"
B/ Activation du DNLA dans Jellyfin
Annexe 1 : Utilisez des partages NFS d'un NAS ( Cliquer sur le titre pour accéder au post en question )
Annexe 2 : Comment savoir si je transcode, et si c'est du transcodage matériel ( Cliquer sur le titre pour accéder au post en question )


Aller go :)


1/ Créer les dossiers nécessaires
Sur le NAS nous allons devoir créer un dossier jellyfin contenant un dossier cache et un dossier config ce dernier contiendra tous les fichiers de configuration nécessaire au fonctionnement du conteneur Jellyfin.

En SSH, avec la commande cd nous allons accéder au dossier ou vous souhaitez installer les fichiers de configuration du conteneur. Dans mon cas c'est /home/tuto/docker, j’exécute donc la commande suivante pour accéder au dossier docker :

cd /home/tuto/docker

Vous pouvez aussi créer le dossier jellyfin, contenant un dossier config avec cette commande : mkdir -p jellyfin/{config,cache}

Ensuite, avec la commande cd jellyfin, rendez-vous dans le dossier principal de Jellyfin que nous venons de créer.

Note : A partir de maintenant, toutes les commandes du tutoriel partirons du principe que vous les exécuter depuis le dossier /jellyfin




2/ Le fichier "docker-compose.yml"

Nous allons maintenant créer le fichier docker-compose.yml, c'est lui qui contiendra la configuration de notre conteneur.

Pour le créer nous exécutons la commande suivante : nano docker-compose.yml

L'éditeur s'ouvre, dedans nous allons copier/coller le code suivant :
Code:
version: "2.1"
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    hostname: jellyfin
    user: 9999:111
#    group_add:
#      - "107"
#    devices:
#      - /dev/dri/renderD128:/dev/dri/renderD128
    ports:
      - 8096:8096
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /path/to/tvseries:/data/tvshows
      - /path/to/movies:/data/movies
    restart: unless-stopped

Vous devez modifier :
- Dans la ligne user: 9999:111, 9999 est a remplacer par le PUID de votre utilisateur, 111 par le GUID de votre utilisateur.
- Dans la ligne /path/to/tvseries:/data/tvshows, vous allez devoir personnaliser la partie avant les :, soit /path/to/tvseries avec le chemin absolu vers votre dossiers contenant vos séries tv.
- Dans la ligne /path/to/movies:/data/movies, vous allez devoir personnaliser la partie avant les :, soit /path/to/movies avec le chemin absolu vers votre dossiers contenant vos films.

Note : Vous pouvez rajouter autant de lignes que vous le souhaitez, par contre, le chemin apres les : doit être différents ( vous pouvez l'inventer ), par exemple, si vous avez 2 dossier différents contenant des films : /srv/dev-1234/film et /srv/dev-1234/autres_film alors on pourrai renseigner les volumes comme ceci :
Code:
      - /srv/dev-1234/film:/data/movies
      - /srv/dev-1234/autres_film:/data/movies2

Une fois le fichier correctement rempli, vous pouvez quitter l'éditeur avec Ctrl+X et confirmer les modifications.[/B]




3/ Création et démarrage du conteneur
Rappel : Nous sommes toujours en SSH, dans notre dossier jellyfin

Pour créer le conteneur et le démarrer exécuter la commande suivante : docker compose up -d

Note : Si vous exécuter une veille version de docker-compose ( version 1 ) , la commande sera : docker-compose up -d

Note 2 : Les commandes docker doivent s’exécuter avec les droits root


Si la commande vous retourne "done" ou "Running", c'est que le conteneur est bien lancé !




4/ Accès a Jellyfin

Depuis votre navigateur, il vous suffit maintenant de taper l'adresse ip de votre NAS suivi du port 8096 pour se connecter a l'interface Web de Jellyfin.
Exemple : Si l'ip de votre NAS est 192.168.0.20 alors l'adresse est http://192.168.0.20:8096
Bien sur, si le pare-feu de votre NAS est actif, ce port ( 8096 TCP ) devra être autorisé dans celui-ci !




5/ Activer le transcodage hardware (HW) ( Optionnel )
A/ Ajout du groupe et du device
Pour activer le transcodage dans Jellyfin, vous aller devoir supprimer dans le fichier docker-compose.yml les # présents devant :
Code:
[...]
#    group_add:
#      - "107"
#    devices:
#      - /dev/dri/renderD128:/dev/dri/renderD128
[...]

Le bout du docker compose deviendra donc :
Code:
[...]
    group_add:
      - "107"
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
[...]

Nous allons devoir modifier le chiffre 107 en fonction de votre installation.
Pour connaitre ce chiffre, en SSH taper :
Code:
ls -al /dev/dri

Ceci me donne :
aNOpXZ5.png


On voit ici que le groupe "render" est attribué à renderD128.

L'utilisateur que j'utilise pour l'exemple se nomme "docker" , vous devez donc remplacer ce nom par le nom de l'utilisateur dont vous avez renseigné le PUID/GUID dans le conteneur.

Avec cette commande, j'affiche les groupes auquel il appartient :
Code:
id docker

Le résultat dans mon exemple :
Vo4icL0.png


Ici on voit que render = 107 c'est donc ce que j'indique en dessous de group_add:.

Une fois fait, j'enregistre, et je re-créer le conteneur ( Voir 3/ Création et démarrage du conteneur )




B/ Activation du transcodage sur Jellyfin
Oups ! En cours :)



6/ Accès extérieur en HTTPS grâce au Reverse Proxy ( Optionnel )
A/ Mettre à jour la config Jellyfin dans SWAG
Aller dans votre dossier config pour swag. Mettons que le dossier config de votre container SWAG soit:
/home/docker_user/swag/config

Il vous faudra donc faire:
Bash:
cd home/docker_user/swag/config

Si vous avez déjà utilisé SWAG, vous devez savoir que toutes les configs des différents services que vous voulez mettre à dispo par le biais du reverse proxy swag se trouvent dans: /nginx/proxy-confs

Il existe déjà un fichier exemple pour Jellyfin, nous allons donc en faire une copie que l'on modifiera pour notre besoin.
On se rend dans proxy-confs:
Bash:
cd nginx/proxy-confs

On copie colle le fichier exemple pour Jellyfin qui se nomme jellyfin.subdomain.conf.sample

Bash:
cp jellyfin.subdomain.conf.sample jellyfin.subdomain.conf

On édite le fichier tout fraichement crée:

Bash:
nano jellyfin.subdomain.conf

Voici à quoi ressemble ce fichier avant modif:

NGINX:
## Version 2021/05/18

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name jellyfin.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app jellyfin;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
    }

    location ~ (/jellyfin)?/socket {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app jellyfin;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

On va donc donner à ce fichier le chemin complet avec notre nom de domaine.

Dans le présent tuto, le container name est 'jellyfin'.
Mettons que le nom de domaine que vous avez est 'ndd.fr'

Pour distinguer le nom du container du sous domaine que l'on va attribuer à Jellyfin, mettons que je veuille accéder à jellyfin par l'adresse suivante:

superjellyfin.ndd.fr
Ici le sous domaine serait donc
superjellyfin

Il vous faudra donc modifier la ligne server_name par:
Code:
server_name superjellyfin.ndd.fr;

Ce qui donne le fichier suivant:
Code:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name superjellyfin.ndd.fr;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app jellyfin;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
    }

    location ~ (/jellyfin)?/socket {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app jellyfin;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}
Sauvegardez et quittez l'éditeur nano


B/ Générer le certificat pour votre sous-domaine Jellyfin

Pour ceux qui ont suivi jusque là, le sous domaine dédié à Jellyfin est donc 'superjellyfin'. On va donc demander à SWAG de générer un certificat Let's encrypt pour lui.

il vous suffira d'ajouter superjellyfin à votre liste de SUB_DOMAINS et re-créer le container SWAG afin de tenir compte des modifs

Vous pouvez directement reboot le conteneur SWAG pour actualiser la prise en compte de la nouvelle configuration

Bash:
docker restart swag
Vérifiez bien dans vos logs qu'il n'y a pas d'erreur à la création des certificats.
Bash:
docker logs swag

C/ Modifier le compose du container Jellyfin
Deux possibilités :

Mettons pour cela, que le nom du réseau géré par votre container SWAG est 'swag-network'.
Il vous faudra dans ce cas préciser dans votre compose le nom de ce réseau, et également préciser que ce réseau est 'externe'.
Donc en reprenant le compose initial, voici le résultat:

Code:
version: "2.1"
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    hostname: jellyfin
    user: 9999:111
    group_add:
      - "107"
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    ports:
      - 8096:8096
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /path/to/tvseries:/data/tvshows
      - /path/to/movies:/data/movies
    restart: unless-stopped
    networks:
      - swag-network
networks:
  swag-network:
    external:
      name: swag-network

Pour ce faire, il vous faut ré-éditer la config SWAG de Jellyfin, tel qu'abordé au point 6/a.
Pour les deux lignes contenant set $upstream_app jellyfin; , vous devrez modifier jellyfin par l'adresse ip locale de votre machine.
Si votre machine est en 192.168.0.11, vous aurez donc le fichier suivant:
NGINX:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name superjellyfin.ndd.fr;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app 192.168.0.11;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
    }

    location ~ (/jellyfin)?/socket {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app 192.168.0.11;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

Redémarrez Swag

Bash:
docker restart swag

D/ Paramétrer le serveur Jellyfin
Connectez vous en admin à votre serveur Jellyfin, et allez dans la page des paramètres réseaux:

Code:
<adresse-ip-de-votre-nas>:8096/web/index.html#!/networking.html


Ici, cochez
Code:
Autoriser les connexions distantes à ce serveur

et modifiez votre numéro de port HTTPS public par 443 (ou le port https choisi pour votre instance Swag)


Croisez les doigts (ça c'est l'étape la plus importante), redémarrez votre container Jellyfin, et rendez vous sur

Code:
https://superjellyfin.ndd.fr

Job's done !




7/ Activation du DNLA ( Optionnel )
Jellyfin possède un serveur DNLA qu'il est possible d'activer. Pour cela, vous devez exposer le port 1900/udp du conteneur puis activer le service dans Jellyfin.

A/ Modification du "docker-compose.yml"
Oups ! En cours :)
B/ Activation du DNLA dans Jellyfin
Dans le Tableau de Bord de Jellyfin, vous devez aller dans le menu DNLA :
6sQYJyg.png

Puis Cocher "Activer le serveur DLNA" :
hGMcqbD.png


Pensez a cliquer sur Sauvegarder en bas de la page !



2022-02-24 - Précision de la re-création du conteneur 6/b/
2022-01-14 - Rajout du paragraphe 6/, Merci à @Nincha
2022-09-02 - Passage sur l'image officielle de jellyfin ( linuxserver avant ) + Activation Transcodage A/
2022-05-16 - Création du tutoriel
 
Dernière édition:
Hello;

Je conseil de ne pas attendre pour vous connecter à http://ip:8096 et de créer le compte admin de Jellyfin car suivant votre par-feux / config , vous pouvez être exposé vers l'extérieur, Et si vous autorisé l'accès depuis l'extérieur, pensez à désactiver la connexion rapide (active par defaut) sur votre user admin !

tableau de bord server > general > connexion rapide > et désactiver la checkbox QuickConnect .

Je viens tomber amoureux de Docker !! Merci @EVOTk !! J'ai mis 5 mins, à peine / sans peines ^^

Sur ma dernière install de Jellyfin, j'avais du passer l'aprèm, facile.

Mes derniers test avec Docker pour cette install n'a pas été concluant, je me suis perdu dans 50 000 onglets de tuto.

Là c'est simple et efficace. Faut juste bien suivre [Tuto] Installation de Docker, Docker-compose et Portainer sur Debian 11. Bravo.

Perso je rajoute à ma todo list l'integration dans swag et peut-être une histoire de droits car l'user qui partage la bibliothèque est différent de l'user du docker et il écrit dans le home d'un troisième user :/

En tout cas Merci pour ce forum.
 
Je conseil de ne pas attendre pour vous connecter à http://ip:8096 et de créer le compte admin de Jellyfin car suivant votre par-feux / config , vous pouvez être exposé vers l'extérieur
Je confirme :) J'avais meme vu que pour les Wordpress, cela aller tres tres vite ! Certains Wordpress exposé en ligne sans configuration, se retrouver "attaqué" en quelques minutes. On expose pas un service qui n'est pas sécurisé :)

Je viens tomber amoureux de Docker !! Merci @EVOTk !! J'ai mis 5 mins, à peine / sans peines ^^
Docker :love:

En tout cas Merci pour ce forum.
Au plaisir !
 
Bonjour je suis en version 10.7.7 sur mon nas qnap avec docker et je n arrive pas a le mettre a jour
 
Salut, merci pour le tuto en plus avec l'image officielle ?
Serais-tu par hasard s'il y a moyen de faire fonctionné la surveillance en temps réel des médiathèques ? Cela n'a jamais fonctionner pour moi avec jellyfin.
 
Serais-tu par hasard s'il y a moyen de faire fonctionné la surveillance en temps réel des médiathèques ? Cela n'a jamais fonctionner pour moi avec jellyfin.
Salut,
Il suffit de l'activer dans les bibliothèque :) Mais je suppose que si tu dit cela c'est que tu la deja fait :)

Regarde peut etre du coté des tables inotify, si tu as beaucoup de médias, il te faut augmenter cette valeur sur ton hote, et redémarrer le conteneur
J'en avais deja parlé pour plex : https://www.forum-nas.fr/threads/tuto-plex-erreur-eae-timeout-eae-not-running-or-wrong-folder.13791/
 
Hello,

je suis en pleine configuration d'OMV sur mon nouveau serveur et j'ai réussi à installer Jellyfin via docker.
Par contre je suis perdu concernant l'activation du transcodage matériel.
J'ai installé docker et les containers sous le compte admin.
Quand je lance la commande ID admin, je n'ai aucune référence à un quelconque groupe render.
Qu'ai je raté ?

Merci
 
Salut,
Quel est ta machine, tu possède un GPU/iGPU dessus ?
Pourrait tu nous dire la référence du CPU qui équipe ta machine

Egalement, que te donne la commande : ls -al /dev/dri
 
  • J'aime
Réactions: axionman
Salut,
Quel est ta machine, tu possède un GPU/iGPU dessus ?
Pourrait tu nous dire la référence du CPU qui équipe ta machine

Egalement, que te donne la commande : ls -al /dev/dri

C'est une carte mère Asrock J5040 avec un pentium J5040 (gemini lake), chipset graphique UHD605
Le cpu supporte donc le transcodage via quicksync sans souci.
Ci dessous le résultat de la commande:

drwxr-xr-x 3 root root 100 23 sept. 17:00 .
drwxr-xr-x 17 root root 3280 23 sept. 17:00 ..
drwxr-xr-x 2 root root 80 23 sept. 17:00 by-path
crw-rw---- 1 root video 226, 0 23 sept. 17:00 card0
crw-rw---- 1 root render 226, 128 23 sept. 17:00 renderD128
 
Oki, depuis OMV va editer ton utilisateur :
1663972794546.png

et rajoute lui le groupe "render"

par contre, quand tu parle de "admin" si tu parle du compte créer par OMV pour se connecter a la WebUI, celui-ci n'est pas modifiable, il faut que tu te fasse un compte utilisateur dans le menu Utilisateur
 
  • J'adore
Réactions: axionman
Je confirme que l'accélération matérielle est désormais belle et bien fonctionnelle.
Par contre, j'ai le sentiment que mon container n'est pas configuré de manière optimale, notamment pour les répertoires de cache et config qui m'obligent à utiliser les 2 volumes ci dessous sous peine d'erreur:

Capture d’écran 2022-09-24 103106.png

Mon compose qui renvoie des erreurs:

Capture d’écran 2022-09-24 103345.png
 
J'ai réinstallé OMV et suis reparti sur une base plus propre (trop bidouillé hier soir)
J'ai réussi à tout configurer correctement, merci
 
  • J'aime
Réactions: EVO