Aller au contenu

Jellyfin avec Docker : Ton Netflix Gratuit en 30 Min (Économise 396€/an)

Brandon Visca
Date de mise à jour:

💡 TL;DR

  • Netflix + Disney+ + Prime = 396€/an en 2026, que tu remplaces par ton propre Jellyfin (0€ si tu as déjà un serveur)
  • Installation Docker en 30 minutes, bibliothèque films/séries organisée automatiquement (metadata, posters, sous-titres)
  • Streaming sur TV, mobile, tablette et navigateur, transcoding 4K en temps réel si ton serveur suit

Prérequis :

Testé sur Jellyfin 10.11.11 (sortie le 6 juin 2026), sur un mini PC Intel avec Ubuntu 24.04 LTS.


Table des matières

Table des matières

Pourquoi Jellyfin > Netflix (et Plex, et Emby)

Le calcul économique qui fait mal

Abonnements streaming en 2026 :

Total famille moyenne : 396-696€/an

Et ça monte tous les ans. Netflix Standard était à 13,49€ fin 2025, il est à 14,99€ aujourd’hui. Tu paies plus cher chaque année un catalogue qui rétrécit.

Jellyfin auto-hébergé :

Économie réaliste sur 5 ans : 1 800-3 200€

Et encore, si tu réutilises ton serveur Nextcloud ou un vieux PC, c’est quasi gratuit.


Jellyfin vs Plex vs Emby : le match

Bagarre entre George Costanza et un inconnu dans Seinfeld

CritèreJellyfinPlexEmby
PrixGratuit à vieGratuit (limité) ou payantGratuit (limité) ou payant
Open source100%PropriétairePartiellement
Vie privéeAucune télémétrieCompte Plex obligatoireCompte optionnel
Transcoding matérielIllimitéRéservé au Plex PassRéservé au Premiere
Apps mobilesGratuitesDéblocage payantFreemium
InterfaceCorrecteExcellenteTrès bonne
PluginsLarge choixRestreintsMoyens
Communauté FRActiveTrès activeMoyenne

Verdict :

Mon avis perso : Jellyfin fait 95% du job de Plex gratuitement. L’interface est moins léchée par défaut, mais un thème CSS règle ça en deux minutes (voir plus bas). Et surtout, tes données restent chez toi.


Jellyfin c’est quoi exactement ?

Interface web de Jellyfin affichant la bibliothèque de films

En une phrase : un serveur multimédia qui transforme ta collection de films/séries en Netflix personnel.

Ce que ça fait :

Ce que ça fait PAS :

Si tu cherches justement à télécharger du contenu YouTube pour l’intégrer proprement dans ta bibliothèque, HomeTube Docker est l’outil complémentaire qu’il te faut.


Avant de commencer : choisir ton matériel

Option 1 : VPS cloud (le plus simple)

Pour qui ? Tu veux streamer depuis l’extérieur, pas de serveur à la maison.

ATTENTION : légalité du streaming depuis VPS

Juridiquement en France :

Conseil légal : utilise Jellyfin pour ton usage personnel/familial uniquement.

VPS adaptés à Jellyfin :

VPSPrix/moisSpecsTranscoding
Hetzner CPX21~8€ HT3 vCPU, 4 Go RAM1080p OK, 4K difficile
Scaleway DEV1-M~0,02€/h3 vCPU, 4 Go RAM1080p OK
OVH VPS Value~6€ HT2 vCPU, 4 Go RAM720p-1080p OK

Astuce transcoding : le transcoding 4K demande un CPU costaud OU un GPU (pas dispo sur VPS classiques). Solution : active Direct Play, le client lit directement sans transcoder.


Option 2 : homelab (le plus économique)

Pour qui ? Tu as un serveur chez toi (Raspberry Pi, vieux PC, mini PC, NAS).

Matériel testé et approuvé :

Raspberry Pi 4/5 (8 Go RAM), ~80€

Mini PC x86 (Intel N100 ou N150), 150-200€

Vieux PC reconverti, 0€

NAS Synology/QNAP, 300-800€

Ma recommandation 2026 : mini PC Intel N150 (Beelink, GMKtec, Acemagic), le sweet spot performance/prix/conso. Le N100 reste excellent et se trouve d’occasion à 120€.


Option 3 : combo VPS + stockage externe (hybride)

Pour qui ? Tu veux l’accessibilité du VPS mais le stockage pas cher.

