Français
Commencer

← Tous les templates · Médias

Déployez Jellyfin en un clic

Un serveur multimédia qui diffuse vos films, séries et musique sur tous vos appareils

Une alternative auto-hébergée à Plex et Emby.

Qu’est-ce que Jellyfin ?

Jellyfin est un serveur multimédia gratuit et open source, que l’on fait tourner à la place de Plex ou d’Emby. Il range les films, séries et musiques que vous possédez dans des médiathèques, avec affiches, résumés et distribution tirés de métadonnées en ligne, et les diffuse vers un navigateur, des téléphones, des tablettes et des téléviseurs. Des applications officielles existent pour Android, iOS, Android TV et Fire TV, Roku, les téléviseurs LG et Samsung, Xbox et Kodi, et Jellyfin Media Player tourne sur ordinateur. Chaque personne a son propre compte, avec sa progression de lecture et son contrôle parental.

Vous auto-hébergez Jellyfin pour regarder vos propres médias de n’importe où, sans compte chez une entreprise ni abonnement : il n’a ni version premium, ni pistage, ni serveurs centraux. Ce template le configure avec l’administrateur créé à partir des champs et trois médiathèques, Movies, Shows et Music, sur les dossiers d’un volume de médias. Le revers, c’est le transcodage. Quand un appareil ne peut pas lire un fichier tel quel, Jellyfin le convertit à la volée, ici sur le CPU, ce qui est gourmand : les fichiers que vos appareils lisent directement, comme la vidéo H.264 en MP4, sont donc les plus légers.

Hébergement de Jellyfin sur Pethost

  1. Vous vous connectez à Pethost avec une clé d’accès, GitHub ou Google. Pas encore de machine ? Vous choisissez une offre, et le lien attend qu’elle soit prête.
  2. Nouveau projet s’ouvre sur Jellyfin. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : Nom d’utilisateur, Mot de passe administrateur.
  3. En une minute ou deux, Jellyfin tourne à sa propre adresse en HTTPS. Ses secrets sont créés au hasard, et ses données sont dans la sauvegarde nocturne.
  4. C’est un projet comme les autres : vous ou votre agent pouvez le modifier, revenir à une version précédente ou le restaurer.

Questions sur Jellyfin

Jellyfin est-il vraiment gratuit ?

Oui. Jellyfin est un logiciel libre sous licence GNU GPL : son serveur et ses applications officielles ne coûtent rien, sans version premium ni fonctions payantes. Il est développé par des bénévoles.

Jellyfin ou Plex : quelle différence ?

Les deux diffusent vos propres médias vers vos appareils. Le serveur de Plex n’est pas open source, ses comptes passent par plex.tv et, depuis avril 2025, regarder vos médias hors de chez vous demande un Plex Pass ou un Remote Watch Pass. Jellyfin est open source, ne demande aucun compte extérieur et ne fait rien payer.

Quels appareils sont compatibles avec Jellyfin ?

Tout navigateur récent, ainsi que les applications officielles pour Android, iOS, Android TV et Fire TV, Roku, LG webOS, Samsung Tizen et Xbox. Jellyfin Media Player tourne sous Windows, macOS et Linux, et l’extension JellyCon intègre Jellyfin à Kodi.

Comment nommer mes films et séries pour Jellyfin ?

Donnez à chaque film un dossier portant son titre et son année, comme Big Buck Bunny (2008), avec à l’intérieur la vidéo sous le même nom. Une série a son propre dossier, avec Season 01, Season 02 et ainsi de suite à l’intérieur, et des épisodes nommés comme Show Name S01E01.mkv. Jellyfin trouve alors les bonnes affiches et les bons résumés.

Jellyfin a-t-il besoin d’un GPU ?

Non. Un GPU ne fait qu’accélérer le transcodage, la conversion dont un appareil a besoin quand il ne peut pas lire un fichier tel quel ; sans GPU, Jellyfin transcode sur le CPU. La vidéo HDR est le cas difficile : selon la documentation de Jellyfin, aucun CPU grand public récent n’en fait le mappage tonal en temps réel. Les fichiers que vos appareils lisent tels quels ne demandent aucun transcodage.

