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

Merci à tous les deux. Je n'avais pas pensé à un conflit d'ip.
J'ai corrigé les paramètres de ma livebox.
 
Hello! Jellyfin déployé hier soir en une petite demi heure, et encore c'est plus la fatigue et une erreur typo foireuse qui m'ont fait prendre autant de temps.
J'ai décidé de sauter le pas après que Kodi ait décidé de forcer une mise à jour de version sur la Xbox, et encore une fois une maj de version implique que la bdd mariadb n'est plus reconnue, donc plus d'accès, nécessité de tout reparametrer.... Bref, marre.
Vu qu'@EVOTk ne cesse d'encenser Jellyfin... Je teste.
Déployé rapidement, cool.
Une documentation claire et précise et complète, très cool!
Menus bien pensé, belle interface, top.
Création des user, connexions de smartphones dessus en 2 temps 3 mouvements, super!
Lecture sur smartphone sans broncher alors que le nas est en train de scanner tous les films et séries, joli!
Bref, premières impressions très bonnes!

Reste à mettre en place la connexion depuis l'extérieur, mais pour le moment, ça a de grandes chances de devenir mon gestionnaire de média pour longtemps!
Et en plus y'a une appli webos (TV LG) et plein de petits addons 🤩

Merci pour le tuto!
 
  • J'aime
Réactions: EVO
Hello !

Merci pour ton tuto tout c'est presque bien passé pour ma part. Enfin... j'ai un léger souci Jellyfin ne trouve pas l'accès au dossier qu'on a ajouté dans la configuration du container. (voir ci-joint).
Est-ce que quelqu'un a déjà eu le souci ici ? Et si oui, a réussi à la résoudre ?
 

Pièces jointes

  • Capture d’écran 2022-12-22 à 12.13.33.png
    Capture d’écran 2022-12-22 à 12.13.33.png
    709.3 KB · Affichages: 25
  • Capture d’écran 2022-12-22 à 12.13.47.png
    Capture d’écran 2022-12-22 à 12.13.47.png
    951.3 KB · Affichages: 25
Salut,
Vérifie les permissions sur tes dossiers , dans le dossier MULTIMEDIA en SSH que donne :
Code:
ls -alh
 
Si tu y arrive hésite pas donner un retour le soucis n’est pas encore réglé chez moi
erf non justement, j'ai lancé une petite video et regardé les log j'ai vu

[19:15:45] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Found ffmpeg version 5.1.2 [19:15:45] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: FFmpeg: /usr/lib/jellyfin-ffmpeg/ffmpeg [19:33:53] [INF] [32] Jellyfin.Api.Helpers.TranscodingJobHelper: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -f matroska,webm -autorotate 0 -i file:"/data/movies4k/Elysium.2013.4K.FR.EN.X265.AC3.Mkv" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 libx264 -preset veryfast -crf 23 -maxrate 13526633 -bufsize 27053266 -profile:v:0 high -level 51 -x264opts:0 subme=0:me_range=4:rc_lookahead=10:me=dia:no_chroma_me:8x8dct=0:partitions=none -force_key_frames:0 "expr:gte(t,0+n_forced*3)" -sc_threshold:v:0 0 -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale=trunc(min(max(iw\,ih*a)\,min(3840\,1606*a))/2)*2:trunc(min(max(iw/a\,ih)\,min(3840/a\,1606))/2)*2,format=yuv420p" -codec:a:0 libfdk_aac -ac 2 -ab 384000 -af "volume=2" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_segment_filename "/config/transcodes/fbf839ea005edeae9c07f9c4b1826584%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "/config/transcodes/fbf839ea005edeae9c07f9c4b1826584.m3u8" [19:35:59] [INF] [24] Jellyfin.Api.Helpers.TranscodingJobHelper: Stopping ffmpeg process with q command for /config/transcodes/fbf839ea005edeae9c07f9c4b1826584.m3u8 [19:36:03] [INF] [24] Jellyfin.Api.Helpers.TranscodingJobHelper: FFmpeg exited with code 0

ce qui signifie d'apres ce post que le décodage hardware ne fonctionne pas...
arg en ce moment promo sur plex pass.. je vais craquer je crois
 
Hello,
@EVOTk , voilà une ébauche pour passer Jellyfin en https avec swag:

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.

Si vous avez choisi une méthode wildcard duckdns/ovh pour configurer votre Swag, je laisse @EVOTk renseigner cet encart.

Si vous avez un container swag pour lequel vous devez préciser chaque sous domaine que vous souhaitez couvrir, il vous suffira d'ajouter superjellyfin à votre liste de SUB_DOMAINS et redémarrer le container swag afin de tenir compte des modifs.
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/ Paramétrer le serveur Jellyfin

J'ai un doute sur la nécessité de devoir modifier ces paramètres dans l'UI de Swag, quelqu'un peut il confirmer leur utilité ?

Pour conclure, 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

Job's done !
 
Dernière édition:
  • J'aime
Réactions: MilesTEG
J'ai oublié la partie modification du docker composé de jellyfin.
Relativement simple, y'a juste à ajouter le network qui correspond au network de swag.

Je complète ça demain, au plus tard dimanche. Sorry..
 
Salut @Nincha je regarde pour intégrer cela ce weekend.

Concernant SWAG et Jellyfin tu n'est pas obliger d'intégrer Jellyfin au réseau de SWAG c'est juste que au a la place de set $upstream_app jellyfin; dans la config, il faut remplacer jellyfin par l'adresse IP de la passerelle du reseau docker de Jellyfin, ou l'ip local de ta machine
 