Setup :

Astuce avancée : monte le stockage distant avec rclone en cache local (--vfs-cache-mode full). Tu gagnes en vitesse de seek sans exploser le disque du VPS.


Installation Jellyfin avec Docker : la méthode qui marche

Étape 1 : préparer le serveur

On repart sur Ubuntu 24.04 LTS (ou 22.04, Debian 12/13, Raspberry Pi OS…).

# Mise à jour système
sudo apt update && sudo apt upgrade -y

# Installer Docker si pas déjà fait
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker

# Vérifier
docker --version

Étape 2 : créer la structure

# Créer les dossiers
mkdir -p ~/jellyfin/{config,cache,media/{movies,series,music}}
cd ~/jellyfin

# Vérifier la structure
tree -L 2

Tu devrais voir :

jellyfin/
├── config/     # Configuration Jellyfin
├── cache/      # Cache transcoding
└── media/
    ├── movies/ # Tes films ici
    ├── series/ # Tes séries ici
    └── music/  # Ta musique ici

Étape 3 : le docker-compose.yml

nano docker-compose.yml

Colle ce fichier testé en amont :

services:
  jellyfin:
    image: jellyfin/jellyfin:10.11.11
    container_name: jellyfin
    restart: unless-stopped

    # Ports
    ports:
      - "8096:8096"   # Interface web
      - "8920:8920"   # HTTPS (optionnel)
      - "7359:7359/udp" # Auto-discovery
      - "1900:1900/udp" # DLNA

    # Volumes
    volumes:
      - ./config:/config
      - ./cache:/cache
      - ./media:/media:ro  # :ro = read-only (sécurité)
      # Si tu as un disque externe monté ailleurs :
      # - /mnt/films:/media/movies:ro
      # - /mnt/series:/media/series:ro

    # Variables d'environnement
    environment:
      - PUID=1000  # ID utilisateur (vérifie avec 'id -u')
      - PGID=1000  # ID groupe (vérifie avec 'id -g')
      - TZ=Europe/Paris
      - JELLYFIN_PublishedServerUrl=https://jellyfin.ton-domaine.fr  # Change si domaine

    # Transcoding matériel (optionnel)
    # Décommente selon ton matériel :

    # Intel Quick Sync (mini PC Intel)
    # devices:
    #   - /dev/dri:/dev/dri

    # NVIDIA GPU (si GPU NVIDIA)
    # runtime: nvidia
    # environment:
    #   - NVIDIA_VISIBLE_DEVICES=all

    # AMD GPU (si GPU AMD)
    # devices:
    #   - /dev/dri:/dev/dri

    networks:
      - jellyfin-network

networks:
  jellyfin-network:
    driver: bridge

Récupère tes PUID/PGID avant de lancer :

id
# uid=1000(brandon) gid=1000(brandon) groups=...

Les trois lignes qui comptent vraiment :

J’épingle volontairement la version (10.11.11) plutôt que latest. Une mise à jour majeure de Jellyfin casse régulièrement les thèmes CSS et certains plugins, autant décider toi-même du moment.


Étape 4 : activer le transcoding Intel Quick Sync (si mini PC Intel)

Si tu as un mini PC Intel N100/N150/i3/i5/i7, tu peux utiliser Quick Sync, du transcoding 4K quasi gratuit en CPU.

# Vérifier que /dev/dri existe
ls -la /dev/dri
# Tu dois voir renderD128 et card0

# Donner accès à Jellyfin
sudo usermod -aG render $USER
sudo usermod -aG video $USER

Puis décommente dans docker-compose.yml :

    devices:
      - /dev/dri:/dev/dri

Étape 5 : lancer Jellyfin

# Démarrer
docker compose up -d

# Vérifier que ça tourne
docker ps

# Voir les logs
docker compose logs -f jellyfin

Ouvre http://IP-DE-TON-SERVEUR:8096. L’assistant de première configuration t’accueille.


Étape 6 : configuration initiale Jellyfin

L’assistant se déroule en cinq écrans. Les deux qui comptent :

1. Langue des métadonnées

Choisis French et France, sinon tous tes synopsis arrivent en anglais et tu devras rescanner toute la bibliothèque plus tard.

Écran Langue de métadonnées préférée de Jellyfin réglé sur French et France

2. Ajouter tes médiathèques

