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 et l'accès distant derrière un abonnement Plex 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 natif 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, allez dans Tableau de bord → Lecture et définissez le chemin du transcodage sur
/config/transcodes. Si votre VPS est limité en CPU, forcez le Direct Play et refusez le transcodage automatique : l'interface affichera une erreur pour les fichiers incompatibles plutôt que de saturer le serveur. Pour Plex, la même option se trouve dans Paramètres → Lecture distante.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 : activez une politique de mot de passe fort et limitez le nombre de tentatives dans Tableau de bord → Sécurité. Pour Plex sans Plex Pass, l'accès distant nécessite de configurer une redirection de port sur votre réseau — sur VPS, le reverse proxy suffit et est préférable. 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 est sorti le 7 septembre 2026. Ce saut de version — de 10.11.x directement à 12 — reflète l'ampleur des changements incompatibles introduits.
Suppression des préfixes d'API hérités. Les routes /emby/ et /mediabrowser/ ont été définitivement retirées. Tout client tiers ou script qui les utilisait (Infuse en mode Emby, certains plugins Kodi, intégrations Home Assistant) doit être mis à jour pour pointer vers la racine /. Vérifiez chaque application cliente avant de migrer.
Migration de base de données irréversible. Jellyfin 12 remplace son schéma SQLite par une structure relationnelle restructurée. La migration s'exécute automatiquement au premier démarrage et ne peut pas être annulée. Sauvegardez intégralement le dossier config/ — notamment data/jellyfin.db — avant de lancer la mise à jour du conteneur. Une restauration implique de revenir à l'image Docker de la version précédente.
Incompatibilité des plugins 10.11. Les plugins développés pour Jellyfin 10.11 ne sont pas compatibles avec Jellyfin 12. Vérifiez la compatibilité de chaque plugin dans le catalogue officiel avant de migrer, ou désactivez-les le temps que les mainteneurs publient des versions mises à jour.
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. Tirez simplement 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 | Passe par les relais Plex (ou 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 | Natif, sans configuration | Présent, moins configurable |
| Plugins et extensions | Catalogue communautaire riche, évolutif | Plus fermé, fonctionnalités intégrées |
| Applications mobiles | Gratuites (Android, iOS) | Gratuites avec pub, Pass 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 vous voyez ffmpeg not found ou Permission denied sur le dossier de transcodage, le conteneur ne trouve pas le binaire ou n'a pas accès au dossier /config/transcodes. 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).
Erreur « no hardware acceleration ». Sur un VPS sans GPU dédié, l'accélération matérielle (VAAPI, QSV, NVENC) n'est pas disponible. L'erreur apparaît dans les journaux si vous avez activé une option de transcodage matériel que le serveur ne peut pas honorer. Désactivez-la dans Tableau de bord → Lecture → Transcodage matériel et repassez en transcodage logiciel, ou forcez le Direct Play.
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. Jellyfin recommande un sous-domaine dédié (media.mondomaine.com) plutôt qu'un sous-chemin. Si le sous-chemin est incontournable, configurez baseUrl dans network.xml 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.