[{"data":1,"prerenderedAt":189},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-jellyfin-ma-fr":6,"promo-bar-likely":188},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-jellyfin-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":127,"ctaBody":128,"ctaButton":129,"ctaUrl":130,"relatedPosts":131},84,"heberger-jellyfin",{"fr":10,"en":12,"ar":13,"es":14},"host-jellyfin-on-your-own-vps","استضافة-jellyfin-على-خادمك-الافتراضي-الخاص-vps","alojar-jellyfin-en-un-vps","Héberger Jellyfin sur VPS : guide complet 2026","Déployez Jellyfin self-hosted sur VPS avec Docker, nginx HTTPS, plugins, stockage et transcodage. Guide 2026 face à la hausse des tarifs Plex.",20,11,false,"2026-03-28T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-jellyfin-poster.svg",{"categorySlug":34,"appSlug":35},"collaboration","jellyfin","Jellyfin est le serveur multimédia libre que Plex aurait dû être. Pas d'abonnement, pas de serveur central qui authentifie vos appareils, pas de collecte de données — juste votre bibliothèque, sur votre machine, accessible depuis n'importe quel écran. Les plateformes de streaming centralisées ont relevé leurs tarifs ces dernières années. Ce guide vous accompagne de l'installation Docker à la configuration nginx, en passant par les trois problèmes que les forums documentent le plus : les plugins qui disparaissent après une mise à jour, le choix du stockage quand votre bibliothèque grossit, et la montée vers une version majeure dont la migration de base de données peut ne jamais se terminer.",[38,42,54,57,79,82,85,88,91,94,118,121,124],{"type":39,"title":40,"body":41},"h2","Pourquoi Jellyfin en 2026","Le paysage des serveurs multimédia personnels a changé en quelques années. Plex a relevé le prix de son Lifetime Pass en 2025, puis l'a triplé le 1er juillet 2026 (de 249,99 à 749,99 dollars, hausse annoncée en mai 2026), rendant l'entrée coûteuse pour un usage familial. Emby, l'autre alternative historique, fonctionne lui aussi sur un modèle freemium — certaines fonctionnalités clés comme le transcodage matériel, le DVR ou le téléchargement hors ligne sur mobile sont réservées aux abonnés Emby Premiere.\n\nJellyfin est né en 2018 comme un fork d'Emby, précisément pour rester libre. La licence GPLv2 interdit toute re-fermeture du code — si un contributeur réintroduit du code propriétaire, les utilisateurs peuvent légalement bifurquer. C'est une garantie structurelle que n'offre ni Plex ni Emby.\n\nCôté versions, la série 12.x a succédé à la 10.11 : la 12.0 est sortie le 8 septembre 2026, et la 12.4, publiée le 26 octobre 2026, est la dernière version stable constatée à la date de rédaction. Ce saut de version majeure a une conséquence pratique : une migration de la base de données, parfois très longue, traitée plus bas dans ce guide.\n\nDu côté des fonctionnalités, Jellyfin couvre la quasi-totalité des usages grand public : streaming adaptatif, transcodage logiciel et matériel, applications natives iOS, Android, Android TV et Roku, gestion LiveTV et enregistrement DVR, sous-titres automatiques, authentification SSO via OIDC et LDAP, et un système de plugins qui étend l'application sans modifier le cœur.",{"type":43,"title":44,"items":45},"ul","Ce que Jellyfin propose",[46,47,48,49,50,51,52,53],"**Streaming DLNA et HLS** — diffuse films, séries et musique vers tous vos appareils, y compris les TV sans application native.","**Applications officielles** — iOS, Android, Android TV, Roku, Fire TV, Kodi ; une interface web responsive pour tout le reste.","**Transcodage à la volée** — convertit le format source si l'appareil cible ne le supporte pas, en logiciel ou via GPU.","**LiveTV et enregistrement DVR** — branchez un tuner USB ou une source IPTV pour regarder et enregistrer la télévision en direct.","**SSO OIDC et LDAP** — intégrez votre annuaire existant ou un fournisseur d'identité comme Authentik ou Keycloak.","**Sous-titres automatiques** — plugin OpenSubtitles, extraction des pistes embarquées, rendu WebVTT.","**Plugins étendus** — intégrations LastFM, scrobbling, métadonnées musicales, trailers, gestion des collections.","**Absence totale de cloud propriétaire** — aucune authentification via les serveurs Plex, aucune donnée de lecture envoyée à un tiers.",{"type":39,"title":55,"body":56},"Prérequis chiffrés par cas d'usage","Les besoins varient considérablement selon ce que vous comptez faire.\n\n**SD et 1080p sans transcodage (direct play)** : si vos appareils lisent nativement le codec source (H.264 ou H.265), Jellyfin ne transcode pas — il sert le fichier comme un serveur de fichiers intelligent. 2 vCPU et 2 Go de RAM suffisent largement, pour une bibliothèque de plusieurs centaines de titres. C'est le cas d'usage le plus courant sur VPS.\n\n**1080p avec transcodage logiciel** : quand le client ne supporte pas le codec ou quand vous bridez le débit, Jellyfin encode à la volée. Un seul flux 1080p H.264 consomme 2 à 4 cœurs selon la résolution source. Visez 4 vCPU \u002F 4 Go RAM minimum pour deux utilisateurs simultanés.\n\n**4K HDR avec transcodage logiciel** : le HDR tone-mapping (conversion HDR→SDR pour les écrans sans HDR) est extrêmement gourmand. Un seul flux 4K HDR peut saturer 8 cœurs. Ce cas d'usage n'est pas adapté à un VPS cloud standard — préférez le direct play 4K (le client doit supporter HEVC\u002FHDR) ou un serveur dédié avec GPU.\n\n**Transcodage matériel GPU (VAAPI\u002FNVENC)** : réduit fortement la charge CPU, mais requiert un accès au périphérique `\u002Fdev\u002Fdri` ou à une carte NVIDIA. Les VPS cloud standards n'exposent pas de GPU ; c'est une option réservée aux serveurs dédiés ou aux VPS GPU spécialisés.\n\n**Disque pour une montée de version** : prévoyez de quoi stocker une copie complète du dossier de configuration (base de données comprise) à côté de l'original. La documentation de sauvegarde de Jellyfin exige au moins 5 Go libres pour une sauvegarde intégrée, et davantage si vous y incluez sous-titres et trickplay.",{"type":58,"title":59,"steps":60},"steps","Installer Jellyfin sur VPS Ubuntu\u002FDebian avec Docker Compose",[61,64,67,70,73,76],{"title":62,"body":63},"Préparer le VPS et installer Docker","Connectez-vous en SSH à votre VPS (Ubuntu 22.04 ou Debian 12). Mettez à jour le système et installez Docker :\n\n`apt update && apt upgrade -y`\n`curl -fsSL https:\u002F\u002Fget.docker.com | sh`\n`systemctl enable --now docker`\n\nVérifiez que Docker fonctionne : `docker info`. Faites cette mise à jour maintenant, sur un serveur encore vide : plus tard, sur une machine qui héberge Jellyfin installé par paquet, un `apt upgrade` peut redémarrer le service au pire moment (voir la section sur la montée de version).",{"title":65,"body":66},"Créer l'arborescence de dossiers","Choisissez où stocker la configuration Jellyfin et vos médias :\n\n`mkdir -p \u002Fopt\u002Fjellyfin\u002F{config,cache}`\n`mkdir -p \u002Fmnt\u002Fmedia\u002F{films,series,musique}`\n`chown -R 1000:1000 \u002Fopt\u002Fjellyfin \u002Fmnt\u002Fmedia`\n\nLe UID 1000 est celui que le fichier Compose ci-dessous donne au conteneur Jellyfin (paramètre `user`, optionnel d'après la documentation : sans lui, le conteneur tourne en root).",{"title":68,"body":69},"Écrire le fichier docker-compose.yml","Créez `\u002Fopt\u002Fjellyfin\u002Fdocker-compose.yml`. Sous `services:` puis `jellyfin:` (indentation YAML de deux espaces par niveau), placez ces lignes :\n\n`image: jellyfin\u002Fjellyfin:12.4`\n`container_name: jellyfin`\n`user: \"1000:1000\"`\n`ports:` puis, en dessous, `- \"127.0.0.1:8096:8096\"`\n`restart: unless-stopped`\n`volumes:` puis, en dessous, `- \u002Fopt\u002Fjellyfin\u002Fconfig:\u002Fconfig`, `- \u002Fopt\u002Fjellyfin\u002Fcache:\u002Fcache` et `- \u002Fmnt\u002Fmedia:\u002Fmedia:ro`\n`environment:` puis, en dessous, `- JELLYFIN_PublishedServerUrl=https:\u002F\u002Fjellyfin.votre-domaine.com`\n\n**N'écrivez pas `latest`.** D'après la documentation officielle, ce tag « suit toujours la dernière version stable, y compris à travers les montées de version majeure et mineure » : un simple `docker compose pull` suffit alors à déclencher une migration de base que vous n'avez pas préparée. Épinglez une version — un tag `X.Y` (comme `12.4`) suit les correctifs de cette branche, un tag `X.Y.Z` fige une version exacte. Vérifiez le tag courant sur le dépôt d'images avant de recopier `12.4`.\n\nLe port n'est publié que sur `127.0.0.1` : seul nginx, sur la même machine, y accède, et Jellyfin n'est pas joignable en HTTP clair sur l'IP publique. Le mode `network_mode: host` n'est nécessaire qu'à la découverte DLNA, d'après la documentation ; DLNA ne sert que sur un réseau local, et sur un VPS ce mode exposerait le port 8096 sur toutes les interfaces.",{"title":71,"body":72},"Démarrer le container","`cd \u002Fopt\u002Fjellyfin`\n`docker compose up -d`\n`docker compose logs -f`\n\nJellyfin écoute sur le port 8096. Attendez la ligne `Startup complete` dans les logs avant de passer à la suite.",{"title":74,"body":75},"Configurer nginx comme reverse proxy","Installez nginx et certbot : `apt install -y nginx certbot python3-certbot-nginx`\n\nCréez `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fjellyfin` avec un seul bloc `server`, en port 80 : `listen 80;`, `server_name jellyfin.votre-domaine.com;`, puis, dans `location \u002F {`, `proxy_pass http:\u002F\u002Flocalhost:8096;`, les en-têtes `proxy_set_header Host $host;`, `proxy_set_header X-Real-IP $remote_addr;`, `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;` et `proxy_set_header X-Forwarded-Proto $scheme;`, puis, pour les WebSockets, `proxy_http_version 1.1;`, `proxy_set_header Upgrade $http_upgrade;` et `proxy_set_header Connection \"upgrade\";`. N'écrivez pas encore de bloc 443 : ses lignes `ssl_certificate` désigneraient des fichiers qui n'existent pas avant le passage de certbot, et nginx refuserait de charger la configuration.\n\nActivez le site, vérifiez-le, puis obtenez le certificat :\n\n`ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjellyfin \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F`\n`nginx -t && systemctl reload nginx`\n`certbot --nginx -d jellyfin.votre-domaine.com`\n\nLe plugin nginx de certbot obtient le certificat, le range dans `\u002Fetc\u002Fletsencrypt\u002Flive\u002Fjellyfin.votre-domaine.com\u002F` (`fullchain.pem` et `privkey.pem`), puis l'installe : il ajoute lui-même au bloc l'écoute 443 et les lignes `ssl_certificate` et `ssl_certificate_key`, et la redirection de HTTP vers HTTPS, active par défaut. Contrôlez le résultat avec `nginx -t`.\n\nSi vous préférez `certbot certonly --nginx -d jellyfin.votre-domaine.com`, qui obtient le certificat sans toucher à la configuration, écrivez ensuite vous-même le bloc 443 : `listen 443 ssl;`, le même `server_name`, `ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fjellyfin.votre-domaine.com\u002Ffullchain.pem;`, `ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fjellyfin.votre-domaine.com\u002Fprivkey.pem;` et la même `location \u002F`. Remplacez alors le `location \u002F` du bloc 80 par `return 301 https:\u002F\u002F$host$request_uri;`, puis `nginx -t && systemctl reload nginx`.",{"title":77,"body":78},"Assistant de configuration initial","Ouvrez `https:\u002F\u002Fjellyfin.votre-domaine.com` dans votre navigateur. L'assistant vous guide à travers :\n\n1. Créer le compte administrateur\n2. Ajouter votre bibliothèque (pointez vers `\u002Fmedia\u002Ffilms`, `\u002Fmedia\u002Fseries`)\n3. Choisir la langue et les agents de métadonnées (TheMovieDB pour les films, TheTVDB pour les séries)\n\nLancez un scan complet une fois la configuration terminée : Tableau de bord > Bibliothèques > Scanner toutes les bibliothèques.",{"type":39,"title":80,"body":81},"Plugins introuvables — vérifier le dépôt","C'est l'une des questions les plus posées après une montée de version : le catalogue de plugins est vide, ou chaque plugin affiche « An error occurred while getting the plugin details from the repository », alors que l'instance fonctionne par ailleurs.\n\n**Ce que dit l'amont.** L'issue GitHub #16654 (« No longer access plugins », signalée sur la version 10.11.8) décrit cette erreur alors que les URL de dépôt du rapporteur étaient correctes. Elle a été fermée sans correctif (« not planned ») par un robot, faute d'activité. Un contributeur y suggère que certains pays bloquent `raw.githubusercontent.com`, qui héberge plusieurs manifestes de plugins tiers ; un utilisateur rapporte avoir résolu son cas en désinstallant les plugins, en redémarrant, puis en les réinstallant. Aucune cause unique n'est établie : l'ancienne explication de ce guide, un changement d'URL entre deux versions, n'est pas ce que dit l'issue et a été retirée.\n\n**Vérifications, dans l'ordre** :\n\n1. Allez dans Tableau de bord > Plugins > Dépôts. Le dépôt officiel stable doit pointer vers `https:\u002F\u002Frepo.jellyfin.org\u002Ffiles\u002Fplugin\u002Fmanifest.json`. Si vous aviez basculé sur le dépôt « unstable », revenez au stable\n2. Depuis le VPS, vérifiez que le manifeste répond : `curl -sI https:\u002F\u002Frepo.jellyfin.org\u002Ffiles\u002Fplugin\u002Fmanifest.json`. Pour un dépôt tiers hébergé sur GitHub, testez aussi `curl -sI https:\u002F\u002Fraw.githubusercontent.com`\n3. Cliquez sur « Enregistrer », puis redémarrez Jellyfin pour forcer le rechargement des métadonnées : `docker compose -f \u002Fopt\u002Fjellyfin\u002Fdocker-compose.yml restart`\n4. En dernier recours, désinstallez les plugins concernés, redémarrez, réinstallez-les, redémarrez de nouveau",{"type":39,"title":83,"body":84},"Stratégie de stockage pour Jellyfin sur VPS","Le stockage est souvent la contrainte principale. Les ordres de grandeur à connaître (estimations standard) :\n\n- Film 1080p MKV H.264 : 5 à 15 Go selon la durée et le débit\n- Film 4K HDR H.265 : 15 à 60 Go, voire plus pour les remasters Blu-ray\n- Épisode de série 1080p : 1 à 4 Go\n\nExemple de calcul : 100 films 1080p × 8 Go (moyenne) = 800 Go minimum. Pour une médiathèque de 300 films mixtes + 10 séries complètes, comptez 3 à 5 To.\n\n**Option 1 — Volume additionnel VPS (recommandé pour commencer)** : la plupart des fournisseurs VPS proposent des volumes de blocs (Block Storage) montables à chaud, facturés au Go\u002Fmois. Montez-le en ext4 sur `\u002Fmnt\u002Fmedia` et passez-le en bind mount dans Docker. Avantage : I\u002FO direct sur disque local, sans transit réseau. Inconvénient : coût linéaire avec la taille.\n\nAprès l'attachement du volume (ici `\u002Fdev\u002Fsdb`) :\n\n`mkfs.ext4 \u002Fdev\u002Fsdb`\n`mount \u002Fdev\u002Fsdb \u002Fmnt\u002Fmedia`\n`echo '\u002Fdev\u002Fsdb \u002Fmnt\u002Fmedia ext4 defaults 0 2' >> \u002Fetc\u002Ffstab`\n\n**Option 2 — Hetzner Storage Box (CIFS\u002FSamba)** : solution hybride — votre VPS reste léger, le stockage vit sur la Storage Box. Montez-la via CIFS :\n\n`apt install -y cifs-utils`\n`install -m 600 \u002Fdev\u002Fnull \u002Froot\u002F.storagebox-credentials`, puis écrivez-y deux lignes : `username=uXXXXXX` et `password=…`\n`mount -t cifs \u002F\u002FuXXXXXX.your-storagebox.de\u002Fbackup \u002Fmnt\u002Fmedia -o seal,credentials=\u002Froot\u002F.storagebox-credentials,uid=1000,gid=1000,iocharset=utf8`\n\nLe fichier d'identifiants évite que le mot de passe reste dans l'historique du shell et la liste des processus ; l'option `seal` chiffre la connexion SMB, qui ne l'est pas forcément d'office. Activez d'abord SMB dans la console Hetzner, et l'accessibilité externe si votre VPS n'est pas chez Hetzner.\n\nLa latence réseau est acceptable pour le streaming pré-bufferisé (Jellyfin lit à l'avance), mais inadaptée au transcodage en direct — le débit CIFS ne suit pas.\n\n**Option 3 — NAS local avec tunnel Tailscale ou Cloudflare Tunnel** : si vous disposez déjà d'un NAS domestique, vous pouvez y exposer votre bibliothèque vers un VPS distant via un tunnel chiffré. Tailscale crée un réseau privé virtuel entre votre NAS et votre VPS en moins de dix minutes. Le streaming passe ensuite de votre NAS → VPS → utilisateur, avec une latence maîtrisée. Réservez cette option aux bibliothèques très volumineuses déjà constituées.\n\n**Seuil de rentabilité** : comparez le prix au To de votre volume de blocs et celui d'une Storage Box sur les grilles tarifaires en vigueur chez le fournisseur. Au-delà de 500 Go, le stockage externe revient souvent moins cher, à condition d'accepter la latence réseau.",{"type":39,"title":86,"body":87},"Transcodage matériel — VAAPI et NVENC","Le transcodage logiciel convient à une ou deux sessions simultanées sur un bon VPS. Au-delà, ou pour du 4K HDR régulier, le transcodage matériel est indispensable.\n\n**VAAPI (Intel\u002FAMD)** : sur un serveur dédié avec GPU Intel intégré ou GPU AMD, le périphérique `\u002Fdev\u002Fdri\u002FrenderD128` expose l'encodeur. Ajoutez au service Docker les lignes `devices:` puis `- \u002Fdev\u002Fdri\u002FrenderD128:\u002Fdev\u002Fdri\u002FrenderD128`, et `group_add:` avec l'identifiant du groupe `render` de l'hôte (`getent group render | cut -d: -f3`).\n\nActivez ensuite l'accélération matérielle dans Tableau de bord > Lecture > Transcodage : choisissez QSV (Intel Quick Sync, à préférer sur les GPU Intel récents sous Linux) ou VA-API (GPU AMD, anciens GPU Intel).\n\n**NVENC (NVIDIA)** : requiert sur l'hôte le pilote NVIDIA et le NVIDIA Container Toolkit (l'ancien paquet `nvidia-docker2` est obsolète). Ajoutez au service un bloc `deploy:` > `resources:` > `reservations:` > `devices:` contenant `- driver: nvidia`, `count: 1` et `capabilities: [gpu]`.\n\n**Rappel** : les VPS cloud standards n'exposent pas de GPU ou de device `\u002Fdev\u002Fdri`. Ce mode est réservé aux serveurs dédiés avec carte graphique ou processeur avec GPU intégré accessible.",{"type":89,"body":90},"tip","Limitez la charge pour éviter la saturation : Jellyfin n'a pas de plafond global de transcodages, mais vous pouvez fixer, pour chaque utilisateur, un nombre maximal de sessions simultanées (Tableau de bord > Utilisateurs > profil de l'utilisateur) et brider le débit des clients distants dans les réglages de lecture. Sur un VPS de 4 vCPU, visez 2 ou 3 transcodages simultanés au plus — au-delà, les autres utilisateurs subissent une dégradation perceptible.",{"type":39,"title":92,"body":93},"Monter vers une version majeure : ce que Jellyfin 12 impose","Passer de la 10.11 à la 12.x n'est pas une mise à jour de routine. Les notes de version de la 12.0 (8 septembre 2026) fixent le cadre :\n\n**Chemins de montée.** On peut monter directement depuis la 10.10.7 ou n'importe quelle 10.11.x, sans étape intermédiaire. Une version antérieure à la 10.10.7 doit d'abord passer par la 10.10.7.\n\n**Sauvegarde.** Les notes recommandent « fortement » une sauvegarde complète du dossier de données, parce que revenir en arrière suppose une restauration complète. La documentation de sauvegarde le confirme : Jellyfin n'a pas de mécanisme de rétrogradation.\n\n**Durée.** La migration vérifie les chemins de tous les éléments de la bibliothèque, ce qui peut prendre du temps selon sa taille, et le premier scan de bibliothèque sera bien plus long que d'habitude.\n\n**Effets de bord annoncés.** Les versions alternatives résolues automatiquement (non fusionnées à la main) sont supprimées et reviennent après un scan complet ; certains films peuvent apparaître comme nouvellement ajoutés ; des noms d'utilisateur qui ne diffèrent que par la casse doivent être corrigés avant la montée ; les routes héritées `\u002Femby\u002F*` et `\u002Fmediabrowser\u002F*` disparaissent, ce qui peut casser d'anciens clients tiers ; l'autorisation héritée est désactivée ; les réglages de sous-titres globaux sont remplacés par des réglages par bibliothèque.\n\nCes points sont tirés des notes de la 12.0 et valent pour la 12.0 ; relisez les notes de la version que vous visez.",{"type":58,"title":95,"steps":96},"Procédure durable pour monter de version sans perdre sa bibliothèque",[97,100,103,106,109,112,115],{"title":98,"body":99},"Lire les notes de version et vérifier le chemin de montée","Ouvrez la page de la version cible sur le dépôt GitHub de Jellyfin et lisez ses « upgrade notes ». Repérez votre version actuelle (`docker compose images` ou le tableau de bord). Si elle est antérieure à la 10.10.7, passez d'abord par la 10.10.7. Retirez les plugins issus de dépôts tiers avant la migration, comme le demandent les notes de la 12.0.",{"title":101,"body":102},"Empêcher toute mise à jour automatique","Une migration interrompue est la cause documentée du pire cas (voir la section suivante). Désactivez donc tout ce qui peut redémarrer ou remplacer le service sans vous :\n\n- Docker : épinglez le tag dans `docker-compose.yml` (jamais `latest`) et coupez Watchtower ou toute tâche qui lance `docker compose pull`\n- Paquets Debian\u002FUbuntu : listez les paquets avec `dpkg -l | grep -i jellyfin`, gelez-les avec `apt-mark hold \u003Cpaquet>`, et vérifiez avec `apt-mark showhold`. Un paquet gelé n'est plus mis à jour par `apt upgrade` ni par `unattended-upgrades`\n- Évitez aussi de lancer `apt upgrade` sur la machine pendant que la migration tourne, même pour d'autres paquets, tant que vous n'avez pas confirmé le comportement de votre distribution",{"title":104,"body":105},"Arrêter Jellyfin et copier le dossier de données","Une copie à chaud d'une base ouverte peut être inutilisable : la documentation précise que, pour une sauvegarde manuelle, le serveur doit être arrêté, sinon la base risque d'être verrouillée et irrécupérable à la restauration.\n\n`cd \u002Fopt\u002Fjellyfin`\n`docker compose stop`\n`df -h \u002Fopt` et `du -sh \u002Fopt\u002Fjellyfin\u002Fconfig` pour vérifier la place\n`cp -a \u002Fopt\u002Fjellyfin \u002Fopt\u002Fjellyfin.avant-montee`\n\nSi votre configuration vit dans un volume nommé (c'est le cas du modèle du catalogue ServOrbit, qui monte `jellyfin-data` sur `\u002Fconfig`), copiez le volume après avoir vérifié son nom avec `docker volume ls` : `docker run --rm -v jellyfin-data:\u002Fsource:ro -v \u002Froot\u002Fjellyfin-avant:\u002Fcopie alpine cp -a \u002Fsource\u002F. \u002Fcopie\u002F`.\n\nLa sauvegarde intégrée (Tableau de bord > Sauvegardes) est une alternative, mais elle ne remplace pas une copie du dossier quand la migration elle-même est le risque.",{"title":107,"body":108},"Changer le tag et démarrer","Modifiez la ligne `image:` de `docker-compose.yml` vers la version visée, puis :\n\n`docker compose pull`\n`docker compose up -d`\n\nLe serveur lance les migrations au démarrage, avant d'accepter les connexions. Tant qu'elles tournent, la sonde de santé répète « Server is still starting up. ».",{"title":110,"body":111},"Surveiller sans toucher à rien","`docker compose logs -f` affiche la migration en cours, numérotée (par exemple « 1 of 21 »). Dans un second terminal, `docker stats` montre la charge. Ne redémarrez pas le conteneur et ne relancez pas la commande `up` pendant qu'une migration tourne : c'est le geste qui a bloqué des bases dans l'issue #18066. Notez que `restart: unless-stopped` relance aussi un conteneur tué (manque de mémoire, par exemple) en pleine migration : si le journal montre des démarrages répétés, arrêtez-le vous-même avec `docker compose stop` et diagnostiquez avant de reprendre.",{"title":113,"body":114},"Décider : patienter ou restaurer","Une migration lente consomme du CPU ou du disque ; une migration bloquée est inerte. Les rapports de l'issue #18066 donnent des ordres de grandeur : un cœur à 100 % pendant plus de deux heures sur une base de plus de 3 Go avant qu'un correctif n'existe, une montée complète d'environ deux heures chez un autre, une réussite après une nuit d'attente chez un troisième ; à l'inverse, 0 % de CPU, aucune E\u002FS disque et des threads au repos chez ceux dont la migration était réellement bloquée. Patientez tant que le CPU ou le disque travaillent et que le compteur avance. Si tout est inerte depuis longtemps, ou si le journal ne bouge plus, restaurez.",{"title":116,"body":117},"Restaurer la copie si le processus est inerte","`docker compose down`\n`mv \u002Fopt\u002Fjellyfin \u002Fopt\u002Fjellyfin.bloque`\n`cp -a \u002Fopt\u002Fjellyfin.avant-montee \u002Fopt\u002Fjellyfin`\n\nRemettez dans `docker-compose.yml` l'ancien tag exact, puis `docker compose up -d`. N'essayez pas de rétrograder la base en place : Jellyfin n'a pas de mécanisme de rétrogradation. Quand la montée réussit, lancez un scan complet des bibliothèques, réinstallez les plugins retirés, et ne supprimez les copies qu'après quelques jours d'usage normal.",{"type":39,"title":119,"body":120},"Migration qui ne finit jamais : l'état réel de l'issue #18066","**Le symptôme.** L'issue jellyfin\u002Fjellyfin #18066, « Migration ChangeOwnerIdToGuid never completes and keeps one CPU core at 100% », a été ouverte le 15 septembre 2026 sur une montée de la 10.11.11 vers la 12.1.0. Le rapporteur décrit un thread .NET à environ 100 % d'un cœur pendant plus de deux heures, une base `jellyfin.db` d'environ 3,2 à 3,5 Go et quelque 311 000 éléments, avec presque aucune écriture disque et aucune erreur dans le journal.\n\n**Deuxième cas : le redémarrage par `apt upgrade`.** Un autre utilisateur rapporte qu'un `apt upgrade` a redémarré le service en pleine migration ; tous les démarrages suivants sont restés bloqués sur la migration `AddForeignKeyToOwnerId`, à 0 % de CPU, sans E\u002FS ni écriture. Il note aussi qu'un fichier systemd local limitant le délai de démarrage (`TimeoutSec = 15`) tuait les migrations. Il a restauré la sauvegarde que Jellyfin crée avant de migrer (dossier `data\u002FSQLiteBackups\u002F`) : la 12.2 a alors rejoué les migrations en environ cinq minutes.\n\n**Ce qui a marché, ce qui n'a pas marché.** Des utilisateurs ont réussi après avoir laissé tourner la migration toute une nuit, d'autres après avoir restauré une copie d'avant migration ou réinstallé Jellyfin ; certains sont revenus à la 10.11.11 en attendant. Des blocages persistent sur la 12.2 chez au moins deux d'entre eux, tandis qu'au moins cinq y signalent une montée réussie.\n\n**Le correctif amont.** La pull request #18073, « Fix ChangeOwnerIdToGuid migration performance », a été fusionnée le 26 septembre 2026 dans la branche 12.z (jalon v12.2) puis rétroportée le 27 septembre. Elle traite deux lenteurs : une vérification de collisions qui parcourait toute la table `UserData` pour chaque ligne factice, et sept index construits sur une table de plusieurs gigaoctets puis aussitôt détruits quand SQLite reconstruit la table pour ajouter la clé étrangère.\n\n**L'état au 7 novembre 2026.** L'issue est toujours ouverte (étiquette `bug`), sans analyse de cause racine d'un mainteneur dans le fil visible ; le dernier commentaire date du 17 octobre. Les versions 12.0, 12.1, 12.2, 12.3 et 12.4 existent (la 12.4 du 26 octobre est la plus récente) : visez la dernière 12.x plutôt que la 12.0 ou la 12.1, publiées avant la fusion de ce correctif de performance.\n\nLecture prudente : le correctif réduit le temps de migration, il ne garantit pas que chaque base se termine, et rien ne dispense de la copie préalable. Un cas distinct du fil, des processus à 100 % après la connexion d'un utilisateur, a été rattaché par son auteur à des statistiques SQLite périmées (`sqlite_stat1`) et résolu par `ANALYZE` ; ce lien avec la migration n'est pas confirmé.",{"type":39,"title":122,"body":123},"Dépannage — erreurs fréquentes","**Bibliothèque vide après scan** : vérifiez que le bind mount Docker est correct et que les permissions correspondent. Le container tourne en UID 1000 ; si vos fichiers appartiennent à root, Jellyfin ne peut pas les lire : `chown -R 1000:1000 \u002Fmnt\u002Fmedia`.\n\n**HTTPS cassé derrière nginx** : si l'interface charge en HTTP alors que vous avez configuré HTTPS, vérifiez que les en-têtes `X-Forwarded-Proto` et `X-Real-IP` sont bien transmis dans la configuration nginx. Sans eux, Jellyfin génère des URLs en HTTP dans ses réponses.\n\n**Transcodage lent ou erreur VAAPI** : confirmez que le container a accès au device avec `docker exec jellyfin ls \u002Fdev\u002Fdri`. Si le dossier est absent, le device n'est pas passé dans `docker-compose.yml`, ou votre VPS ne l'expose pas.\n\n**Applications mobiles refusent de se connecter** : vérifiez que votre certificat TLS est valide et non auto-signé. Les clients Jellyfin iOS et Android rejettent les certificats auto-signés sans configuration supplémentaire. Si vous utilisez Let's Encrypt, assurez-vous que le renouvellement automatique (`certbot renew`) est actif : `systemctl status certbot.timer`.\n\n**Plugins installés mais inactifs après redémarrage** : certains plugins requièrent un redémarrage COMPLET de Jellyfin (pas un rechargement de configuration) pour s'activer. Utilisez `docker compose restart` plutôt que l'option de redémarrage depuis l'interface si le problème persiste.\n\n**« Server is still starting up. » en boucle après une montée de version** : une migration de base est en cours ou bloquée. Ne redémarrez pas. Regardez le compteur de migration dans `docker compose logs`, la charge avec `docker stats`, puis appliquez la décision patienter ou restaurer décrite plus haut.\n\n**Un ancien client ne se connecte plus après la 12.0** : les routes `\u002Femby\u002F*` et `\u002Fmediabrowser\u002F*` ont été retirées. Mettez à jour le client ou changez-en.",{"type":39,"title":125,"body":126},"Déployer Jellyfin depuis le Marketplace ServOrbit","Si vous préférez une installation préconfigurée plutôt que de gérer Docker manuellement, Jellyfin est disponible dans le Marketplace ServOrbit. L'installation crée automatiquement le container et, dès que vous rattachez un domaine à l'application depuis l'espace client, installe le vhost nginx et le certificat TLS. Vous récupérez un Jellyfin prêt à l'emploi, avec l'assistant de configuration au premier accès ; le stockage des médias (volume additionnel, Storage Box) reste à monter vous-même, comme décrit plus haut.\n\nLe VPS reste entièrement sous votre contrôle : vous pouvez vous connecter en SSH, modifier `docker-compose.yml`, ajouter des volumes ou migrer vers une autre infrastructure à tout moment.\n\nAttention à une particularité du modèle : au 7 novembre 2026, il référence l'image `jellyfin\u002Fjellyfin:latest` et monte le volume `jellyfin-data` sur `\u002Fconfig`. Après le déploiement, épinglez vous-même le tag de l'image sur la version que vous avez choisie, puis suivez la procédure de montée de version ci-dessus avant tout changement. Ce guide est fourni sans prise en charge de votre installation.","Votre Jellyfin en production en 5 minutes","Déployez Jellyfin depuis le Marketplace ServOrbit : installation automatisée, HTTPS inclus, stockage configurable, VPS sous votre contrôle total.","Déployer Jellyfin sur VPS","\u002Fapplications\u002Fcollaboration\u002Fjellyfin",[132,153,171],{"id":133,"slug":134,"slugs":135,"title":139,"excerpt":140,"readTime":141,"views":142,"isPinned":19,"noindex":19,"publishedAt":143,"updatedAt":144,"category":145,"categories":150,"featuredImage":30,"bgImage":31,"posterImage":152,"relatedSolution":30},98,"jellyfin-vs-plex",{"fr":134,"en":136,"ar":137,"es":138},"jellyfin-vs-plex-which-self-hosted-media-server","jellyfin-مقابل-plex-أي-خادم-وسائط-مستضاف-ذاتيا","jellyfin-vs-plex-que-servidor-multimedia-autoalojado","Jellyfin vs Plex : quel serveur multimédia auto-hébergé ?","Jellyfin vs Plex : comparatif pour choisir votre media-server auto-hébergé sur VPS — déploiement Docker, dépannage et migration vers Jellyfin 12.",9,1,"2026-03-14T00:00:00+00:00","2026-11-08T01:13:15+00:00",{"id":146,"name":147,"slug":148,"color":149,"icon":148},5,"Comparatif","comparatif","bg-info\u002F10 text-info",[151],{"id":146,"name":147,"slug":148,"color":149,"icon":148},"\u002Fblog\u002Fcovers\u002Fjellyfin-vs-plex-poster.svg",{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":162,"views":163,"isPinned":19,"noindex":19,"publishedAt":164,"updatedAt":165,"category":166,"categories":167,"featuredImage":30,"bgImage":31,"posterImage":169,"relatedSolution":170},292,"migrer-plex-vers-jellyfin-2026",{"fr":155,"en":157,"ar":158,"es":159},"migrating-from-plex-to-jellyfin-after-the-july-2026-paywall","الهجرة-من-plex-إلى-jellyfin-بعد-paywall-يوليو-2026","migrar-de-plex-a-jellyfin-2026","Migrer de Plex vers Jellyfin après le paywall de juillet 2026","Plex fait payer le streaming distant et a corrigé deux failles en 2026. Migrez vers Jellyfin (vidéo) et Navidrome (musique) sur votre VPS.",16,4,"2026-08-22T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[168],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmigrer-plex-vers-jellyfin-2026-poster.svg",{"categorySlug":34,"appSlug":35},{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":141,"views":163,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":186},232,"heberger-matrix-synapse",{"fr":173,"en":175,"ar":176,"es":177},"host-matrix-synapse-and-element-on-your-own-vps","استضافة-matrix-synapse-وelement-على-خادم-vps-الخاص-بك","alojar-matrix-synapse-y-element-en-un-vps","Héberger Matrix (Synapse) et Element sur votre propre VPS","Déployez Matrix Synapse et Element Web self-hosted sur VPS : Docker, PostgreSQL, reverse proxy, bridges et purge d'historique. Guide complet 2026.","2026-01-19T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-matrix-synapse-poster.svg",{"categorySlug":25,"appSlug":187},"matrix-synapse",true,1794270722377]