Clique sur Ajouter une médiathèque, choisis le type de contenu (Films, Séries, Musiques…), puis le chemin à l’intérieur du conteneur.

Menu déroulant Type de contenu de Jellyfin avec Films, Musiques, Séries, Livres

Le piège classique : le chemin à saisir est /media/movies, pas ~/jellyfin/media/movies. Jellyfin vit dans un conteneur, il ne voit que ce que tu lui as monté.

Sélecteur de chemin Jellyfin affichant /media avec les dossiers movies, music et series

Répète pour Films, Séries et Musiques :

Écran Configurer vos médiathèques de Jellyfin avec Films, Séries et Musiques configurés

3. Accès distant

Décoche Autoriser les connexions distantes si tu comptes passer par un reverse proxy ou un VPN. Tu pourras le réactiver proprement plus tard.

Écran Configurer l'accès à distance de Jellyfin avec la case connexions distantes

Crée ton compte admin, valide, c’est fini. Jellyfin tourne.


Organiser ta bibliothèque : le naming qui change tout

C’est la étape que tout le monde bâcle. Jellyfin identifie tes fichiers par leur nom. Un mauvais nommage = pas de poster, pas de synopsis, et le mauvais film dans la fiche.

Structure de dossiers recommandée

Films :

/media/movies/
├── Inception (2010)/
│   └── Inception (2010).mkv
├── The Matrix (1999)/
│   └── The Matrix (1999).mkv
├── Interstellar (2014)/
│   └── Interstellar (2014) - 1080p.mkv
└── Le Fabuleux Destin d'Amélie Poulain (2001)/
    └── Le Fabuleux Destin d'Amélie Poulain (2001).mkv

Règles :


Séries (structure optimale) :

/media/series/
├── Breaking Bad/
│   ├── Season 01/
│   │   ├── Breaking Bad - S01E01 - Pilot.mkv
│   │   ├── Breaking Bad - S01E02.mkv
│   │   └── Breaking Bad - S01E03.mkv
│   ├── Season 02/
│   │   ├── Breaking Bad - S02E01.mkv
│   │   └── ...
│   └── Season 05/
│       └── ...
└── Stranger Things/
    ├── Season 01/
    │   ├── Stranger Things - S01E01.mkv
    │   └── ...
    └── Season 04/
        └── ...

Le format SxxExx est non négociable. Episode 1.mkv ne sera jamais reconnu.

Le raccourci qui sauve : si ta collection est déjà un capharnaüm, FileBot renomme tout automatiquement en interrogeant TMDB. Une heure de boulot économisée par centaine de fichiers.

Scanner la bibliothèque

Après avoir renommé, force un scan :

Dashboard → Médiathèques → Analyser toutes les médiathèques

# Suivre le scan en direct
docker compose logs -f jellyfin | grep -i "library scan"

Compte environ 1 à 2 minutes pour 100 films (le temps de récupérer posters et synopsis sur TMDB). Sur Raspberry Pi, multiplie par trois.

Si un film reste sans poster : clique dessus → Modifier les métadonnées → Identifier → saisis le titre exact. Jellyfin réinterroge TMDB.


Accès HTTPS avec Nginx Proxy Manager

Jellyfin en http://192.168.1.x:8096, ça marche sur ton réseau local. Depuis l’extérieur, il te faut du HTTPS, sinon tes identifiants circulent en clair.

Le plus simple : Nginx Proxy Manager, qui gère les certificats Let’s Encrypt tout seul.

Configuration côté NPM :

  1. Hosts → Proxy Hosts → Add Proxy Host
  2. Domain Names : jellyfin.ton-domaine.fr
  3. Forward Hostname/IP : l’IP de ton serveur Jellyfin, Port : 8096
  4. Websockets Support : obligatoire (sinon la lecture se bloque au bout de 30 secondes)
  5. Onglet SSL → Request a new SSL Certificate + Force SSL
  6. Onglet Advanced, colle cette configuration :
# Augmenter les timeouts pour le streaming
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

# Pas de buffer pour le streaming en temps réel
proxy_buffering off;

# Headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
  1. Save → attends 30s → teste https://jellyfin.ton-domaine.fr

Pense aussi à renseigner l’URL publique dans Dashboard → Réseau → URL du serveur publiée, sinon les apps mobiles génèrent des liens en IP locale.

Ton Jellyfin est accessible en HTTPS.


