Tutoriel

Migrer Plex vers Jellyfin et Navidrome sur VPS

Self-hosting8 min de lecture12 étapes

En septembre 2026, la fondation Shadowserver a recensé plus de 36 000 instances Plex exposées sur internet et tournant encore sur des versions antérieures à 1.43.3 — la version qui corrige deux vulnérabilités critiques permettant l'écriture de fichiers arbitraires et la traversée de répertoires. Si vous hébergez Plex sur un VPS root, la fenêtre d'exposition est réelle et documentée. Ce guide vous montre comment basculer vers Jellyfin (vidéo) et Navidrome (musique) sans perdre vos bibliothèques, vos métadonnées ni vos playlists, et pourquoi le coût de cette migration est inférieur au risque de rester.

Sommaire· Pourquoi quitter Plex en 2026 : 36 000 serveurs exposés1/9
  1. 01Pourquoi quitter Plex en 2026 : 36 000 serveurs exposés
  2. 02Ce que Plex cache derrière son modèle cloud
  3. 03Prérequis avant de commencer la migration
  4. 04Migration Plex → Jellyfin : procédure étape par étape
  5. 05Migration musicale : Plex → Navidrome
  6. 06Comparaison Plex, Jellyfin et Navidrome
  7. 07Configuration Nginx en reverse proxy pour Jellyfin
  8. 08Dépannage : les 3 erreurs les plus fréquentes
  9. 09Conclusion

Pourquoi quitter Plex en 2026 : 36 000 serveurs exposés

Le 9 septembre 2026, Shadowserver a publié ses relevés : plus de 36 000 serveurs Plex accessibles depuis internet n'avaient pas appliqué la mise à jour 1.43.3, disponible pourtant depuis le 19 mai. Deux CVE sont au cœur de cet avis. CVE-2026-96656 (CVSS 7.2) permet à un attaquant ayant des droits d'administration d'écrire des fichiers arbitraires exécutés au démarrage — concrètement, charger un plugin malveillant qui dépose un rootkit, sans vérification de signature ni de bit d'exécution. CVE-2026-96651 (CWE-22, path traversal) autorise toute session authentifiée à lire n'importe quel fichier accessible par l'utilisateur système Plex, y compris le jeton PlexOnlineToken. Combinées, ces deux failles couvrent un scénario d'escalade complet : vol de session, puis exécution de code. Plex a corrigé les deux dans la build 1.43.3.10861 ; la build 1.43.3.10896 est la cible recommandée. Le problème structurel reste : Plex est un logiciel propriétaire dont le cycle de patch dépend d'un seul éditeur, et 36 000 administrateurs n'ont pas appliqué un correctif vieux de quatre mois.

Ce que Plex cache derrière son modèle cloud

Plex propose une interface soignée, mais son modèle cloud introduit des dépendances cachées qui deviennent problématiques en cas de patch de sécurité ou d'abandon de service.

  • Accès distant via Plex Relay : chaque flux transite par les serveurs plex.tv, même si votre VPS est le seul à stocker les fichiers. Plex voit vos métadonnées de lecture.
  • Plex Pass obligatoire pour les fonctions clés : synchronisation hors ligne, accès multi-utilisateurs complet, Live TV et accès distant sans port forwarding sont réservés aux abonnés payants.
  • Authentification centralisée : la connexion de vos clients passe par les serveurs Plex. Une panne plex.tv vous coupe de vos propres fichiers.
  • Mise à jour non contrôlée : Plex peut déployer des changements côté serveur (relay, authentification) sans que vous puissiez les auditer ni les bloquer.
  • Télémétrie active par défaut : lecture, recherches et habitudes de visionnage remontent vers l'éditeur sauf désactivation manuelle dans chaque client.

Prérequis avant de commencer la migration

Cette procédure cible un VPS root sous Debian 12 ou Ubuntu 22.04 LTS. Vous avez besoin d'un accès SSH root ou sudo, de Docker et Docker Compose installés (v2+), et d'un répertoire de médias accessible en lecture. Prévoyez un snapshot de votre VPS avant de démarrer — les snapshots sont réversibles en une commande et coûtent moins d'une heure de calcul. Jellyfin remplace la bibliothèque vidéo ; Navidrome remplace la bibliothèque musicale. Les deux sont open source, sans abonnement, et s'exposent derrière un reverse proxy Nginx.

Migration Plex → Jellyfin : procédure étape par étape

