Comment installer Jellyfin avec Docker et l'alimenter depuis sa seedbox

Catégories qBittorrent, Docker et Jellyfin : monte ta médiathèque directement sur le dossier de ta seedbox, sans copier ni déplacer un seul fichier.

Introduction

Cet article est plus accessible que le précédent, mais il suppose que tu as déjà ta seedbox sous Docker et Ubuntu Server. Si ce n'est pas le cas, commence par là.

Ta seedbox télécharge et partage, c'est très bien. Mais récupérer tes fichiers en SFTP pour les ouvrir dans un lecteur vidéo, c'est vite pénible. L'étape suivante, c'est de te monter une vraie médiathèque : une interface propre, avec affiches, résumés et reprise de lecture, accessible depuis ta télé, ton téléphone ou ton navigateur.

C'est le rôle de Jellyfin, un serveur multimédia libre, gratuit et sans compte à créer chez un tiers. On va l'installer à côté de qBittorrent, sur le même serveur, et le faire lire directement dans le dossier des téléchargements : un torrent se termine, il apparaît dans ta médiathèque.

(Comme toujours : pour des contenus dont tu as les droits.)

Glossaire

Terme Définition
Jellyfin Serveur multimédia libre qui organise et diffuse tes films, séries et musiques
Bibliothèque Un dossier que Jellyfin analyse et présente (films, séries...)
Catégorie (qBittorrent) Une étiquette attribuée à un torrent, qui peut aussi lui imposer un dossier de destination
Métadonnées Les informations affichées autour d'un média : affiche, résumé, casting, année...
Lecture directe (direct play) Le fichier est envoyé tel quel à l'appareil, sans conversion
Transcodage Conversion du fichier à la volée quand l'appareil ne sait pas le lire. C'est gourmand en processeur

Ce que l'on va construire

  1. Des catégories qBittorrent (films, séries) qui rangent chaque téléchargement dans le bon sous-dossier.
  2. Un dossier pour les téléchargements en cours, séparé, pour que Jellyfin ne voie jamais un fichier à moitié téléchargé.
  3. Un conteneur Jellyfin, ajouté au même docker-compose.yml que qBittorrent, qui lit le dossier des torrents en lecture seule.

Cette lecture seule est importante : le dossier est aussi celui que ta seedbox partage. Si Jellyfin renommait ou déplaçait un fichier, le torrent ne le retrouverait plus et arrêterait de partager. Ici, Jellyfin regarde, mais ne touche à rien.

Prérequis

  • La seedbox de l'article précédent, avec Docker et le dossier /srv/data.
  • Un espace disque suffisant.
  • Tes UID/GID (id -u et id -g, en général 1000).

Étape 1 : organiser les dossiers

Crée les sous-dossiers de destination, et le dossier des téléchargements en cours :

mkdir -p /srv/data/torrents/movies /srv/data/torrents/tv
mkdir -p /srv/data/incomplete
mkdir -p ~/seedbox/jellyfin/config ~/seedbox/jellyfin/cache

Remarque : incomplete est à côté de torrents, pas dedans, pour que Jellyfin n'ait jamais accès à ce qui n'est pas terminé.

Étape 2 : configurer qBittorrent

Dans l'interface web de qBittorrent, Options → Téléchargements :

  1. Mode de gestion des torrents par défaut : "Automatique". C'est ce qui permet aux catégories de choisir le dossier.
  2. Coche Conserver les torrents incomplets dans et indique /data/incomplete. À la fin du téléchargement, qBittorrent déplace le fichier dans son dossier final.

Ensuite, crée deux catégories (clic droit dans la colonne de gauche, Catégories → Ajouter une catégorie) :

  • movies, avec le dossier de destination /data/torrents/movies ;
  • tv, avec le dossier de destination /data/torrents/tv.

Désormais, quand tu ajoutes un torrent, tu choisis sa catégorie : il se télécharge dans incomplete, puis arrive tout seul dans le bon dossier.

Étape 3 : ajouter Jellyfin au docker-compose.yml