Donner à Jellyfin le look Netflix

L’interface par défaut de Jellyfin est fonctionnelle mais austère. Bonne nouvelle : tout est modifiable en CSS, sans plugin, sans toucher au conteneur.

Où coller le CSS : Dashboard → Général → Custom CSS Code (pour tout le serveur) ou Paramètres utilisateur → Affichage → Custom CSS Code (juste pour ton compte).

Jellyfish (le plus maintenu) propose dix palettes dont une baptisée JellyFlix :

@import url("https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/theme.css");
@import url("https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/indicators.css");
@import url("https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/10.11_fixes.css");

La ligne 10.11_fixes.css est indispensable depuis Jellyfin 10.11. Sans elle, la barre de navigation part en vrac.

NetFin, plus radicalement Netflix (vignettes larges, fond noir profond) :

@import url("https://cdn.jsdelivr.net/gh/ya0903/NetFin@main/netfin.css");

Rafraîchis la page (Ctrl+F5) et c’est appliqué. Aucun redémarrage du conteneur nécessaire.

Le piège : un thème CSS tiers casse à chaque montée de version majeure de Jellyfin. JellyFlix, longtemps la référence, n’a pas survécu au passage en 10.11. Vérifie la date du dernier commit du dépôt avant d’adopter un thème, et garde le CSS dans un fichier texte pour pouvoir le retirer en un copier-coller.


Apps mobiles et clients

Mobile (Android et iOS)

Jellyfin officiel (recommandé) :

Alternatives tierces (parfois meilleures) :

Configuration :

  1. Lance l’app → Connexion manuelle
  2. URL : https://jellyfin.ton-domaine.fr
  3. Identifiants : ton compte Jellyfin
  4. Active le téléchargement hors ligne si tu veux regarder dans le train

TV (Android TV, Fire TV, Apple TV)

Android TV / Google TV / Fire TV :

Apple TV :

Roku :

Smart TV Samsung/LG :


Desktop (Windows, Mac, Linux)

Option 1 : navigateur (recommandé)

Option 2 : Jellyfin Desktop (si tu veux une vraie app)


Optimisations avancées

Activer le transcoding matériel

Si tu as un mini PC Intel avec Quick Sync :

  1. Dashboard → Lecture → Transcodage
  2. Chemin FFmpeg : /usr/lib/jellyfin-ffmpeg/ffmpeg (auto)
  3. Accélération matérielle : Intel QuickSync (QSV)
  4. Décodage matériel pour : H264, HEVC, VP9, AV1
  5. Encodage matériel pour : H264, HEVC
  6. Threads de transcodage : 0 (auto)
  7. Sauvegarder

Test : lance un film 4K sur mobile en 4G. Il doit transcoder en 720p instantanément, avec le CPU sous les 15% au lieu de 100%.


Sous-titres automatiques

Plugin OpenSubtitles :

  1. Dashboard → Plugins → Catalogue
  2. Installe : Open Subtitles
  3. Redémarre Jellyfin (obligatoire)
  4. Plugins → Open Subtitles → configure :
    • Crée un compte gratuit sur opensubtitles.com
    • Entre tes identifiants et ta clé API
    • Langue préférée : Français
  5. Utilisation : clique sur un film → Sous-titres → Rechercher → Jellyfin télécharge les .srt automatiquement

Intro Skip (sauter les génériques)

Plugin Intro Skipper :

  1. Plugins → Catalogue → installe Intro Skipper
  2. Redémarre
  3. Plugins → Intro Skipper :
    • Détection automatique des génériques
    • Bouton « Skip Intro » dans le player

Comme Netflix : tu sautes les génériques en un clic.

Intro Skipper suit les versions de Jellyfin d’assez près. Si tu épingles ta version comme conseillé plus haut, vérifie que le plugin existe pour cette version avant de mettre à jour.


Cas d’usage réels

Scénario 1 : famille (4 personnes)

Setup :

Collection :

Économie :

Usage :


Scénario 2 : cinéphile hardcore

Setup :

Collection :

Économie :

Usage :


Scénario 3 : colocation / famille élargie

Setup :

Utilisateurs :

Économie :

Pour éviter que les huit te réclament un film par SMS, Jellyseerr avec Docker leur donne une interface de demandes en libre-service.


Problèmes courants et solutions

« Playback Error » / erreur de lecture

