Pourquoi installer Jellyfin sur un VPS Linux
Jellyfin est un serveur multimédia open source qui permet de diffuser vos films, séries, musiques et photos depuis votre propre serveur vers n'importe quel appareil (navigateur, application mobile, Smart TV, Chromecast). Contrairement aux solutions propriétaires, Jellyfin est entièrement gratuit, sans abonnement, sans compte obligatoire et sans télémétrie. Le code source est publié sous licence GPL et le projet est maintenu par une communauté active.
Installer Jellyfin sur un VPS Linux plutôt que sur un NAS domestique offre plusieurs avantages pour l'administrateur : une bande passante montante stable (les connexions fibre résidentielles plafonnent souvent à 300-700 Mbit/s en upload), un accès depuis n'importe où sans ouvrir de port sur votre box, et la possibilité de centraliser la médiathèque sur un serveur que vous administrez déjà.
La version stable la plus récente est Jellyfin 12.4, publiée le 26 octobre 2026. La branche 12.x, inaugurée par Jellyfin 12.0 le 7 septembre 2026, a apporté la migration vers FFmpeg 8.1, la prise en charge des versions alternatives d'épisodes (coupes différentes, résolutions multiples), un moteur de recommandation extensible par plugin, et une interface modernisée par défaut. Ce guide couvre l'installation via Docker Compose sur un VPS Linux, la configuration d'un reverse proxy HTTPS avec Nginx, l'activation du transcodage matériel VAAPI et la mise en place de sauvegardes.
Prérequis
- Un VPS Linux sous Ubuntu 22.04/24.04 LTS ou Debian 12 avec au moins 2 Go de RAM et 2 vCPU ;
- Un accès SSH sécurisé configuré sur le VPS ;
- Docker et Docker Compose installés (Docker Engine 24+ recommandé) ;
- Un nom de domaine pointant vers l'adresse IP du VPS (enregistrement DNS de type A) ;
- De l'espace disque suffisant pour votre médiathèque (un film en 1080p occupe entre 4 et 15 Go).
Si Docker n'est pas encore installé sur votre VPS, suivez notre guide installer Docker sur un VPS Linux avant de continuer.
Déployer Jellyfin avec Docker Compose
L'image Docker officielle de Jellyfin est jellyfin/jellyfin, publiée sur Docker Hub et sur le GitHub Container Registry (ghcr.io/jellyfin/jellyfin). Le tag latest suit la dernière version stable.
Créez un répertoire de travail et le fichier Docker Compose :
mkdir -p /opt/jellyfin
nano /opt/jellyfin/docker-compose.yml
Contenu du fichier docker-compose.yml :
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- JELLYFIN_PublishedServerUrl=https://media.example.com
volumes:
- ./config:/config
- ./cache:/cache
- /chemin/vers/films:/media/films:ro
- /chemin/vers/series:/media/series:ro
- /chemin/vers/musique:/media/musique:ro
ports:
- "8096:8096"
networks:
- jellyfin-net
networks:
jellyfin-net:
Remplacez /chemin/vers/films, /chemin/vers/series et /chemin/vers/musique par les répertoires réels de votre médiathèque sur le VPS. Le suffixe :ro monte les volumes en lecture seule : Jellyfin n'a pas besoin d'écrire dans vos fichiers multimédia.
Lancez le conteneur :
cd /opt/jellyfin
docker compose up -d
Vérifiez que le conteneur tourne :
docker compose logs -f jellyfin
L'interface web de Jellyfin est accessible sur http://IP_DU_VPS:8096. Ne laissez pas ce port ouvert vers Internet : la section suivante configure un reverse proxy HTTPS.
Configuration initiale de Jellyfin
Au premier accès, Jellyfin affiche un assistant de configuration. Les étapes :
- Choisissez la langue de l'interface (le français est disponible nativement) ;
- Créez le compte administrateur avec un mot de passe fort ;
- Ajoutez vos bibliothèques multimédia : sélectionnez le type de contenu (Films, Séries TV, Musique, Photos) et pointez vers les répertoires montés (
/media/films,/media/series,/media/musique) ; - Configurez les sources de métadonnées (The Movie Database pour les films et séries, MusicBrainz pour la musique) ;
- Désactivez l'accès distant dans l'assistant si vous prévoyez d'utiliser un reverse proxy (vous le réactiverez après).
Jellyfin lance automatiquement l'analyse de vos bibliothèques. Sur un VPS avec un stockage NVMe, une médiathèque de 500 fichiers se scanne en quelques minutes. Les jaquettes, résumés, dates de sortie et sous-titres sont récupérés depuis les fournisseurs de métadonnées configurés.
Reverse proxy HTTPS avec Nginx
Exposer Jellyfin directement sur Internet sans HTTPS expose les identifiants de connexion en clair sur le réseau. La bonne pratique est de placer un reverse proxy Nginx devant le conteneur et de gérer le certificat TLS avec Certbot (Let's Encrypt).
Installez Nginx et Certbot sur le VPS :
sudo apt install -y nginx certbot python3-certbot-nginx
Créez le fichier de configuration Nginx pour Jellyfin :
sudo nano /etc/nginx/sites-available/jellyfin
Contenu :
server {
listen 80;
server_name media.example.com;
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;
}
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;
}
client_max_body_size 20M;
}
Le bloc /socket gère les WebSockets utilisés par Jellyfin pour les mises à jour en temps réel de l'interface. Sans cette directive, les notifications de progression de lecture ne fonctionnent pas.
Activez le site et générez le certificat TLS :
sudo ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d media.example.com
Certbot modifie automatiquement le fichier Nginx pour activer HTTPS et configure le renouvellement automatique du certificat. Votre instance Jellyfin est désormais accessible sur https://media.example.com.
Restreignez le port 8096 pour qu'il ne soit accessible que depuis le VPS lui-même. Dans le fichier docker-compose.yml, remplacez la ligne des ports :
ports:
- "127.0.0.1:8096:8096"
Redémarrez le conteneur pour appliquer la modification :
cd /opt/jellyfin
docker compose down
docker compose up -d
Vérifiez avec UFW que seuls les ports SSH, 80 et 443 sont ouverts :
sudo ufw status
Transcodage matériel avec VAAPI
Le transcodage est la conversion en temps réel d'un fichier vidéo dans un format ou une résolution compatible avec l'appareil du lecteur. Sans accélération matérielle, le CPU du VPS effectue tout le travail, ce qui consomme énormément de ressources. Sur un VPS équipé d'un GPU intégré Intel (iGPU), VAAPI (Video Acceleration API) délègue le transcodage au matériel et réduit la charge CPU de 80 à 95 %.
Sur le VPS hôte, installez les pilotes VAAPI et vérifiez la disponibilité :
sudo apt install -y intel-media-va-driver-non-free vainfo
vainfo
La commande vainfo doit lister les profils de décodage et d'encodage disponibles (H.264, H.265/HEVC, VP9). Si vainfo affiche une erreur ou aucun profil, le VPS n'a pas d'iGPU accessible (cas des VPS purement virtualisés sans passthrough GPU).
Pour activer VAAPI dans Docker, modifiez le fichier docker-compose.yml pour monter le device de rendu :
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- JELLYFIN_PublishedServerUrl=https://media.example.com
volumes:
- ./config:/config
- ./cache:/cache
- /chemin/vers/films:/media/films:ro
- /chemin/vers/series:/media/series:ro
- /chemin/vers/musique:/media/musique:ro
ports:
- "127.0.0.1:8096:8096"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
networks:
- jellyfin-net
networks:
jellyfin-net:
Ajoutez l'utilisateur du conteneur au groupe render du système hôte. Identifiez le GID du groupe render :
getent group render | cut -d: -f3
Si le GID est 109 (valeur courante sur Debian/Ubuntu), ajoutez-le dans la section du service Jellyfin du fichier Compose :
group_add:
- "109"
Redémarrez le conteneur, puis activez l'accélération dans l'interface Jellyfin : Tableau de bord > Lecture > Transcodage, sélectionnez Video Acceleration API (VAAPI) et définissez le périphérique VA-API sur /dev/dri/renderD128.
Sur un VPS sans GPU dédié ou sans passthrough, le transcodage logiciel reste la seule option. Dans ce cas, prévoyez au moins 4 vCPU pour transcoder un flux 1080p en temps réel. L'alternative est de convertir vos fichiers à l'avance dans un format largement compatible (H.264 avec conteneur MP4 et codec audio AAC) pour éviter le transcodage en lecture.
Sauvegarder la configuration et la médiathèque
La configuration de Jellyfin (comptes utilisateurs, préférences, progression de lecture, métadonnées téléchargées) est stockée dans le volume ./config. C'est le répertoire critique à sauvegarder. La médiathèque elle-même (les fichiers vidéo et audio) doit aussi être protégée, mais son volume rend les sauvegardes plus coûteuses en espace et en temps de transfert.
Sauvegarde de la configuration
Arrêtez le conteneur avant de sauvegarder pour éviter les fichiers corrompus (la base de données SQLite de Jellyfin peut être en cours d'écriture) :
cd /opt/jellyfin
docker compose stop
tar czf /root/backups/jellyfin-config-$(date +%F).tar.gz ./config
docker compose start
Automatisez cette sauvegarde avec un cron quotidien. La configuration compressée pèse généralement entre 50 et 500 Mo selon le nombre de bibliothèques et la quantité de métadonnées.
Sauvegarde distante avec rsync
Transférez les sauvegardes vers un serveur distant ou un espace de stockage externe avec rsync :
rsync -avz /root/backups/jellyfin-config-*.tar.gz user@backup-server:/backups/jellyfin/
Pour la médiathèque, un rsync incrémental (qui ne transfère que les fichiers modifiés) est plus efficace qu'une archive complète :
rsync -avz --delete /chemin/vers/films/ user@backup-server:/backups/media/films/
Restauration
Pour restaurer une instance Jellyfin sur un nouveau VPS, redéployez le conteneur avec le même fichier docker-compose.yml, puis extrayez la sauvegarde dans le répertoire ./config :
tar xzf jellyfin-config-2026-10-29.tar.gz -C /opt/jellyfin/
docker compose up -d
Jellyfin retrouve ses utilisateurs, ses bibliothèques et l'historique de lecture.
Auto-hébergement vs streaming propriétaire
| Critère | Jellyfin (auto-hébergé) | Streaming propriétaire |
|---|---|---|
| Coût | Gratuit (seul le VPS est payant) | Abonnement mensuel par plateforme |
| Catalogue | Votre propre médiathèque, sans restriction | Catalogue imposé, titres qui disparaissent |
| Vie privée | Aucune télémétrie, aucun compte tiers requis | Collecte de données de visionnage |
| Transcodage matériel | Gratuit (VAAPI, QSV, NVENC) | Parfois payant ou limité |
| Accès hors ligne | Téléchargement direct de vos fichiers | Limité aux applications mobiles |
| Nombre d'utilisateurs | Illimité (limité par les ressources du VPS) | Plans par nombre d'écrans |
| Disponibilité | Dépend de votre infrastructure serveur | Gérée par le fournisseur |
| Personnalisation | Plugins, thèmes, métadonnées personnalisées | Interface imposée |
Mettre à jour Jellyfin
L'un des avantages de Docker est la simplicité des mises à jour. Pour passer à la dernière version de Jellyfin :
cd /opt/jellyfin
docker compose pull
docker compose down
docker compose up -d
Docker télécharge la nouvelle image, supprime l'ancien conteneur et en crée un nouveau avec la configuration et les données préservées dans les volumes. La mise à jour vers Jellyfin 12.x depuis une version 10.x nécessite une migration de la base de données : Jellyfin l'effectue automatiquement au premier démarrage, mais sauvegardez la configuration avant par précaution.
Conclusion
Jellyfin transforme un VPS Linux en serveur de streaming personnel, sans abonnement ni télémétrie. Docker Compose simplifie le déploiement et les mises à jour, le reverse proxy Nginx sécurise l'accès via HTTPS, et VAAPI réduit la charge CPU lors du transcodage. Avec des sauvegardes régulières de la configuration, votre médiathèque est protégée et portable d'un serveur à l'autre. Pour aller plus loin dans la gestion de vos conteneurs, consultez notre guide Portainer, Dockge et Cosmos pour gérer Docker sur un VPS.
FiveM
Minecraft
Rust
RedM
Hytale