Installer Jellyfin sur un VPS pour lire vos médias
Installez Jellyfin avec Docker sur un VPS : block storage, permissions des médias, direct play, transcodage CPU et accès distant sécurisé, sans GPU.
Ce que vous allez mettre en place
Un serveur multimédia Jellyfin sur un VPS : un conteneur, trois volumes et un disque de block storage contenant vos films et séries, accessibles depuis n’importe quel navigateur ou application Jellyfin. L’installation tient dans un fichier compose de quinze lignes. Les problèmes qui surviennent ensuite viennent de deux causes : les permissions de fichiers empêchent le conteneur de les lire, ou vous demandez à un VPS dépourvu de GPU de transcoder des vidéos qu’il n’a aucune raison de transcoder. Ce guide consacre l’essentiel de sa longueur à ces deux points, car c’est là que se concentrent les demandes d’assistance.
Jellyfin est gratuit et entièrement open source, sans compte, sans fonctionnalités payantes et sans télémétrie. C’est pourquoi il figure dans presque toutes les listes de solutions à auto-héberger en 2026. Il lit les contenus multimédias que vous possédez. Il ne fournit aucun contenu, et ce guide ne traite pas de l’acquisition de contenus.
La réalité du transcodage, avant de louer quoi que ce soit
Lisez d’abord cette section, car elle détermine ce que vous devez acheter. Un serveur multimédia fait l’une de deux choses lorsque vous lancez une lecture. Le direct play diffuse le fichier tel quel : le VPS lit les octets sur le disque et les envoie sur le réseau, avec une consommation CPU presque nulle. Le transcodage réencode la vidéo à la volée, par exemple vers une nouvelle résolution ou un nouveau codec, ou incruste les sous-titres. Cela mobilise entièrement le CPU.
Un VPS classique n’a pas de GPU. Chaque transcodage vidéo s’exécute donc sur le CPU avec libx264/libx265, et l’encodage logiciel coûte cher en ressources. Un seul transcodage H.264 en 1080p peut saturer plusieurs vCPU partagés. Un transcodage 4K ou HEVC ne parvient généralement pas à suivre la lecture en temps réel. La lecture se bloque alors et la mise en mémoire tampon se répète sans fin. Le transcodage matériel, qui rend cette opération économique sur un serveur domestique équipé d’un iGPU Intel ou d’une carte Nvidia, n’est tout simplement pas disponible, sauf si votre fournisseur loue des instances GPU.
Sur un VPS, la stratégie consiste donc à éviter le transcodage. Conservez votre bibliothèque dans des codecs que vos clients lisent nativement : vidéo H.264, audio AAC ou AC3, dans un conteneur MP4 ou MKV. Choisissez des applications clientes capables de faire du direct play : les applications Jellyfin natives pour Android TV, iOS et Roku, ainsi qu’Infuse, Kodi et Jellyfin Media Player pour ordinateur. Dans ce cas, le VPS n’a jamais besoin d’exécuter un transcodage ffmpeg pendant la lecture, et un serveur modeste doté de 2 vCPU peut diffuser vers plusieurs personnes simultanément. Si vous prévoyez de transcoder, il vous faudra un serveur bien plus puissant et plus coûteux. Même dans ce cas, la 4K reste un mauvais choix.
Faites également le calcul de la bande passante, car c’est l’autre surprise. Le direct play envoie le fichier à son propre débit. Un fichier 1080p compressé utilise 8-12 Mbps ; un remux Blu-ray 1080p utilise 20-30 Mbps ; un fichier 4K HDR utilise 40-80 Mbps. Trois personnes lisant directement des fichiers à 10 Mbps consomment 30 Mbps en upload continu depuis votre VPS. Vérifiez deux valeurs dans votre offre : le débit du port, qui doit pouvoir envoyer 30 Mbps, et le quota mensuel de transfert. Un film de deux heures à 10 Mbps représente environ 9 GB de trafic sortant. Un quota limité à 1 TB/mois permet donc de diffuser un peu plus d’une centaine de films de ce type par mois, soit trois ou quatre par jour. Un foyer qui regarde des contenus 4K, avec un débit quatre à huit fois supérieur, épuise ce quota bien plus rapidement. Comptabilisez tout ce qui génère du trafic sortant depuis le même serveur dans ce même quota, notamment un relais RustDesk auto-hébergé, qui transporte une session de bureau à distance complète lorsque deux pairs ne peuvent pas se connecter directement.
Prérequis
- Un VPS KVM Ubuntu 24.04 fraîchement installé, avec un accès root ou sudo, ainsi que Docker et le plugin Compose installés.
- Un volume de stockage en mode bloc pour les médias, dimensionné en fonction de votre bibliothèque (voir le dimensionnement ci-dessous). Le petit disque racine fourni avec un VPS n’est pas destiné à stocker vos films.
- Un nom de domaine si vous voulez un accès HTTPS public, ou un VPN WireGuard sur le même VPS si vous préférez conserver l’ensemble en privé.
- Des médias que vous êtes légalement autorisé à diffuser : vos propres copies, vos propres enregistrements et les fichiers qui vous appartiennent.
Montez d’abord le stockage en mode bloc
Attachez le volume depuis le panneau de votre fournisseur, puis identifiez-le et montez-le. Récupérez le nom du périphérique avec lsblk. Il sera semblable à /dev/sdb ou /dev/vdb, et ne désignera jamais le disque racine.
lsblk
sudo mkfs.ext4 /dev/sdb # ONLY on a new, empty volume: this ERASES it
sudo mkdir -p /mnt/media
sudo blkid /dev/sdb # copy the UUID shown for this deviceMontez-le avec son UUID, et non avec /dev/sdb, car les lettres des périphériques peuvent changer après un redémarrage. Vous pourriez alors formater ou monter le mauvais disque. Ajoutez une ligne à /etc/fstab :
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/media ext4 defaults,nofail 0 2sudo mount -a
df -h /mnt/medianofail est important : sans cette option, si le volume en mode bloc est détaché, la machine refuse de démarrer et bascule dans un shell d’urgence. L’erreur la plus grave consiste à exécuter mkfs.ext4 sur un volume qui contient déjà des données : cela les efface. Formatez uniquement les nouveaux volumes. Si le disque contient déjà votre bibliothèque, passez directement à la ligne de fstab.
Organisez les médias selon les attentes de Jellyfin
Jellyfin associe les métadonnées aux noms des dossiers et des fichiers. Si l’arborescence est incorrecte, les films apparaissent comme des fichiers sans titre et sans affiche, ou un épisode est associé à la mauvaise série. Quatre conventions suffisent dans presque tous les cas : chaque film doit se trouver dans son propre dossier, avec un nom de fichier correspondant, au format Name (Year) (Jellyfin considère l’année comme facultative, mais elle améliore fortement la fiabilité de l’association) ; les dossiers de saison doivent être nommés Season 01, et non S01 ; les fichiers d’épisode utilisent le format S01E01 ; et les épisodes spéciaux vont dans Season 00.
/mnt/media
├── Movies
│ ├── Blade Runner (1982)
│ │ └── Blade Runner (1982).mkv
│ └── Arrival (2016)
│ └── Arrival (2016).mkv
└── Shows
└── Severance (2022)
├── Season 01
│ ├── Severance - S01E01.mkv
│ └── Severance - S01E02.mkv
└── Season 00
└── Severance - The Lexington Letter.mkvLe (Year) des films n’est pas décoratif : il permet de distinguer les remakes afin que l’outil d’association sélectionne le bon titre. Conservez Movies et Shows dans des dossiers racine distincts, car chacun devient une bibliothèque Jellyfin dédiée à un type de contenu ; les mélanger perturbe le fournisseur de métadonnées. Jellyfin indexera sans problème un troisième dossier de photos, mais l’expérience reste limitée par rapport à celle d’un serveur photo dédié. Si vos albums sont importants, attribuez-leur une machine distincte exécutant PhotoPrism ou Immich et réservez celle-ci aux films et aux séries TV.
Permissions : la première cause des bibliothèques vides
Voici l’erreur qui peut vous faire perdre une soirée. L’image officielle jellyfin/jellyfin ne prend pas en charge les variables d’environnement PUID/PGID. Elles appartiennent à l’image LinuxServer.io (lscr.io/linuxserver/jellyfin). Avec l’image officielle, vous contrôlez l’utilisateur avec la clé user: dans compose. Si vous l’omettez, le conteneur s’exécute avec le compte root. Dans les deux cas, la règle est la même : l’uid/gid utilisé par le conteneur doit pouvoir lire et parcourir tous les répertoires contenant des médias.
Nous utiliserons l’uid/gid 1000, celui du premier utilisateur non-root sur une installation Ubuntu standard. Vérifiez le vôtre et définissez le propriétaire :
id # confirm your user is uid=1000 gid=1000
sudo chown -R 1000:1000 /mnt/media
sudo find /mnt/media -type d -exec chmod 755 {} \;
sudo find /mnt/media -type f -exec chmod 644 {} \;
mkdir -p ~/jellyfin/config ~/jellyfin/cache
sudo chown -R 1000:1000 ~/jellyfinLes répertoires doivent avoir le bit execute — le x dans 755 — et pas seulement le droit de lecture. Sans ce bit, le conteneur ne peut pas entrer dans le répertoire, même s’il peut en afficher le nom. Le piège qui vide toute une bibliothèque est le répertoire parent : si l’uid du conteneur ne peut pas parcourir le point de montage lui-même, il n’atteint jamais /media/Movies ni /media/Shows. Toutes les bibliothèques apparaissent alors vides, et Access to the path ... is denied est écrit dans le journal. Chaque répertoire de médias auquel il ne peut pas accéder est journalisé puis ignoré. Ainsi, un lot de fichiers copié avec root disparaît silencieusement de la bibliothèque. C’est pourquoi nous modifions récursivement le propriétaire et appliquons le bit execute à chaque répertoire, au lieu de corriger un seul dossier.
Le fichier docker-compose
services:
jellyfin:
image: jellyfin/jellyfin:12
container_name: jellyfin
user: "1000:1000"
restart: unless-stopped
ports:
- "127.0.0.1:8096:8096"
volumes:
- ./config:/config
- ./cache:/cache
- /mnt/media:/media:ro
environment:
- JELLYFIN_PublishedServerUrl=https://jellyfin.example.comLigne par ligne : jellyfin/jellyfin:12 suit la branche de versions 12.x actuellement publiée (12.2 au 2026-10-10). user: "1000:1000" définit l’uid/gid sous lequel s’exécute le processus Jellyfin. Cela ne modifie ni le propriétaire ni le mode des fichiers, car Docker conserve l’uid/gid de l’hôte sur les répertoires montés. C’est pourquoi le chown défini plus haut doit lui correspondre. /config contient l’ensemble du serveur : comptes, bibliothèques, métadonnées et état de lecture. Il doit donc être accessible en écriture et c’est ce répertoire qu’il faut sauvegarder. /cache est un espace de travail temporaire. Le montage des médias est :ro (en lecture seule) à dessein : par défaut, Jellyfin stocke les illustrations et les métadonnées sous /config. Il n’a donc jamais besoin d’écrire dans votre bibliothèque, et le mode lecture seule protège vos fichiers contre une suppression accidentelle ou un plugin défectueux. Le port est délibérément lié à 127.0.0.1 : l’interface web de Jellyfin utilise HTTP en clair, nous ne publions donc jamais 8096 sur Internet. JELLYFIN_PublishedServerUrl est l’adresse que le serveur annonce pour l’autodiscovery local, via une diffusion UDP sur le LAN. Les clients situés sur Internet ne la voient donc jamais et utilisent simplement l’URL que vous saisissez dans l’application. Définissez cette valeur sur l’adresse qui doit être communiquée aux clients et prévoyez de saisir cette URL manuellement sur les appareils distants.
Démarrez-le depuis le répertoire contenant le fichier compose :
docker compose up -d
docker logs -f jellyfinPremière exécution : assistant de configuration et bibliothèques
Le port étant lié à localhost, ouvrez l’assistant depuis votre ordinateur portable au moyen d’un tunnel SSH au lieu d’ouvrir une brèche dans le firewall :
ssh -L 8096:127.0.0.1:8096 you@your-vps-ipAccédez ensuite à http://localhost:8096. L’assistant vous guide d’abord dans le choix de la langue, puis dans la création d’un compte administrateur avec un mot de passe robuste. Ce compte donne accès à votre serveur : n’utilisez donc pas un mot de passe temporaire ou réutilisé. Ajoutez votre première bibliothèque : choisissez le type de contenu Movies, indiquez /media/Movies (le chemin dans le conteneur, pas le chemin sur l’hôte), puis recommencez avec Shows pour /media/Shows. Terminez l’assistant : Jellyfin lance alors l’indexation. Pour une petite bibliothèque, le résultat attendu est l’affichage des affiches et des titres en une ou deux minutes. Vous pourrez ajouter ou modifier les bibliothèques plus tard dans Dashboard → Libraries, puis forcer une nouvelle analyse avec Scan All Libraries. Ces affiches sont également ce qui rend un frontend alternatif intéressant une fois les bases opérationnelles, puisque Halcyon reconstitue la même bibliothèque sous la forme d’un vidéoclub des années 90 dans lequel vous pouvez vous déplacer à partir des illustrations déjà récupérées par Jellyfin.
Si vous utilisez le transcodage, même occasionnellement, ouvrez Dashboard → Playback → Transcoding et définissez le chemin temporaire du transcodage sur /cache/transcodes afin que les fichiers temporaires soient écrits sur le volume de cache au lieu de remplir /config. Laissez l’accélération matérielle définie sur None : aucun GPU n’est disponible pour l’accélérer.
Accès distant : reverse proxy TLS ou accès limité au VPN
Vous avez deux moyens sûrs d’accéder à Jellyfin depuis l’extérieur, et un moyen dangereux à éviter. La méthode dangereuse consiste à publier directement le port 8096 sur Internet : l’identifiant circule en clair et le port fait l’objet d’attaques par force brute en quelques heures.
Option A, reverse proxy TLS. Placez Jellyfin derrière un sous-domaine avec Traefik et TLS automatique pour vos applications Docker, ou derrière nginx avec un certificat Let’s Encrypt délivré par Certbot. Jellyfin utilise des WebSockets pour les mises à jour en temps réel. Le proxy doit donc transmettre les en-têtes de mise à niveau. Traefik le fait automatiquement. Avec nginx, vous devez les définir explicitement et utiliser HTTP/1.1 vers le backend, sinon la mise à niveau n’a pas lieu :
location / {
proxy_pass http://127.0.0.1:8096;
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}Définissez JELLYFIN_PublishedServerUrl sur l’adresse https:// afin que la découverte automatique locale annonce la bonne URL et que les applications distantes utilisent l’adresse que vous leur fournissez. Ajoutez aussi fail2ban pour ralentir les tentatives de force brute contre la page de connexion. Une fois le serveur public, configurez Uptime Kuma avec cette URL afin d’être informé d’une interruption avant vos utilisateurs. Configurez ses notifications avec un serveur ntfy auto-hébergé : une vérification en échec arrive alors sous forme de notification push sur votre téléphone, au lieu d’un e-mail lu le lendemain matin. Exposer une page de connexion sur Internet est également un bon moment pour auditer le reste du serveur, plutôt que de supposer que seul le port 443 répond : sudo ss -tlnp liste tous les ports en écoute et le processus associé. Si vous déployez également votre propre code sur le serveur, open-kritt analyse les dépôts et leurs dépendances à la recherche de vulnérabilités ; il audite le code source, pas les ports en écoute.
Option B, conserver l’accès privé sur un VPN. Ne publiez pas du tout le port 8096 sur Internet. Accédez à Jellyfin uniquement par un tunnel WireGuard qui se termine sur le même serveur. Pour un usage familial, c’est le choix sécurisé le plus simple : pas de certificat, aucune exposition publique et aucune surface d’attaque par force brute. La liaison à localhost du fichier compose ne suffit pas dans ce cas, car un port publié sur 127.0.0.1 n’est accessible que depuis le VPS lui-même, et non depuis les pairs VPN. Publiez plutôt le port sur l’adresse du tunnel du serveur, par exemple "10.8.0.1:8096:8096", en utilisant l’adresse IP de votre propre serveur WireGuard. Vous pouvez aussi conserver localhost et placer devant Jellyfin un proxy en écoute sur l’adresse du tunnel, puis vous connecter via le VPN. Consultez le guide de configuration d’un VPN WireGuard pour un VPS privé pour configurer le tunnel.
Dimensionnement du stockage et sauvegardes
Dimensionnez selon la qualité, pas selon le nombre de fichiers. Les films 1080p compressés occupent 4-15 GB chacun ; un remux 1080p occupe 20-40 GB ; une saison de série TV en 1080p occupe 15-40 GB ; en 4K, comptez 40-100 GB par film. Une bibliothèque de quelques centaines de films avec quelques séries nécessite un volume de 2-4 TB. Il est moins coûteux de surdimensionner le block volume une fois que de migrer les données plus tard.
/config contient l’état complet du serveur. C’est donc le seul élément que vous devez sauvegarder. Faites-en un snapshot, ou arrêtez le service puis créez une archive tar, et conservez la copie hors du serveur :
docker compose down
sudo tar czf jellyfin-config-$(date +%F).tgz -C ~/jellyfin config
docker compose up -d/cache et le dossier de transcodage sont supprimables. Sauvegardez séparément les médias de /mnt/media, ou considérez-les comme pouvant être réencodés depuis les supports d’origine. La plupart des utilisateurs choisissent la seconde option en raison du volume de données. Les mises à niveau utilisent docker compose pull && docker compose up -d. Le tag :12 ci-dessus reste dans la branche 12.x. Le passage à la version majeure suivante nécessite donc de modifier volontairement le tag. Consultez les notes de version de Jellyfin avant de procéder, car les migrations du schéma de la bibliothèque ont lieu lors des changements de version majeure. Jellyfin a supprimé le préfixe « 10. » de ses numéros de version avec la version 12.0 (septembre 2026) : 12.0 correspond à l’ancienne version 10.12, il n’existe pas de branche 11.x, et 10.11.x était la dernière branche utilisant l’ancien schéma. Si un ancien fichier compose contient encore jellyfin/jellyfin:10, il reste figé sur 10.11. Ce tag a été mis à jour pour la dernière fois le 2026-06-06, vers 10.11.11, et ne récupérera jamais une version 12.x. Le remplacer par :12 ne consiste pas seulement à modifier le tag : la version 12.0 modifie le schéma de la base de données et réécrit les données au premier démarrage. Arrêtez donc le serveur et effectuez d’abord la sauvegarde indiquée plus haut, car c’est le seul moyen de revenir en arrière. La version 12.0 peut être mise à niveau directement depuis 10.10.7 ou depuis n’importe quelle version 10.11.x. Elle nécessite ensuite une analyse complète de la bibliothèque, qui prend sensiblement plus de temps que d’habitude. Un tag épinglé et un répertoire d’état sauvegardé constituent la recette complète pour tout conteneur toujours actif. C’est aussi le principe qui permet de conserver la mémoire et les tâches planifiées d’un agent auto-hébergé après les redémarrages.
Modes d’échec et messages affichés
La bibliothèque est vide après une analyse. Le journal accessible dans Dashboard → Logs (ou ~/jellyfin/config/log/log_*.log) affiche :
System.UnauthorizedAccessException: Access to the path '/media/Movies' is denied.L’uid du conteneur ne peut pas lire ce chemin. Cause : les fichiers multimédias appartiennent à root ou à un uid différent de la valeur user:, un répertoire n’a pas le bit d’exécution, ou le point de montage parent n’est pas parcourable par cet uid. Correctif : chown -R 1000:1000 /mnt/media, répertoires 755, fichiers 644, puis relancez l’analyse.
La lecture utilise tout le CPU et se met en mémoire tampon. docker stats jellyfin indique une utilisation du CPU proche de 100 % multipliée par le nombre de cœurs, et Dashboard → Playback affiche la session comme Transcode avec une vitesse inférieure à 1.0x. Le client ne lit pas directement le média. Le VPS effectue un transcodage CPU plus lent que le temps réel et prend du retard. Cause : codec ou conteneur non pris en charge, incrustation des sous-titres, ou conversion des tons HDR. Correctif : utilisez un client compatible avec la lecture directe, conservez les sources en H.264/AAC, utilisez des sous-titres textuels (SRT) plutôt que des sous-titres image (PGS/VOBSUB), que la plupart des clients Jellyfin ne peuvent pas afficher eux-mêmes et qui forcent donc une incrustation, et désactivez complètement la lecture de contenus 4K HDR sur une machine équipée uniquement d’un CPU.
« Aucun flux compatible n’est disponible. » Le message complet est généralement « Ce client n’est pas compatible avec ce média et le serveur n’envoie pas de format multimédia compatible. » Le client a rejeté la source et le transcodage de secours n’a pas pu démarrer. Cause : commande ffmpeg incorrecte, fichier illisible ou profil utilisateur qui interdit la conversion vidéo. Correctif : lisez la ligne ffmpeg dans Dashboard → Logs, vérifiez que le fichier est bien lisible, contrôlez les permissions de lecture de l’utilisateur si le transcodage est nécessaire, et essayez un second client pour écarter un problème de codec du navigateur.
Les films n’ont pas d’affiche ou utilisent la mauvaise affiche. Les métadonnées ne correspondent pas. Cause : dossier ou nom de fichier qui ne correspond pas au titre utilisé par votre fournisseur de métadonnées, remake ou titre courant sans année pour différencier les versions, dossier de saison nommé S01 au lieu de Season 01, ou épisodes qui ne respectent pas le format S01E01. Correctif : renommez les éléments selon l’organisation indiquée plus haut, puis sélectionnez Refresh metadata → Replace all, ou utilisez Identify sur un seul élément pour sélectionner la bonne entrée TMDB/TVDB.
FAQ
Un VPS peut-il transcoder des vidéos sans GPU ?
Oui, mais uniquement sur le CPU, et le coût en ressources est élevé. Un seul transcodage logiciel en 1080p peut saturer plusieurs vCPU, tandis que la 4K ou le HEVC ne permettent généralement pas de suivre le temps réel : la lecture est alors mise en mémoire tampon. La meilleure solution consiste à éviter le transcodage : conservez votre bibliothèque en H.264/AAC et utilisez des applications clientes compatibles avec la lecture directe (« direct play »), afin que le VPS se contente de transmettre les données. Louez une instance avec GPU uniquement si vous avez réellement besoin d’un transcodage à la volée.
Pourquoi ma bibliothèque Jellyfin est-elle vide après une analyse ?
Dans presque tous les cas, le problème vient des permissions. L’image officielle jellyfin/jellyfin s’exécute avec l’utilisateur défini par user: (ou avec root) et, si cet uid ne peut pas lire les fichiers, l’analyse journalise Access to the path ... is denied et les ignore. Corrigez le propriétaire avec chown -R 1000:1000 /mnt/media, ajoutez le bit d’exécution aux répertoires (755), puis relancez l’analyse. Vérifiez également le répertoire parent : si l’uid du conteneur ne peut pas parcourir /mnt/media lui-même, il n’atteint jamais les répertoires de la bibliothèque et celle-ci reste vide. L’autre cause fréquente est une arborescence qui ne respecte pas les attentes de Jellyfin.
Comment accéder à Jellyfin à distance en toute sécurité ?
Deux options sont adaptées. Placez-le derrière un reverse proxy TLS sur un sous-domaine afin de chiffrer l’authentification et le flux, puis ajoutez fail2ban. N’exposez jamais le port 8096 en clair : votre mot de passe y serait transmis sans chiffrement. Vous pouvez aussi le garder entièrement privé et y accéder uniquement via un VPN, ce qui constitue le choix sécurisé le plus simple pour un usage familial. Configurez directement l’adresse publique dans les applications : l’autodiscovery repose sur une diffusion sur le réseau local et n’atteint donc pas les clients qui se connectent depuis Internet.
De quelle capacité disque et de quelle bande passante un VPS Jellyfin a-t-il besoin ?
La capacité disque dépend de la qualité : prévoyez 4-15 GB par film 1080p compressé, 20-40 GB par remux et 40-100 GB pour la 4K. La plupart des bibliothèques nécessitent donc un volume de blocs de 2-4 TB. La bande passante dépend du débit de la lecture directe : 8-12 Mbps par flux 1080p, et bien davantage en 4K. Vérifiez que le débit de votre port supporte le nombre de spectateurs simultanés et surveillez le quota mensuel de transfert. Ajoutez une marge de CPU si vous prévoyez de transcoder ; privilégiez la bande passante plutôt que le nombre de cœurs si vous prévoyez la lecture directe.
Est-il légal d’exécuter Jellyfin sur un VPS ?
Jellyfin est un logiciel libre et open source, et son exécution est parfaitement légale. Ce qui compte, c’est le contenu : diffusez uniquement des médias dont vous êtes propriétaire ou que vous êtes autorisé à détenir, comme vos propres copies de disques, vos enregistrements ou les fichiers pour lesquels vous disposez des droits nécessaires. Jellyfin ne fournit aucun média et aucun moyen d’en obtenir ; il sert de lecteur pour une bibliothèque que vous possédez déjà.