Bonjour,
Voici un petit tuto, pour ceux qui souhaiterai installer Jellyfin en Docker.
Jellyfin, c'est quoi ?
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
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 )
7/ Activation du DNLA ( Optionnel )
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
Vous pouvez aussi créer le dossier jellyfin, contenant un dossier config avec cette commande :
Ensuite, avec la commande
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 :
L'éditeur s'ouvre, dedans nous allons copier/coller le code suivant :
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 :
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 :
Note : Si vous exécuter une veille version de docker-compose ( version 1 ) , la commande sera :
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 )
Le bout du docker compose deviendra donc :
Nous allons devoir modifier le chiffre 107 en fonction de votre installation.
Pour connaitre ce chiffre, en SSH taper :
Ceci me donne :
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 :
Le résultat dans mon exemple :
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 )
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:
Il vous faudra donc faire:
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:
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:
On copie colle le fichier exemple pour Jellyfin qui se nomme jellyfin.subdomain.conf.sample
On édite le fichier tout fraichement crée:
Voici à quoi ressemble ce fichier avant modif:
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:
Il vous faudra donc modifier la ligne server_name par:
Ce qui donne le fichier suivant:
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.
Vérifiez bien dans vos logs qu'il n'y a pas d'erreur à la création des certificats.
C/ Modifier le compose du container Jellyfin
Deux possibilités :
D/ Paramétrer le serveur Jellyfin
Connectez vous en admin à votre serveur Jellyfin, et allez dans la page des paramètres réseaux:
Ici, cochez
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
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.
Puis Cocher "Activer le serveur DLNA" :
Pensez a cliquer sur Sauvegarder en bas de la page !
Voici un petit tuto, pour ceux qui souhaiterai installer Jellyfin en Docker.
Jellyfin, c'est quoi ?
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 :
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 :
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:
Ici le sous domaine serait doncsuperjellyfin.ndd.fr
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;
}
}
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 modifsVous pouvez directement reboot le conteneur SWAG pour actualiser la prise en compte de la nouvelle configuration
Bash:
docker restart swag
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:
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:
Redémarrez Swag
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 :Puis Cocher "Activer le serveur DLNA" :
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: