Guide de déploiement

Migrer de Plex vers Jellyfin après le paywall de juillet 2026

Déployer sur un VPS Cloud →

Tutoriel

Self-hosting

Migrer de Plex vers Jellyfin après le paywall de juillet 2026

Le streaming distant de vos médias personnels n'est plus gratuit chez Plex : il faut un Plex Pass sur le compte administrateur du serveur, ou un Remote Watch Pass pour chaque spectateur, renouvelé à 2,99 $ par mois depuis le 1er juin 2026. Jellyfin remplace Plex pour la vidéo, sans paywall ni compte obligatoire, sur votre propre VPS ; Navidrome prend le relais pour la musique si vous voulez quitter Plex entièrement. Vos fichiers restent en place : seule la couche serveur change, et vos appareils se reconnectent avec les applications Jellyfin ou un client tiers comme Infuse.

16 min de lecture14 étapes
Sommaire· Pourquoi quitter Plex maintenant1/13
  1. 01Pourquoi quitter Plex maintenant
  2. 02Les failles de Plex en 2026 : mettre à jour pendant la transition
  3. 03Ce que Jellyfin apporte concrètement
  4. 04Prérequis avant de commencer
  5. 05Migration pas à pas
  6. 06Exposer Jellyfin avec Nginx plutôt que Caddy
  7. 07Et la musique ? Passer de Plexamp à Navidrome
  8. 08Migrer la bibliothèque musicale vers Navidrome
  9. 09Plex, Jellyfin et Navidrome : comparatif fonctionnel
  10. 10Configuration post-installation recommandée
  11. 11Sécuriser l'accès Jellyfin
  12. 12Dépannage : erreurs fréquentes après migration
  13. 13Aller plus loin : liens utiles et maillage

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

  1. 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.

  2. 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.

  3. Arrêter proprement Plex

    Arrêtez le conteneur ou le service Plex :

    docker compose stop plex

    Ou, si Plex tourne via systemd :

    systemctl stop plexmediaserver

    Libérez le port 32400 ; Jellyfin utilisera le 8096 par défaut, vous pouvez donc laisser le port Plex libre ou le fermer dans votre pare-feu.

  4. 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/cache

    Vos médias restent à leur emplacement d'origine — ne les déplacez pas. Jellyfin les déclarera comme bibliothèques dans l'assistant initial.

  5. Rédiger le fichier docker-compose.yml

    Créez /opt/jellyfin/docker-compose.yml avec 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"
    EOF

    Adaptez /mnt/media au 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.

  6. Démarrer Jellyfin et ouvrir l'assistant

    Lancez le conteneur :

    docker compose -f /opt/jellyfin/docker-compose.yml up -d

    Ouvrez http://votre-ip:8096 dans 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.

  7. 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-IP et X-Forwarded-For que Jellyfin utilise pour les logs d'accès.

  8. 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.

  9. 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.

  10. 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/plexmediaserver

    En Docker, docker compose down puis 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 nginx

Ne 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

  1. Auditer les tags des fichiers

    Navidrome classe la musique d'après les métadonnées embarquées dans les fichiers, pas d'après les dossiers. Vérifiez un échantillon :

    find /mnt/media/musique -name '*.mp3' | head -20 | xargs -d '\n' id3v2 -l

    Les champs TPE1 (artiste), TALB (album) et TIT2 (titre) doivent être remplis. Un fichier sans ces tags est importé, mais il s'affiche mal. Pour corriger en masse, l'outil libre beets réétiquette une collection à partir de la base MusicBrainz.

  2. Déployer Navidrome avec Docker Compose

    Le fichier suit l'exemple de la documentation Navidrome : image officielle navidrome/navidrome, utilisateur non root, musique montée en lecture seule.

    mkdir -p /opt/navidrome/data
    cat > /opt/navidrome/docker-compose.yml << 'EOF'
    services:
      navidrome:
        image: navidrome/navidrome:latest
        container_name: navidrome
        user: 1000:1000
        restart: unless-stopped
        ports:
          - "127.0.0.1:4533:4533"
        environment:
          ND_LOGLEVEL: info
        volumes:
          - /opt/navidrome/data:/data
          - /mnt/media/musique:/music:ro
    EOF
    docker compose -f /opt/navidrome/docker-compose.yml up -d

    La directive user doit désigner l'UID:GID propriétaire de /opt/navidrome/data (id -u et id -g vous les donnent) ; les variables PUID/PGID n'ont aucun effet ici. Sans elle, le conteneur tourne en root.

  3. Créer le compte administrateur et brancher les clients

    Ouvrez Navidrome derrière votre reverse proxy (sous-domaine dédié, port 4533 en 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.

  4. Récupérer vos playlists

    Navidrome importe automatiquement les fichiers .m3u qu'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)JellyfinNavidrome
Streaming local (réseau maison)OuiOuiOui (musique)
Streaming distant de vidéosPayant (Remote Watch Pass, 2,99 $/mois, ou Plex Pass)GratuitSans objet (audio seulement)
Streaming distant de musiqueGratuit dans PlexampGratuitGratuit
Compte externe obligatoireOui (plex.tv)NonNon
Licence du codePropriétaireGPL-2.0GPL-3.0
ClientsApplications Plex et PlexampApplications Jellyfin officielles, InfuseTout client compatible Subsonic
Transcodage matérielPayant (Plex Pass requis)Gratuit (Quick Sync, VAAPI, NVENC)Sans objet (transcodage audio logiciel)
Invités en streaming distantPlex Pass de l'admin ou Remote Watch Pass par invitéSans plafond, comptes locauxSans 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/health

Si 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é).

Votre serveur Jellyfin en quelques minutes

Le template Jellyfin sur ServOrbit déploie un environnement Docker préconfigré sur un VPS dédié : accès root, IP dédiée, reverse proxy prêt. Vous importez votre bibliothèque le jour même.