Fransys

Blog technique — Architecture, Cloud & DevOps

BlogServicesContactÀ propos

Suivez-moi

githubGitHublinkedinLinkedinmailMail

© 2026 Fransys • Fransys

Fransys

Catégories

  • Tous les articles
  • Tags
  • productivite10
  • nas10
  • ia8
  • securite7
  • linux6
  • claude-code6
  • auto-hebergement6
  • neovim5
  • docker5
  • editeur4
  • mcp3
  • vpn3
  • reseau3
  • lua2
  • terminal2
nasdockerauto-hebergementmedia

Monter un media center complet avec Jellyfin et la stack *arr

Publié le
17 février 2026·6 min de lecture
Avatar François GUERLEZFrançois GUERLEZ

Pourquoi un media center auto-hébergé ?

C'est devenu fou. Netflix, Disney+, Prime Video, Paramount+, Apple TV+... à un moment donné tu te dis : mais pourquoi je paye 6 abos différents pour regarder 2 séries par mois ? Et puis il y a l'aspect surveillance : chaque film que tu regardes, chaque pause, chaque recherche - tout est enregistré, tracé, monétisé. Pas cool.

L'alternative? Auto-héberger son media center. Tu récupères le contrôle total. Pas d'abonnement qui augmente tous les 6 mois, pas de contenu qui disparaît du catalogue du jour au lendemain, et surtout, tu peux partager ta bibli avec toute la famille sans te soucier des limites de streams simultanés. Ma conjointe peut regarder une série, les enfants un dessin animé, et moi des documentaires en même temps. Zéro limite.

Sur mon TerraMaster F4-424 qui tourne sous Debian 13, j'ai construit une stack complète. De la recherche jusqu'au visionnage sur n'importe quel écran de la maison. Ça a pris du temps à mettre en place, honnêtement, mais maintenant c'est du feu et j'oublie que ça tourne.

Jellyfin : le coeur du système

Jellyfin, c'est un fork open-source d'Emby. Rien de verrouillé, zéro feature derrière une paywall. Il gère tout : films, séries, musique, photos, et même la TV en direct si tu as un tuner HDMI.

Contrairement aux autres services Docker du NAS, Jellyfin tourne en host network mode. Pourquoi? Parce que DLNA/SSDP - le protocole pour la découverte auto sur le réseau - ça a besoin du multicast, et le bridge Docker, ça ne joue pas bien avec ça. C'est un truc technique mais c'est important, sinon tu vois pas ton serveur Jellyfin quand tu branches une vieille Freebox Revolution en client DLNA.

# docker-compose.yml - Jellyfin
services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    network_mode: host
    environment:
      - JELLYFIN_PublishedServerUrl=https://jellyfin.home.lan
    volumes:
      - /mnt/data/apps/jellyfin/config:/config
      - /mnt/data/apps/jellyfin/cache:/cache
      - /mnt/data/media/movies:/data/movies
      - /mnt/data/media/tv:/data/tv
      - /mnt/data/media/music:/data/music
    restart: unless-stopped

L'interface web, c'est le port 8096. Et là c'est sympa : Jellyfin supporte le hardware transcoding via Intel Quick Sync (QSV) grâce au GPU intégré du N95. Donc tu peux transcoder un flux 4K HEVC en temps réel sans que le CPU chauffe. Première fois que j'ai testé ça, j'ai cru que c'était pas possible.

Authentification ? Jellyfin connecté à mon instance Authelia en OIDC/SSO. Chaque membre de la famille se connecte avec ses identifiants centralisés. Fin de l'histoire.

La stack *arr : c'est là que ça devient fun

Bon, le vrai truc puissant, c'est l'écosystème *arr. Une série d'applis qui automatisent TOUT : la recherche, le téléchargement, l'organisation. Chacune a un rôle spécifique.

Prowlarr : le cerveau des indexeurs

Prowlarr, c'est centralisé les indexeurs (les sources). Au lieu de configurer les mêmes truc dans Sonarr ET Radarr, tu les déclares une fois ici et Prowlarr sync auto avec les autres. Simple. Port 9696.

Sonarr et Radarr : l'automate qui ne dort jamais

Sonarr pour les séries, Radarr pour les films. Tu ajoutes un titre, tu dis "je veux du 1080p", et l'appli se charge du reste. Elle regarde les flux RSS, grab les nouveaux épisodes ou les meilleures versions dispo, renomme tout selon une convention que Jellyfin comprend. C'est magique, franchement.

  • Sonarr : port 8989
  • Radarr : port 7878

J'ai passé 3h à configurer les profils de qualité la première fois. Après? Plus rien à toucher.

Bazarr : les sous-titres (vraiment utile)

Bazarr regarde les bibli Sonarr/Radarr et télécharge les sous-titres qui manquent. Plusieurs sources, il choisit le meilleur match selon la version du fichier. Port 6767, et ça marche du tonnerre.

