Pourquoi héberger son serveur multimédia sur un VPS
Un serveur multimédia auto-hébergé sur VPS fait de vous le propriétaire de votre catalogue : films, séries, musique et photos restent accessibles en HTTPS depuis un navigateur, une Smart TV ou un smartphone, sans quota imposé et sans analyse de vos habitudes.
Contrairement à une machine domestique, un VPS dispose d'une bande passante montante stable indispensable au streaming à distance, d'une IP fixe pour configurer un domaine, et d'une disponibilité permanente sans surcoût d'électricité. Votre médiathèque ne dépend plus de la connexion ni du matériel de chez vous.
Jellyfin est entièrement libre (licence GPL) sans aucune fonctionnalité payante. Plex offre une expérience client plus soignée mais réserve le transcodage matériel au Plex Pass et, depuis le 29 avril 2025, la lecture à distance de vos vidéos personnelles au Plex Pass ou au Remote Watch Pass. Le choix se joue donc entre liberté totale et commodité préconfigurée.
Ce que vous gagnez en l'hébergeant vous-même
- Accès à distance en HTTPS sans passer par un relais externe ni exposer votre contenu à un tiers
- Aucune limite sur le nombre de comptes, de flux simultanés ou la taille de la bibliothèque
- Transcodage à la volée piloté par vos propres ressources VPS (CPU ou GPU)
- Sous-titres, métadonnées et jaquettes récupérés automatiquement et stockés sur votre serveur
- Avec Jellyfin : zéro fonctionnalité payante, aucune télémétrie, code source auditable
- Sauvegarde et migration triviales : tout tient dans un volume Docker et un dossier media
- Support DLNA (via le plugin officiel de Jellyfin) pour diffuser vers des TV et lecteurs réseau sans client dédié
Prérequis pour un VPS media-server
Pour le streaming direct (remux sans ré-encodage), un VPS à 2 vCPU et 2 Go de RAM suffit. Dès que vous activez le transcodage logiciel d'un flux 1080p, comptez 4 vCPU et 4 Go ; pour plusieurs flux 4K simultanés, visez 6 à 8 vCPU. Le transcodage matériel (QSV, NVENC) reste rare sur les VPS partagés : privilégiez les fichiers déjà compatibles avec vos clients pour rester en Direct Play.
Côté stockage, prévoyez un volume généreux et idéalement un disque rapide pour les métadonnées. Vous aurez besoin de Docker et Docker Compose installés, d'un sous-domaine (ex. media.mondomaine.com) pointant vers l'IP du VPS, et d'un reverse proxy pour le TLS.
Déployer Jellyfin (ou Plex) avec Docker et reverse proxy
Préparer l'arborescence et les volumes
Sur le VPS, créez
mkdir -p /srv/jellyfin/{config,cache}et un dossier media/srv/media/{films,series,musique}. Ces chemins seront montés en volumes pour persister la configuration et séparer proprement le contenu de la base de données.Rédiger le docker-compose.yml
Déclarez le service
jellyfin/jellyfin(ouplexinc/pms-docker), montez./config,./cacheet/srv/mediaen lecture seule, et exposez le port8096(Jellyfin) ou32400(Plex) uniquement en local :127.0.0.1:8096:8096. Le reverse proxy gérera l'exposition publique.Démarrer le conteneur
Lancez
docker compose up -d, puis suivezdocker compose logs -f. Accédez à l'assistant de configuration via un tunnel SSHssh -L 8096:127.0.0.1:8096 user@vpspour créer le compte administrateur avant toute exposition publique.Configurer le transcodage
Dans l'interface Jellyfin, sous Tableau de bord → Lecture → Transcodage, laissez le chemin de transcodage par défaut (
/cache/transcodesdans l'image officielle) : ces fichiers temporaires n'ont rien à faire dans./config, que vous sauvegardez. Si votre VPS est limité en CPU, privilégiez le Direct Play et retirez, dans le profil de chaque utilisateur (Tableau de bord → Utilisateurs), l'autorisation de lire une vidéo qui nécessite un transcodage : les fichiers incompatibles échoueront plutôt que de saturer le serveur. Pour Plex, l'option équivalente, « Disable video stream transcoding », se trouve dans Paramètres → Serveur → Transcodeur.Mettre en place le reverse proxy et le SSL
Configurez Caddy ou Nginx pour proxifier
media.mondomaine.comvers127.0.0.1:8096. Avec Caddy, deux lignes suffisent et le certificat Let's Encrypt est automatique. Pensez à transmettre les en-têtes WebSocket pour la lecture en temps réel. Attention avec Jellyfin 12 : les anciens préfixes/emby/et/mediabrowser/ont été supprimés — si vous aviez configuré votre reverse proxy sur ces chemins, mettez-le à jour pour pointer vers la racine/.Sécuriser l'accès avec l'authentification Jellyfin
Jellyfin gère nativement l'authentification : imposez des mots de passe longs et, dans le profil de chaque utilisateur (Tableau de bord → Utilisateurs), fixez le nombre maximal de tentatives de connexion échouées avant verrouillage. Pour Plex derrière un reverse proxy, déclarez l'URL publique dans Paramètres → Serveur → Réseau (« Custom server access URLs ») ; la lecture à distance de vos vidéos exige en outre un Plex Pass sur le compte administrateur du serveur, ou un Remote Watch Pass sur le compte de chaque spectateur. N'ouvrez jamais le port
8096ou32400directement sur le pare-feu : seuls les ports 80/443 doivent être accessibles.Indexer les bibliothèques
Dans l'interface, ajoutez les dossiers
/media/filmset/media/series, choisissez l'agent de métadonnées, et lancez le scan. Vérifiez qu'un fichier se lit en Direct Play depuis un client externe pour confirmer que le proxy et les codecs sont corrects.Sauvegarder la configuration
La sauvegarde de Jellyfin se résume à deux éléments : le dossier
./config(base de données, plugins, préférences) et vos fichiers media. Automatisez untar -czf jellyfin-config-$(date +%Y%m%d).tar.gz ./configquotidien et synchronisez vers un stockage distant. Pour Plex, le dossierPlex Media Server/contient l'équivalent. Testez la restauration sur un environnement de test avant d'en avoir besoin.
Jellyfin 12 : ce qui change et comment migrer
Jellyfin 12.0 est sorti le 7 septembre 2026 ; la branche en est à 12.4, publiée en octobre 2026. Le passage de 10.11.x à 12 tient à un changement de numérotation : le projet a abandonné le préfixe « 10. », et 12.0 est la version qui se serait appelée 10.12.0. Elle n'en introduit pas moins des changements incompatibles.
Suppression des préfixes d'API hérités. Les routes /emby/ et /mediabrowser/ ont été définitivement retirées : les anciens clients tiers et les scripts qui s'appuyaient dessus cessent de fonctionner tant qu'ils n'appellent pas les routes à la racine /. L'ancienne méthode d'autorisation (« legacy authorization ») est en outre désactivée par défaut, y compris sur les installations migrées. Vérifiez chaque application cliente avant de migrer.
Migration de base de données irréversible. Jellyfin 12 reste sur SQLite mais restructure sa base : playlists et collections deviennent relationnelles (nouvelle table LinkedChildren) et des routines de nettoyage s'exécutent automatiquement au premier démarrage. Ces changements empêchent tout retour arrière sans restauration complète. Sauvegardez intégralement le dossier config/ — notamment data/jellyfin.db — avant de lancer la mise à jour du conteneur. Revenir en arrière implique de restaurer cette sauvegarde avec l'image Docker de la version précédente. Après la mise à jour, lancez un scan complet des bibliothèques : il est requis pour rétablir les versions alternatives des médias.
Incompatibilité des plugins 10.11. Le serveur cible désormais .NET 10 : les plugins doivent être recompilés pour Jellyfin 12. Les notes de version recommandent de retirer les plugins installés depuis un dépôt (hors plugins intégrés) avant de migrer, puis de les réinstaller depuis le dépôt stable officiel une fois leurs versions compatibles publiées.
Migration directe supportée. Les mises à jour depuis 10.10.7 et 10.11.x vers 12 sont supportées — pas besoin de réinstaller depuis zéro ni de passer par une version intermédiaire ; en deçà de 10.10.7, passez d'abord par 10.10.7. Tirez ensuite la nouvelle image Docker, après sauvegarde.
Faites défiler le tableau
| Critère | Jellyfin | Plex |
|---|---|---|
| Licence / coût | Libre (GPL), 100 % gratuit | Freemium, Plex Pass payant pour les fonctionnalités clés |
| Transcodage matériel | Inclus et gratuit | Réservé aux abonnés Plex Pass |
| Accès distant | Direct via votre reverse proxy | Direct ou par le relais Plex (débit limité) ; lecture à distance des vidéos sous Plex Pass ou Remote Watch Pass |
| Confidentialité | Aucune télémétrie, tout reste chez vous | Compte Plex et métadonnées centralisés |
| Qualité des clients (TV, mobile) | Bonne, en progression constante | Très soignée et stable |
| Support DLNA | Via le plugin DLNA officiel (réseau host requis sous Docker) | Présent, moins configurable |
| Plugins et extensions | Catalogue communautaire riche, évolutif | Plus fermé, fonctionnalités intégrées |
| Applications mobiles | Gratuites (Android, iOS) | Gratuites, Plex Pass requis pour les téléchargements |
| Communauté | Très active, open source, forums et Matrix | Active, forum officiel, moins ouvert |
| Chromecast | Supporté via l'app mobile | Supporté nativement |
| Configuration initiale | Quelques réglages manuels | Assistant très guidé |
Dépannage : les erreurs les plus fréquentes
Transcodage qui échoue silencieusement. Le lecteur affiche une erreur générique ou la vidéo ne démarre pas. Première vérification : dans Tableau de bord → Journaux, filtrez sur Transcod. Si le journal signale un FFmpeg introuvable ou un refus de permission sur le dossier de transcodage, le conteneur ne trouve pas le binaire ou ne peut pas écrire dans ce dossier (/cache/transcodes par défaut). Vérifiez que le volume est bien monté en écriture et que l'image Docker utilisée est bien jellyfin/jellyfin (pas un fork non maintenu).
Échec de l'accélération matérielle. Sur un VPS sans GPU dédié, l'accélération matérielle (VAAPI, QSV, NVENC) n'est pas disponible : le transcodage échoue si vous avez activé une option matérielle que le serveur ne peut pas honorer. Dans Tableau de bord → Lecture → Transcodage, désactivez l'accélération matérielle pour revenir au transcodage logiciel, ou forcez le Direct Play. Sur une machine équipée d'un GPU, le conteneur doit y accéder : montez le périphérique de rendu (devices: - /dev/dri/renderD128:/dev/dri/renderD128, avec group_add sur le groupe render de l'hôte) pour VAAPI ou QSV, ou installez le pilote NVIDIA et le NVIDIA Container Toolkit sur l'hôte pour NVENC.
Accès distant bloqué derrière un reverse proxy (préfixe de chemin). Si vous servez Jellyfin sous un sous-chemin comme mondomaine.com/media/, les ressources statiques et l'API ne se chargent pas correctement. Un sous-domaine dédié (media.mondomaine.com) évite ces écueils ; la documentation signale d'ailleurs que le Base URL casse notamment le plugin DLNA, HDHomeRun, Sonarr et Radarr. Si le sous-chemin est incontournable, renseignez le champ Base URL dans Tableau de bord → Réseau (stocké dans network.xml, redémarrage requis) et assurez-vous que votre reverse proxy transmet le chemin complet sans le réécrire.
Synchronisation des métadonnées qui boucle. Le scan de bibliothèque tourne indéfiniment sans progresser. Causes courantes : permissions insuffisantes sur le dossier media (Jellyfin doit pouvoir lire les fichiers), nommage des fichiers non conforme au standard Titre (Année).mkv, ou problème de connectivité vers les agents de métadonnées distants. Consultez les journaux de tâche planifiée dans Tableau de bord → Tâches planifiées pour identifier quelle étape bloque.
Pour éviter de saturer le CPU de votre VPS, standardisez votre bibliothèque en H.264/AAC dans un conteneur MP4 ou MKV. Un simple script ffmpeg de remux (sans ré-encodage, option -c copy) reconditionne vos fichiers en quelques secondes et soulage le serveur durablement, notamment sur un VPS sans GPU. Cette opération ne touche pas la qualité vidéo : elle change uniquement le contenant, pas le contenu.