Pourquoi quitter Plex maintenant
Pendant des années, Plex laissait regarder sa médiathèque hors de chez soi sans payer. Ce n'est plus le cas : selon la page des offres Plex, le streaming distant de contenus personnels exige soit un Plex Pass sur le compte administrateur du serveur, soit un Remote Watch Pass sur le compte de chaque spectateur. Ce second abonnement, lancé à prix d'introduction, se renouvelle depuis le 1er juin 2026 à 2,99 $ par mois ou 29,99 $ par an. Le refus d'accès depuis un mobile ou chez un proche est souvent le déclencheur : on cherche une sortie immédiate, pas une évaluation longue.
Jellyfin est la réponse directe. C'est un fork communautaire de la base de code Emby, publié sous licence GPL-2.0, sans compte obligatoire, sans télémétrie et sans fonction bridée derrière un mur payant. Il n'imite pas l'API de Plex : il expose sa propre API, servie par les applications Jellyfin officielles (Android, iOS, Android TV, Roku, webOS, Tizen, Xbox) et par des clients tiers qui la prennent en charge nativement, comme Infuse. Les fichiers médias ne bougent pas : seule la couche serveur change.
Les failles de Plex en 2026 : mettre à jour pendant la transition
La migration prend quelques heures ou quelques jours, et Plex tourne encore pendant ce temps. Ne le laissez pas sur une version ancienne : deux vulnérabilités corrigées à partir de la build 1.43.3.10861 ont reçu leurs identifiants le 23 septembre 2026.
CVE-2026-96656 (CVSS 3.1 : 7,2) permet à un compte administrateur d'écrire des fichiers exécutés au chargement : la préférence TranscoderH264Options est recopiée telle quelle dans les options de x264, et les bibliothèques .so sont chargées au démarrage sans contrôle de signature ni de bit d'exécution. La CISA l'a inscrite le 20 octobre 2026 à son catalogue des vulnérabilités activement exploitées.
CVE-2026-96651 (CWE-22, CVSS 3.1 : 6,5) est une traversée de répertoires sur /system/agents/media/get : une session authentifiée lit n'importe quel fichier accessible à l'utilisateur système de Plex, y compris le jeton PlexOnlineToken, qui donne la main sur le compte et le serveur.
Enchaînées, les deux failles mènent du vol de session à l'exécution de code. Mettez Plex à jour avant de commencer, gardez son port fermé à Internet le temps de la bascule, et appliquez les correctifs système du VPS en parallèle (cf. les mises à jour de sécurité automatiques sous Debian et Ubuntu). Pour Jellyfin, le réflexe est le même : suivez les releases et rafraîchissez l'image régulièrement.
Ce que Jellyfin apporte concrètement
- Zéro paywall — l'accès distant, les comptes multi-utilisateurs et le transcodage sont disponibles sans abonnement ni Pass à vie.
- Aucun compte obligatoire — l'installation ne demande pas de lier un service externe ; la gestion des utilisateurs est entièrement locale.
- Zéro telemetry — aucune donnée d'usage n'est envoyée à un tiers par défaut ; le code est auditable (GPL-2.0).
- Clients compatibles — les applications Jellyfin officielles et des clients tiers comme Infuse se connectent au serveur par son URL, sans compte externe ni service de relais.
- Les fichiers médias restent en place — seule la base de métadonnées est à reconstituer ; le stockage n'est pas touché.
- Clients natifs disponibles — Android, iOS, Android TV, Apple TV, navigateur web, et des dizaines d'applications tierces supportent Jellyfin nativement.
- Transcodage matériel supporté — Intel Quick Sync, VAAPI et NVENC sont configurables pour réduire la charge CPU sur les flux haute définition.
- Communauté active et mises à jour régulières — publication fréquente, plugins communautaires, et documentation officielle complète.
Prérequis avant de commencer
La migration suppose que vous avez déjà un VPS avec Docker installé. Jellyfin en Direct Play (les appareils lisent le fichier sans transcodage) tourne correctement avec 2 vCPU et 2 Go de RAM. Si vous anticipez du transcodage logiciel 1080p, comptez 4 vCPU minimum par flux simultané : Jellyfin sollicite fortement le CPU sans accélération matérielle. Pour du 4K, un GPU ou une puce Intel avec Quick Sync sont fortement recommandés.
Le stockage est le poste dimensionnant : une médiathèque de taille moyenne pèse plusieurs téraoctets. Vos fichiers médias restent là où ils sont — il n'y a aucune copie à faire. Côté réseau, votre domaine doit pointer vers le VPS et le port 8096 doit être accessible en interne (le reverse proxy s'occupe de l'exposition HTTPS).
Ce qu'il vous faut en résumé : un VPS sous Linux (Debian 12 ou Ubuntu 22.04+), Docker et docker compose v2, un domaine configuré, un reverse proxy (Caddy ou Nginx), et l'accès SSH au serveur.
Avant de toucher à quoi que ce soit, prenez un instantané (snapshot) du VPS depuis votre panneau d'hébergement : c'est le filet qui permet de revenir à l'état Plex en quelques minutes si la bascule tourne mal. La dernière version de Jellyfin au 7 novembre 2026 est la 12.4 (publiée le 26 octobre 2026) ; l'image jellyfin/jellyfin:latest la suit.
Migration pas à pas
Prendre un instantané du VPS
Créez un snapshot depuis le panneau de votre hébergeur (ou par son API) avant toute manipulation. L'opération ne prend que quelques minutes et protège à la fois la configuration Plex, les métadonnées et le système. Ne sautez pas cette étape : c'est elle qui rend la suite réversible.
Exporter vos données Plex avant d'arrêter le service
Avant toute chose, exportez votre bibliothèque Plex pendant qu'elle fonctionne encore. Depuis le serveur Plex, copiez le dossier de métadonnées (
~/.config/Plex Media Server/sur Linux,/var/lib/plexmediaserver/selon l'installation). Cette sauvegarde vous permet de retrouver listes de lecture, progrès de lecture et notes si vous décidez un jour de revenir.Vos fichiers médias (
/mnt/media/films,/mnt/media/series, etc.) ne bougent pas — ne les déplacez pas.Arrêter proprement Plex
Arrêtez le conteneur ou le service Plex :
docker compose stop plexOu, si Plex tourne via systemd :
systemctl stop plexmediaserverLibérez le port
32400; Jellyfin utilisera le8096par défaut, vous pouvez donc laisser le port Plex libre ou le fermer dans votre pare-feu.Créer la structure de dossiers Jellyfin
Créez les dossiers de configuration et de cache que Jellyfin va utiliser :
mkdir -p /opt/jellyfin/config /opt/jellyfin/cacheVos médias restent à leur emplacement d'origine — ne les déplacez pas. Jellyfin les déclarera comme bibliothèques dans l'assistant initial.
Rédiger le fichier docker-compose.yml
Créez
/opt/jellyfin/docker-compose.ymlavec le contenu suivant :cat > /opt/jellyfin/docker-compose.yml << 'EOF' services: jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin restart: unless-stopped environment: - JELLYFIN_PublishedServerUrl=https://media.yourdomain.com volumes: - /opt/jellyfin/config:/config - /opt/jellyfin/cache:/cache - /mnt/media:/media:ro ports: - "127.0.0.1:8096:8096" EOFAdaptez
/mnt/mediaau chemin réel de vos médias. Le:ro(lecture seule) est une bonne pratique : Jellyfin n'a pas besoin d'écrire dans vos fichiers médias.Démarrer Jellyfin et ouvrir l'assistant
Lancez le conteneur :
docker compose -f /opt/jellyfin/docker-compose.yml up -dOuvrez
http://votre-ip:8096dans un navigateur. L'assistant vous demande de créer un compte administrateur local (aucune adresse e-mail externe requise), puis de déclarer vos bibliothèques. Pointez vers vos dossiers médias existants (/media/films,/media/series, etc.) — Jellyfin lance un scan automatique et reconstruit les métadonnées depuis TheMovieDB et TheTVDB.Configurer le reverse proxy avec SSL
Exposez Jellyfin en HTTPS via Caddy ou Nginx. Exemple Caddy (fichier
Caddyfile) :media.yourdomain.com { reverse_proxy 127.0.0.1:8096 }Caddy obtient et renouvelle le certificat Let's Encrypt automatiquement. Avec Nginx, ajoutez les en-têtes
X-Real-IPetX-Forwarded-Forque Jellyfin utilise pour les logs d'accès.Reconfigurer vos clients et activer l'accès distant
Dans Jellyfin (Tableau de bord → Réseau), vérifiez que l'URL publiée (
JELLYFIN_PublishedServerUrl) est correcte. Installez l'application Jellyfin de chaque appareil (Android, iOS, Android TV, Roku, téléviseurs LG et Samsung, Xbox) et ajoutez le serveur par son URL. Sur iPhone, iPad et Apple TV, Infuse sait aussi se connecter à Jellyfin : selon la documentation de Firecore, passez par « Ajouter un serveur multimédia » et choisissez Jellyfin, avec une connexion directe au serveur. Plexamp, en revanche, reste un lecteur réservé à Plex : la musique passe par Navidrome (voir plus bas).Vérifiez l'accès depuis une connexion mobile (pas votre Wi-Fi) pour confirmer que l'accès distant fonctionne sans restriction.
Reprendre l'historique de visionnage (optionnel)
Jellyfin ne lit pas la base SQLite de Plex. Pour l'historique « vu / en cours », l'outil communautaire JellyPlex-Watched synchronise localement les statuts entre Plex et Jellyfin, utilisateur par utilisateur, en rapprochant les fichiers par leur nom et par les identifiants de métadonnées (TMDB, TVDB). Lancez-le pendant que les deux serveurs sont démarrés : redémarrez Plex le temps de la synchronisation, puis arrêtez-le de nouveau.
Les listes de lecture vidéo se recréent à la main dans l'interface Jellyfin ; quelques minutes suffisent pour un usage familial.
Garder Plex en réserve, puis le désinstaller
Laissez Plex arrêté mais installé pendant au moins 48 heures, le temps de valider Jellyfin sur chaque appareil de la maison. Une fois sûr de vous, retirez le paquet et sa configuration :
systemctl disable --now plexmediaserver apt remove --purge plexmediaserver rm -rf /var/lib/plexmediaserverEn Docker,
docker compose downpuis la suppression du dossier de configuration de Plex font le même travail. Le snapshot de l'étape 1 reste votre retour arrière jusqu'à ce point.
Exposer Jellyfin avec Nginx plutôt que Caddy
Si votre VPS sert déjà d'autres sites avec Nginx, gardez-le. La configuration ci-dessous reprend les directives recommandées par la documentation Jellyfin : redirection HTTP vers HTTPS, en-têtes X-Forwarded-*, tampon désactivé pour les flux, et un bloc /socket dédié aux WebSockets qu'utilisent les clients pour la lecture synchronisée et les notifications.
# /etc/nginx/sites-available/jellyfin
server {
listen 80;
server_name media.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name media.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/media.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/media.yourdomain.com/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2;
client_max_body_size 20M;
add_header X-Content-Type-Options "nosniff";
location / {
proxy_pass http://127.0.0.1:8096;
proxy_set_header Host $host;
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 $http_host;
proxy_buffering off;
}
location /socket {
proxy_pass http://127.0.0.1:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Le certificat s'obtient avec Certbot (le bloc du port 80 doit rester en place pour ses renouvellements), ou via votre CDN en mode Full (strict). Activez le site puis rechargez Nginx :
ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginxNe publiez jamais le port 8096 directement sur Internet : le mapping 127.0.0.1:8096:8096 du fichier Compose garantit que seul Nginx le joint. Pour Navidrome, dupliquez le bloc avec un autre sous-domaine et le port 4533.
Et la musique ? Passer de Plexamp à Navidrome
Jellyfin sait lire de la musique, mais ce n'est pas son point fort. Si vous écoutiez votre discothèque avec Plexamp, notez que le paywall Plex ne vise que la vidéo : d'après la page des offres de Plex, la musique et les photos restent accessibles à distance dans Plexamp et Plex Photos sans abonnement. Navidrome devient donc utile quand vous voulez quitter Plex entièrement. C'est un serveur de musique libre (GPL-3.0, écrit en Go), compatible avec l'API Subsonic : tous les clients Subsonic, Madsonic et Airsonic s'y connectent, sur mobile comme sur ordinateur. Il transcode à la volée, gère l'Opus et importe automatiquement les playlists .m3u. La version courante au 7 novembre 2026 est la 0.64.2. Le guide héberger Navidrome sur un VPS détaille une installation complète ; voici la bascule depuis Plex.
Migrer la bibliothèque musicale vers Navidrome
Créer le compte administrateur et brancher les clients
Ouvrez Navidrome derrière votre reverse proxy (sous-domaine dédié, port
4533en interne). Le premier compte créé est l'administrateur. Le premier scan de la bibliothèque démarre seul au lancement du conteneur ; suivez-le dans les journaux (docker logs navidrome). Sur mobile, n'importe quel client compatible Subsonic fait l'affaire : saisissez l'URL HTTPS, l'identifiant et le mot de passe.Récupérer vos playlists
Navidrome importe automatiquement les fichiers
.m3uqu'il trouve dans la bibliothèque et les tient à jour. Exportez donc vos playlists Plex au format.m3u, avec des chemins relatifs à la racine musicale, et déposez-les dans/mnt/media/musique: elles apparaissent au scan suivant. À défaut, recréez-les dans l'interface web, qui accepte aussi le glisser-déposer de pistes.
Plex, Jellyfin et Navidrome : comparatif fonctionnel
Faites défiler le tableau
| Fonctionnalité | Plex (sans Pass) | Jellyfin | Navidrome |
|---|---|---|---|
| Streaming local (réseau maison) | Oui | Oui | Oui (musique) |
| Streaming distant de vidéos | Payant (Remote Watch Pass, 2,99 $/mois, ou Plex Pass) | Gratuit | Sans objet (audio seulement) |
| Streaming distant de musique | Gratuit dans Plexamp | Gratuit | Gratuit |
| Compte externe obligatoire | Oui (plex.tv) | Non | Non |
| Licence du code | Propriétaire | GPL-2.0 | GPL-3.0 |
| Clients | Applications Plex et Plexamp | Applications Jellyfin officielles, Infuse | Tout client compatible Subsonic |
| Transcodage matériel | Payant (Plex Pass requis) | Gratuit (Quick Sync, VAAPI, NVENC) | Sans objet (transcodage audio logiciel) |
| Invités en streaming distant | Plex Pass de l'admin ou Remote Watch Pass par invité | Sans plafond, comptes locaux | Sans plafond, comptes locaux |
Configuration post-installation recommandée
Une fois la migration terminée, quelques réglages améliorent l'expérience au quotidien.
Métadonnées. Jellyfin utilise TheMovieDB et TheTVDB par défaut. Si certains films ou séries ne sont pas reconnus automatiquement, renommez les fichiers selon la convention Titre (Année)/Titre (Année).mkv pour les films et Série/Saison 01/Série - S01E01.mkv pour les séries — Jellyfin applique ces conventions lors du scan.
Sous-titres. Activez OpenSubtitles ou sous-titres intégrés dans Tableau de bord → Plugins. La récupération est automatique lors du scan de la bibliothèque.
Transcodage matériel. Si votre VPS dispose d'une puce Intel, activez VAAPI dans Tableau de bord → Lecture → Transcodage. Cela réduit significativement la charge CPU lors des conversions de flux.
Sécuriser l'accès Jellyfin
Une fois derrière votre reverse proxy, Jellyfin expose son écran de connexion à tout Internet. Quelques mesures dès la mise en ligne : créez un compte par personne depuis Tableau de bord → Utilisateurs, sans droits d'administration pour les comptes de la famille, et supprimez ceux qui ne servent plus. Jellyfin n'embarque pas de double authentification : si vous en voulez une, placez un fournisseur d'identité (Authelia, Authentik) devant l'interface. Limitez l'accès au tableau de bord au réseau local si possible et, avec Nginx, posez un rate-limit sur /Users/AuthenticateByName pour freiner la force brute. Enfin, maintenez l'image à jour : docker compose pull && docker compose up -d récupère les correctifs de sécurité.
Dépannage : erreurs fréquentes après migration
Quelques erreurs reviennent systématiquement lors d'une migration Plex → Jellyfin.
Connection refused sur le port 8096. Le conteneur est démarré mais rien ne répond. Vérifiez que le mapping de port est bien 127.0.0.1:8096:8096 et non 0.0.0.0:8096:8096 si vous voulez passer par le reverse proxy. Commande de diagnostic : docker logs jellyfin.
Les métadonnées ne se chargent pas. Le scan initial peut durer de 10 minutes à plusieurs heures selon la taille de la bibliothèque. Surveillez la progression dans Tableau de bord → Activité. Si des fichiers restent sans affiches, vérifiez que le nom de fichier respecte la convention et forcez un nouveau scan avec « Analyser les métadonnées ».
L'accès distant ne fonctionne pas. Si https://media.yourdomain.com répond depuis le serveur mais pas depuis l'extérieur, vérifiez que le pare-feu autorise le port 443 (ufw allow 443), que le DNS pointe vers la bonne IP, et que la variable JELLYFIN_PublishedServerUrl correspond exactement à l'URL publique configurée dans le reverse proxy.
Infuse ne trouve pas le serveur. Ajoutez-le comme serveur Jellyfin, pas comme serveur Plex, et saisissez l'URL HTTPS complète à la main. La découverte automatique ne fonctionne que sur le réseau local ; à distance, l'URL manuelle est la seule voie fiable.
Le transcodage CPU monte à 100 %. Sans accélération matérielle, un seul flux 4K transcode peut saturer plusieurs cœurs. Passez en VAAPI si votre processeur le supporte, ou encouragez vos utilisateurs à activer le Direct Play dans les réglages de leur client.
La bibliothèque reste vide après le premier scan. Le chemin monté dans Docker ne correspond pas au dossier réel. Vérifiez ce que voit le conteneur, puis l'état du service à travers le proxy :
docker exec jellyfin ls /media
curl -s https://media.yourdomain.com/healthSi ls ne liste rien, corrigez le volume dans docker-compose.yml et relancez le conteneur ; /health doit répondre Healthy.
Le transcodage échoue avec une erreur ffmpeg. C'est presque toujours le transcodage matériel activé sur un VPS qui n'expose pas de GPU au conteneur. Désactivez l'accélération dans Tableau de bord → Lecture et laissez Jellyfin transcoder en logiciel : sur un VPS sans GPU, c'est la configuration normale.
Aller plus loin : liens utiles et maillage
La migration couvre le remplacement de Plex, mais Jellyfin s'intègre dans un écosystème plus large. Si vous partez de zéro (sans Plex préalable), le guide Héberger Jellyfin sur votre propre VPS couvre l'installation initiale depuis le début. Pour un comparatif fonctionnel approfondi entre les deux plateformes, consultez Jellyfin vs Plex : quel serveur multimédia choisir. Pour la musique, le guide Navidrome va plus loin que la bascule décrite ici.
Si cette migration fait partie d'un mouvement plus large vers le self-hosting pour réduire vos coûts SaaS, héberger Ghost sur votre VPS couvre un autre cas courant. La logique est la même : un logiciel libre, un VPS, un accès dont vous contrôlez les règles.
La documentation officielle Jellyfin (jellyfin.org/docs) est complète et maintenue activement — c'est la référence pour les cas avancés (transcodage matériel, LDAP, plugins, reverse proxy avancé).