qBittorrent : le client de téléchargement

Voilà le client que Sonarr/Radarr utilisent pour télécharger. Interface web sur le port 8080, protocole BitTorrent sur le 6881.

FlareSolverr : pour contourner CloudFlare

Certains indexeurs sont derrière CloudFlare. FlareSolverr agit comme proxy pour résoudre les challenges. Port 8191. Essentiellement, sans ça, certains indexeurs te refusent l'accès.

Jellyseerr : la couche user

Et puis y a Jellyseerr. C'est l'interface pour les non-techos. Ta famille veut regarder une série? Elle la cherche dans Jellyseerr, clique "Demander", et boom - Sonarr/Radarr se chargent de la récupérer. Personne a besoin de savoir comment ça marche. Port 5055, connecté à Authelia en OIDC.

Archi réseau et stockage

Tous les services *arr tournent sur un réseau Docker isolé arr_net. Seul Jellyfin (host network) et Jellyseerr (reverse proxy) sont accessibles du LAN.

# docker-compose.yml - Sonarr + Radarr
services:
  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - /mnt/data/apps/arr/sonarr:/config
      - /mnt/data/media/tv:/tv
      - /mnt/data/downloads:/downloads
    networks:
      - arr_net
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - /mnt/data/apps/arr/radarr:/config
      - /mnt/data/media/movies:/movies
      - /mnt/data/downloads:/downloads
    networks:
      - arr_net
    restart: unless-stopped

networks:
  arr_net:
    name: arr_net

Les images LinuxServer utilisent PUID/PGID (ici 1000:1000) pour que les perms soient bonnes. C'est essentiel, sinon tu finis avec des problèmes de droits d'accès bizarres.

L'arborescence (critique!)

C'est là que beaucoup se plantent. L'organisation des répertoires, c'est crucial pour les hardlinks :

/mnt/data/
├── apps/arr/
│   ├── sonarr/          # Config Sonarr
│   ├── radarr/          # Config Radarr
│   ├── prowlarr/        # Config Prowlarr
│   ├── bazarr/          # Config Bazarr
│   ├── qbittorrent/     # Config qBittorrent
│   └── jellyseerr/      # Config Jellyseerr
├── downloads/
│   ├── complete/        # Téléchargements finis
│   └── incomplete/      # En cours
└── media/
    ├── movies/          # Films organisés par Radarr
    └── tv/              # Séries organisées par Sonarr

Le truc important : downloads et media sur le même filesystem. Ça permet à Sonarr/Radarr d'utiliser des hardlinks au lieu de copier. Instantané, aucune duplication de space. J'ai compris ça tard, croyez-moi. Avant j'avais tout doublonné comme un idiot.

Le flux complet

Quand quelqu'un demande un film :

  1. Jellyseerr : ta femme cherche et demande un film
  2. Radarr : reçoit la requête, interroge les indexeurs via Prowlarr
  3. Prowlarr : envoie la recherche aux sources
  4. qBittorrent : télécharge dans /mnt/data/downloads/complete
  5. Radarr : voit le fichier fini, le renomme, crée un hardlink dans /mnt/data/media/movies
  6. Bazarr : détecte le nouveau film, télécharge les sous-titres
  7. Jellyfin : scanne la bibli, le film est dispo

Du point de vue utilisateur? Elles ont cliqué un bouton, et quelques minutes plus tard le film est là. Zéro interface technique visible.

Au final

Setup un peu long à configurer la première fois (franchement, j'ai cramé une journée), mais après c'est du feu et j'oublie. Ansible se charge du redéploiement. La stack *arr + Jellyfin, c'est du niveau streaming commercial, pas d'abo, contrôle total, et tu partages avec qui tu veux. Le N95 gère le transcoding hardware sans sourciller. L'isolation réseau arr_net = c'est propre, c'est secure. Honnêtement, c'est mon déploiement perso favori sur le NAS.


Série NAS Debian from scratch — Cet article fait partie d'une série complète sur la construction d'un NAS Debian.

Précédent : Accès distant sécurisé à son NAS avec Tailscale | Suivant : Gérer ses photos avec Immich en auto-hébergé

Article précédent

← Terminal, Git et recherche globale intégrés dans Neovim

Article suivant

Optimiser sa configuration Claude Code pour le développement→
← Retour au blog

Sommaire

  • Pourquoi un media center auto-hébergé ?
  • Jellyfin : le coeur du système
  • La stack *arr : c'est là que ça devient fun
  • Prowlarr : le cerveau des indexeurs
  • Sonarr et Radarr : l'automate qui ne dort jamais
  • Bazarr : les sous-titres (vraiment utile)
  • qBittorrent : le client de téléchargement
  • FlareSolverr : pour contourner CloudFlare
  • Jellyseerr : la couche user
  • Archi réseau et stockage
  • L'arborescence (critique!)
  • Le flux complet
  • Au final