De combien de mémoire et de disque Jellyfin a-t-il besoin ?

Jellyfin prend environ 250 MB de mémoire au repos, et le disque, c’est votre médiathèque ; le transcodage d’une vidéo tourne sur le CPU et il est gourmand. Sur Pethost, l’offre Starter lui suffit, avec de la place pour d’autres applications à côté.

Le fichier Docker Compose de Jellyfin

Le template, c’est ce compose.yaml et les variables écrites dans le .env du projet à sa création. Pethost exécute le fichier tel qu’il est écrit.

Conteneurs : jellyfin (jellyfin/jellyfin:12).

Volumes, dans la sauvegarde nocturne : config, cache, media.

services:
  jellyfin:
    image: jellyfin/jellyfin:12
    restart: unless-stopped
    environment:
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # A new server's startup wizard is open to whoever comes first. So until the wizard is done,
    # Jellyfin runs on port 8097, which nobody reaches: there it is given the administrator from
    # the fields and a library for each folder of /media, and only then answers on 8096.
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        set -e
        config=/config/config
        if ! grep -qs '<IsStartupWizardCompleted>true<' "$$config/system.xml"; then
          mkdir -p "$$config" /media/movies /media/shows /media/music
          if [ -f "$$config/network.xml" ]; then
            sed -i 's|<InternalHttpPort>[0-9]*<|<InternalHttpPort>8097<|' "$$config/network.xml"
          else
            printf '<?xml version="1.0" encoding="utf-8"?>\n<NetworkConfiguration>\n  <InternalHttpPort>8097</InternalHttpPort>\n</NetworkConfiguration>\n' > "$$config/network.xml"
          fi
          /jellyfin/jellyfin &
          setup=$$!
          api() { curl -fsS -H 'Content-Type: application/json' "$$@"; }
          # 401: an administrator with a password exists already, from a first start cut short,
          # and Jellyfin has marked its wizard done by itself.
          until wizard=$$(curl -sS -o /dev/null -w '%{http_code}' http://127.0.0.1:8097/Startup/Configuration) &&
            { [ "$$wizard" = 200 ] || [ "$$wizard" = 401 ]; }; do sleep 2; done
          if [ "$$wizard" = 200 ]; then
            api -d '{"ServerName":"Jellyfin","UICulture":"en-US","MetadataCountryCode":"US","PreferredMetadataLanguage":"en"}' http://127.0.0.1:8097/Startup/Configuration
            library() {
              api http://127.0.0.1:8097/Library/VirtualFolders | grep -q "\"Name\":\"$$1\"" ||
                api -d '{"LibraryOptions":{"EnableRealtimeMonitor":true}}' "http://127.0.0.1:8097/Library/VirtualFolders?name=$$1&collectionType=$$2&paths=/media/$$3"
            }
            library Movies movies movies
            library Shows tvshows shows
            library Music music music
            api -o /dev/null http://127.0.0.1:8097/Startup/User
            json() { printf '%s' "$$1" | sed 's/\\/\\\\/g; s/"/\\"/g'; }
            api -d "{\"Name\":\"$$(json "$$ADMIN_USERNAME")\",\"Password\":\"$$(json "$$ADMIN_PASSWORD")\"}" http://127.0.0.1:8097/Startup/User
            api -d '{"EnableRemoteAccess":true,"EnableAutomaticPortMapping":false}' http://127.0.0.1:8097/Startup/RemoteAccess
            api -X POST http://127.0.0.1:8097/Startup/Complete
          fi
          kill $$setup
          wait $$setup || true
          sed -i 's|<InternalHttpPort>8097<|<InternalHttpPort>8096<|' "$$config/network.xml"
        fi
        exec /jellyfin/jellyfin
    volumes:
      - config:/config
      - cache:/cache
      # Writable, so that films, shows and music can be copied in over SFTP.
      - media:/media

volumes:
  config:
  cache:
  media:

Aussi dans Médias