Ouvre ton fichier existant et ajoute le service sous qbittorrent (à l'intérieur de services:) :

  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: 1000:1000
    ports:
      - 8096:8096
    volumes:
      - ./jellyfin/config:/config
      - ./jellyfin/cache:/cache
      - /srv/data/torrents:/data/torrents:ro
    restart: unless-stopped

Ce que fait chaque ligne :

  • user : l'utilisateur sous lequel tourne Jellyfin. Mets le même UID/GID que pour qBittorrent.
  • ports : l'interface web est sur le port 8096.
  • ./jellyfin/config et ./jellyfin/cache : la configuration et le cache de Jellyfin, conservés hors du conteneur.
  • /srv/data/torrents:/data/torrents:ro : le dossier des torrents, en lecture seule (:ro). Garde-le tel quel.

Étape 4 : lancer et configurer

cd ~/seedbox
docker compose up -d
docker compose ps

Ouvre http://IP_DE_TON_SERVEUR:8096 et suis l'assistant de démarrage :

  1. Choisis la langue.
  2. Crée ton compte administrateur (avec un vrai mot de passe).
  3. Passe l'ajout de bibliothèques pour l'instant, on le fait juste après.
  4. Garde la langue des métadonnées en français.

Étape 5 : créer les bibliothèques

Dans Tableau de bord → Bibliothèques → Ajouter une bibliothèque :

  • Films : type "Films", dossier /data/torrents/movies.
  • Séries : type "Séries TV", dossier /data/torrents/tv.

Garde le français pour la langue des métadonnées et la France comme pays. Jellyfin va ensuite chercher les affiches et les résumés pour chaque média.

Étape 6 : tester

  1. Ajoute un torrent dans qBittorrent, avec la catégorie movies ou tv.
  2. Attends la fin du téléchargement.
  3. Le fichier arrive dans le dossier de la catégorie, et Jellyfin le détecte (ou lance un scan manuel de la bibliothèque si besoin).

Si Jellyfin se trompe de film ou de série, ouvre le média, menu à trois points → Identifier, et choisis la bonne fiche. Il vaut mieux corriger ici que de renommer le fichier, car on ne touche pas à ce que partage la seedbox.

Étape 7 : regarder sur tes appareils

  • Navigateur : http://IP_DE_TON_SERVEUR:8096, ça marche tout de suite.
  • Télé, téléphone, box : installe l'application Jellyfin de ta plateforme, puis saisis l'adresse de ton serveur.

Privilégie les appareils qui lisent tes fichiers en lecture directe. Si l'appareil ne supporte pas le format, Jellyfin transcode, et ce n'est pas anodin pour le processeur d'un petit serveur.

Étape 8 : y accéder depuis l'extérieur (sans prendre de risques)

Comme pour qBittorrent, ne redirige pas le port 8096 sur ta box. Un serveur multimédia exposé tel quel est une cible facile. Deux options sérieuses :

  • Un VPN (WireGuard, Tailscale...) : tu te connectes à ton réseau privé, et tout est accessible comme à la maison.
  • Un reverse proxy avec HTTPS devant Jellyfin, si tu sais ce que tu fais.

Étape 9 : l'entretien

  • Mettre à jour :
  cd ~/seedbox
  docker compose pull jellyfin
  docker compose up -d
  docker image prune -f
  • Sauvegarder le dossier ~/seedbox/jellyfin/config : il contient tes comptes, tes réglages et l'historique de visionnage.
  • Surveiller l'espace disque (df -h), comme pour la seedbox.

Les pièges classiques

  • Une bibliothèque vide : le chemin renseigné dans Jellyfin est celui de ta machine, pas celui du conteneur. Utilise /data/torrents/....
  • Un film ou une série mal reconnus : les noms de torrents sont rarement parfaits. Utilise "Identifier" plutôt que de renommer.
  • Un torrent qui n'apparaît pas : la catégorie n'a pas été choisie à l'ajout, ou le mode de gestion n'est pas sur "Automatique".
  • Un fichier incomplet visible : le dossier des téléchargements en cours est resté dans torrents.
  • Permission denied : l'UID/GID du conteneur ne correspond pas au propriétaire des fichiers.
  • Un média qui disparaît : normal si tu supprimes le torrent avec ses fichiers dans qBittorrent.
  • Saccades à la lecture : l'appareil ne sait pas lire le format, et le serveur transcode.
  • Port 8096 redirigé sur la box : à éviter.

Conclusion

Tu as maintenant une chaîne complète : ta seedbox télécharge et partage, et Jellyfin présente le tout comme un vrai service de streaming, sans copier un seul fichier.

Reste un point faible : choisir la catégorie à la main à chaque ajout, et subir les noms de torrents. Dans le prochain article, on automatise l'ensemble pour que tout arrive tout seul, bien rangé et bien nommé.

Commentaires

Chargement des commentaires…

Masquer ce commentaire ?

Il ne sera plus visible du public. Son texte est conservé et vous pourrez le rétablir. Ses réponses restent visibles.

Signaler ce commentaire

Pourquoi ?