Voici la procédure complète pour migrer votre bibliothèque Plex vers Jellyfin sans perdre vos données ni votre historique de lecture.

  1. Créer un snapshot VPS

    Avant tout : snapshot create plex-before-migration depuis votre panneau fournisseur (ou équivalent API). Cette étape est le filet de sécurité ; ne la sautez pas.

  2. Arrêter Plex proprement

    systemctl stop plexmediaserver
    systemctl disable plexmediaserver

    Attendez la confirmation de l'arrêt avant de continuer. Plex ne doit plus écouter sur le port 32400.

  3. Installer Jellyfin via Docker Compose

    # /opt/jellyfin/docker-compose.yml
    services:
      jellyfin:
        image: jellyfin/jellyfin:latest
        container_name: jellyfin
        restart: unless-stopped
        ports:
          - "8096:8096"
        volumes:
          - /opt/jellyfin/config:/config
          - /opt/jellyfin/cache:/cache
          - /data/media:/media:ro
        environment:
          - JELLYFIN_PublishedServerUrl=https://jellyfin.votre-domaine.com

    Remplacez /data/media par le chemin exact de vos fichiers médias. Le volume est monté en lecture seule (:ro) par précaution.

  4. Démarrer Jellyfin et lancer l'assistant d'initialisation

    cd /opt/jellyfin && docker compose up -d

    Accédez à http://IP-DU-VPS:8096 pour l'assistant web. Créez le compte administrateur, puis ajoutez vos bibliothèques en pointant vers /media/films, /media/series, etc.

  5. Scanner les bibliothèques et vérifier les métadonnées

    Jellyfin utilise The Movie Database (TMDB) et TheTVDB par défaut. Le premier scan complet prend entre 5 et 30 minutes selon la taille de votre bibliothèque. Vérifiez que les jaquettes, les synopsis et les notes s'affichent correctement. Si une œuvre n'est pas reconnue automatiquement, utilisez la fonction "Identifier" pour forcer la correspondance.

  6. Configurer les clients Jellyfin

    Les applications officielles Jellyfin existent sur Android, iOS, Apple TV, Android TV, Roku et les navigateurs. Elles sont gratuites et open source. Pointez chaque client vers l'URL interne ou publique de votre serveur — aucune authentification tierce n'est requise.

  7. Vérifier les transcoding et les sous-titres

    Dans Tableau de bord > Lecture, activez le transcoding matériel si votre VPS dispose d'un GPU (Intel Quick Sync, NVIDIA NVENC). Testez un fichier H.265 depuis un client mobile pour valider que le transcodage logiciel fonctionne en fallback. Vérifiez également que les sous-titres SRT et ASS/SSA s'affichent.

  8. Supprimer Plex

    apt remove plexmediaserver --purge
    rm -rf /var/lib/plexmediaserver

    Ne supprimez l'ancienne installation qu'après avoir validé Jellyfin sur au moins un client pendant 48 heures.

Migration musicale : Plex → Navidrome

Navidrome est un serveur de musique open source compatible avec l'API Subsonic, ce qui lui ouvre l'accès à l'ensemble de l'écosystème de clients (DSub, Symfonium, Ultrasonic, Airsonic, etc.). Il lit les tags ID3 v2.3 et v2.4, les fichiers FLAC, MP3, AAC, OGG et Opus. Les playlists M3U présentes dans votre répertoire de musique sont importées automatiquement à condition que les chemins soient relatifs à la racine musicale.

  1. Vérifier la structure des dossiers

    Navidrome s'attend à une hiérarchie Artiste/Album/Piste.mp3. Si vos fichiers sont déjà organisés ainsi (ce qu'impose également Plex), aucune réorganisation n'est nécessaire. Vérifiez l'absence de caractères spéciaux dans les noms de dossiers (/, :, ?).

  2. Auditer les tags ID3

    find /data/music -name '*.mp3' | head -20 | xargs id3v2 -l

    Les champs TPE1 (artiste), TALB (album) et TIT2 (titre) doivent être renseignés. Un fichier sans ces trois tags sera importé mais sans métadonnée affichable. L'outil beets peut corriger les tags manquants en masse via sa base MusicBrainz.

  3. Déployer Navidrome via Docker Compose

    # /opt/navidrome/docker-compose.yml
    services:
      navidrome:
        image: deluan/navidrome:latest
        container_name: navidrome
        restart: unless-stopped
        ports:
          - "4533:4533"
        volumes:
          - /opt/navidrome/data:/data
          - /data/music:/music:ro
        environment:
          - ND_SCANSCHEDULE=1h
          - ND_LOGLEVEL=info
          - ND_BASEURL=

    Démarrez avec docker compose up -d puis accédez à http://IP:4533 pour créer le premier compte.

  4. Migrer les playlists Plex

    Plex n'exporte pas les playlists au format M3U nativement depuis l'interface. Utilisez l'outil plexapi (Python) pour exporter : python3 -m plexapi.playlist export --token VOTRE_TOKEN --output /data/music/playlists/. Les fichiers M3U générés sont importés automatiquement par Navidrome si les chemins sont relatifs au volume /music.