Causes possibles :

  1. Format non supporté par le client → Solution : active le transcoding dans les paramètres Jellyfin
  2. Bande passante insuffisante → Solution : réduis la qualité (Dashboard → Lecture → Bitrate max : 8 Mbps)
  3. Transcoding qui plante (CPU trop faible) → Solution : active Direct Play, dans Paramètres utilisateur → Lecture → Qualité : Maximum

Transcoding ultra-lent (buffering constant)

Symptôme : le film lag toutes les 10 secondes.

Solution :

# Vérifier la charge CPU pendant le transcoding
docker stats jellyfin

# Si CPU à 100% constamment :
# → Ton serveur est trop faible pour transcoder en logiciel

Deux issues : activer le transcoding matériel (voir plus haut), ou forcer le Direct Play côté client pour que le serveur se contente d’envoyer le fichier tel quel.


Metadata en anglais au lieu de français

Tu as zappé l’écran « Langue de métadonnées » à l’installation. Ça se rattrape :

  1. Dashboard → Médiathèques → clique sur la bibliothèque concernée
  2. Langue préférée : Français, Pays : France
  3. Enregistre, puis ⋮ → Actualiser les métadonnées
  4. Coche Remplacer toutes les métadonnées, sinon Jellyfin garde l’existant

Un rafraîchissement complet sur 500 films prend un bon moment et tape sur l’API TMDB. Lance-le le soir.


Jellyfin inaccessible depuis l’extérieur

Dans l’ordre, vérifie :

  1. Le conteneur tourne :
docker compose ps
curl -I http://localhost:8096
  1. Le pare-feu laisse passer le reverse proxy :
sudo ufw allow 80
sudo ufw allow 443
  1. Le DNS : jellyfin.ton-domaine.fr pointe bien vers ton IP publique ?
  2. Les websockets sont activés dans Nginx Proxy Manager (cause n°1 des lectures qui se coupent)
  3. Dashboard → Réseau → Autoriser les connexions distantes est bien coché

Jellyfin : la pièce maîtresse de ton indépendance numérique

Bravo, tu as maintenant ton propre Netflix. Mais imagine un instant :

Tu te retrouves avec une stack d’indépendance numérique complète qui te coûte 0€/mois en abonnements. Le seul coût ? L’électricité de ton serveur, environ 5€/mois pour un mini PC.

Calcul rapide :

= environ 276€/an que tu peux économiser, sur ces trois services uniquement.

Consulte le guide complet d’indépendance numérique pour voir comment tout interconnecter proprement.

Bonus : le guide inclut une roadmap progressive pour ne pas te noyer dans la technique.


Légalité et éthique : ce qu’il faut savoir

Usages légaux en France

Tu as le DROIT de :

Tu n’as PAS le droit de :

Sources de contenu légales

Où trouver du contenu pour Jellyfin :

  1. Médiathèque municipale : emprunte des DVD/Blu-ray gratuitement, rippe-les
  2. Blu-ray d’occasion : Leboncoin, Vinted, Cash Converters (3-5€/film)
  3. VOD sans DRM : Arte Boutique, Vimeo On Demand (téléchargement MP4)
  4. Archives personnelles : vidéos de vacances, films de famille
  5. Creative Commons : Archive.org, films tombés dans le domaine public

Outil de rip légal : MakeMKV


Conclusion : ton Netflix à toi, pour toujours

Tu viens de monter ton propre service de streaming en 30 minutes. Jellyfin avec Docker, c’est :

Prochaines étapes suggérées :

  1. Organise ta bibliothèque : renomme tes fichiers proprement, FileBot fait ça très bien
  2. Invite ta famille : crée des comptes utilisateurs (Dashboard → Utilisateurs)
  3. Automatise les backups : sauvegarde /config et ta liste de films
  4. Explore les plugins : Intro Skipper, OpenSubtitles, Trakt…
  5. Complète ta stack média : si tu lis aussi des ebooks ou des mangas, Kavita avec Docker gère les ebooks et Komga avec Docker les BD et mangas. Et pour streamer tes jeux PC vers la TV du salon, il y a Sunshine Docker avec Moonlight.

Et surtout, profite de ces 396€/an dans ta poche au lieu de les filer à Netflix.

Précédent
Maccy macOS : presse-papiers open-source avec historique et recherche
Suivant
Numi macOS : calculatrice textuelle qui comprend le langage naturel