Hello @EVOTk , j'ai modifié à partir du point 6/c/, j'espère t'avoir épargné un peu de boulot ;-)

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

1. Intégrer le container à votre réseau Swag. 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

2. Ne pas intégrer le container à votre réseau Swag. @EVOTk ici j'écris du théorique, je te laisse vérifier/corriger afin que je n'induise personne en erreur.
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

J'ai un doute sur la nécessité de devoir modifier ces paramètres dans l'UI de Swag, quelqu'un peut il confirmer leur utilité ?

Pour conclure, 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 !
 
  • J'aime
Réactions: EVO
Hello,

Je viens de suivre le tuto avec une difference mineure, j'ai pris l'image de linuxserver car apparemment elle serait mieux pour les Raspberry d'apres le site de Jellyfin.

Le container est "Running" mais impossible d'y acceder sur la page web via le port 8096.

Le log renvoie ceci :

GID/UID
───────────────────────────────────────
User UID: 911
User GID: 1000
───────────────────────────────────────
/etc/s6-overlay/s6-rc.d/init-adduser/run: line 47: lsiown: command not found
/etc/s6-overlay/s6-rc.d/init-adduser/run: line 48: lsiown: command not found
/etc/s6-overlay/s6-rc.d/init-adduser/run: line 49: lsiown: command not found
s6-rc: warning: unable to start service init-adduser: command exited 127

Mon utilisateur a pour PUID 1000 et GUID 100 ce que j'ai mis dans mon compose, je ne comprends pas d'ou sort ce PUID 911 et GUID 1000 ?

Quant aux 4 dernieres lignes, je seche...

Au cas ou, voici mon compose :

Code:
version: "2.1"
services:
  jellyfin:
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    hostname: jellyfin
    user: 1000:100
#    group_add:
#      - "107"
#    devices:
#      - /dev/dri/renderD128:/dev/dri/renderD128
    ports:
      - 8096:8096
      - 8920:8920
    volumes:
      - /srv/dev-disk-by-uuid-c9baeb42-dac1-4e32-bf0b-a985b3289c68/system/docker/jellyfin/config:/config
      - /srv/dev-disk-by-uuid-c9baeb42-dac1-4e32-bf0b-a985b3289c68/system/docker/jellyfin/cache:/cache
      - /srv/dev-disk-by-uuid-02581ba1-da3b-4bed-8845-dd6db1c1d811/Séries:/data/tvshows
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Films:/data/movies
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Animations:/data/animations
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Documentaires:/data/documentaries
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Humour:/data/humour
      - /srv/dev-disk-by-uuid-8e158207-5ef3-4fea-a1b8-a04e8ecb43f0/Animations:/data/kids
    environment:
      - TZ=Europe/Paris
    restart: unless-stopped
 
Dernière édition:
Regarde l'exemple pour linuxserver, ton compose devrais plutôt ressembler a cela : https://github.com/linuxserver/docker-jellyfin#docker-compose-recommended-click-here-for-more-info

Code:
version: "2.1"
services:
  jellyfin:
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    hostname: jellyfin
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/paris
#    devices:
#      - /dev/dri/renderD128:/dev/dri/renderD128
    ports:
      - 8096:8096
    volumes:
      - /srv/dev-disk-by-uuid-c9baeb42-dac1-4e32-bf0b-a985b3289c68/system/docker/jellyfin/config:/config
      - /srv/dev-disk-by-uuid-c9baeb42-dac1-4e32-bf0b-a985b3289c68/system/docker/jellyfin/cache:/cache
      - /srv/dev-disk-by-uuid-02581ba1-da3b-4bed-8845-dd6db1c1d811/Séries:/data/tvshows
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Films:/data/movies
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Animations:/data/animations
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Documentaires:/data/documentaries
      - /srv/dev-disk-by-uuid-c6758965-0fc1-4163-9b86-a9d3f8867344/Films/Humour:/data/humour
      - /srv/dev-disk-by-uuid-8e158207-5ef3-4fea-a1b8-a04e8ecb43f0/Animations:/data/kids
    restart: unless-stopped
 
  • J'aime
Réactions: Raskarkapak
Nickel ca tourne ! Merci !

je savais pas qu'il pouvait y avoir ce genre de difference de syntaxe d'une image a l'autre, je saurai pour la prochaine fois.

Dans ton exemple tu a enleve les lignes :

# group_add:
# - "107"

Cela ne concerne pas l'image de linuxserver ?

Je ne compte pas utiliser le transcodage pour le moment mais peut etre plus tard
 
La mise en forme dépend du dev qui a fait l'image, donc il faut toujours suivre son exemple. Dans.le cas de linuxserver l'avantage c'est que toutes leurs images sont construite de façon très similaire donc les mises en forme pour les déclaration de paramètres, ... Aussi.

Group_add ne concerne que l'image officielle
 
  • J'aime
Réactions: Raskarkapak
J'ai fini la config, mais je suis bloque a la fin, lorsque je clique sur "jellyfin" puis "se connecter" sur la page "selectionnez un serveur" il me dit "Nous sommes dans l'impossibilité de nous connecter au serveur sélectionné. Veuillez vérifier qu'il est opérationnel et réessayez."

J'ai decoche la case "autoriser les connexions a distance" (quelque chose comme ca) puisque je n'y accede que par mon reseau local/Tailscale. Est-ce que c'est lie ?
 
Salut,
Je connais pas Tailscale, mais si tu n'est pas véritablement en local, le soucis est sûrement la.