Comparaison Plex, Jellyfin et Navidrome

Le tableau suivant compare les critères essentiels pour choisir entre Plex, Jellyfin et Navidrome.

Faites défiler le tableau

CritèrePlexJellyfinNavidrome
LicencePropriétaire (freemium)GPL-2.0 open sourceGPL-3.0 open source
Accès distant sans abonnementNon (Plex Pass requis)Oui, natifOui, natif
Authentification tierce requiseOui (plex.tv)NonNon
Bibliothèque vidéoOuiOuiNon (musique uniquement)
Bibliothèque musicaleOui (limité)PartielOui (spécialisé)
Transcoding matérielPlex Pass requisNatif (NVENC, QSV, VAAPI)N/A (audio seulement)
Clients mobiles officielsPayants sur iOS/AndroidGratuits, open sourceClients tiers Subsonic
Dépendance cloudForte (relay, auth)AucuneAucune

Configuration Nginx en reverse proxy pour Jellyfin

Jellyfin doit être exposé via HTTPS. La configuration ci-dessous suppose un certificat Let's Encrypt géré par Certbot ou par votre CDN en mode Full (strict). N'exposez jamais le port 8096 directement — passez toujours par Nginx.

# /etc/nginx/sites-available/jellyfin
server {
    listen 80;
    server_name jellyfin.votre-domaine.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name jellyfin.votre-domaine.com;

    ssl_certificate /etc/letsencrypt/live/jellyfin.votre-domaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jellyfin.votre-domaine.com/privkey.pem;

    # Headers de sécurité
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

    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;

        # WebSocket pour la diffusion
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Buffers pour les flux vidéo
        proxy_buffering off;
        proxy_read_timeout 3600;
    }
}

Appliquez la même structure pour Navidrome en remplaçant le port par 4533. Activez la configuration avec nginx -t && systemctl reload nginx.

Dépannage : les 3 erreurs les plus fréquentes

Voici les trois problèmes les plus fréquents lors d'une migration Plex/Jellyfin, avec leur solution directe.

  • Bibliothèque vide après le premier scan : vérifiez que le chemin monté dans Docker correspond exactement au répertoire contenant vos fichiers. docker exec jellyfin ls /media doit lister vos dossiers. Si le volume est vide, corrigez le mapping dans docker-compose.yml et redémarrez le conteneur.
  • Transcoding échoue avec erreur ffmpeg : Jellyfin embarque sa propre version de ffmpeg. Si le conteneur ne dispose pas d'accès au GPU, désactivez le transcoding matériel dans Tableau de bord > Lecture et passez en transcoding logiciel. Sur un VPS sans GPU, c'est la configuration normale.
  • Clients iOS/Android ne trouvent pas le serveur : assurez-vous que le pare-feu autorise le port 443 depuis l'extérieur (ufw allow 443), que votre DNS pointe vers l'IP du VPS, et que le certificat TLS est valide. Testez avec curl -I https://jellyfin.votre-domaine.com/health depuis votre poste local.

Gardez Plex désactivé (pas désinstallé) pendant les 48 premières heures après la migration. Le snapshot VPS vous permet de revenir en arrière en moins de cinq minutes. Ne supprimez les fichiers de configuration Plex (/var/lib/plexmediaserver) qu'après avoir validé que tous vos clients fonctionnent correctement sur Jellyfin et Navidrome.

Conclusion

36 000 serveurs Plex non patchés ne sont pas le signe d'un problème de vigilance individuelle : ils révèlent une dépendance structurelle à un éditeur propriétaire dont le cycle de patch est opaque. CVE-2026-96656 et CVE-2026-96651 montrent que cette dépendance a un coût mesurable. Jellyfin et Navidrome vous restituent le contrôle : pas d'authentification tierce, pas de relay cloud, pas d'abonnement pour l'accès distant. La migration prend moins d'une heure avec ce guide ; la bibliothèque est intacte à l'arrivée. Si vous hébergez vos médias sur un VPS root, il n'y a plus de raison d'attendre.

Hébergez Jellyfin sur un VPS root dès aujourd'hui

ServOrbit propose Jellyfin préconfiguré sur VPS root à partir de 99 DH/mois. Déploiement en un clic, reverse proxy Nginx inclus, sans abonnement ni cloud tiers.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet