Skip to content

💾 Partager un volume de médias entre Jellyfin et FileBrowser

Procédure compagnon des guides Installer Jellyfin et Installer FileBrowser, qui suppose les deux conteneurs déjà installés. Plutôt qu'un stockage dédié à Jellyfin, un unique volume LVM thin est créé sur l'hôte Proxmox puis bind-monté à la fois dans Jellyfin (lecture des médias) et dans FileBrowser (dépôt/gestion des fichiers par les utilisateurs) — évite de dupliquer les fichiers entre les deux services.

Valeurs d'exemple utilisées dans cette procédure :

Paramètre Valeur d'exemple
ID du conteneur Jellyfin 205
ID du conteneur FileBrowser 202
Volume LVM thin partagé pve/shared-media, 300G, monté sur /mnt/shared-media (host)
Chemin médias dans Jellyfin /data
Chemin médias dans FileBrowser /srv/media

1. Créer et monter le volume sur l'hôte Proxmox

# Volume LVM thin (ne consomme que l'espace réellement utilisé)
lvcreate -n shared-media -V 300G --thinpool pve/data
mkfs.ext4 -L shared-media /dev/pve/shared-media

mkdir -p /mnt/shared-media
mount /dev/pve/shared-media /mnt/shared-media
echo "/dev/pve/shared-media /mnt/shared-media ext4 defaults 0 2" >> /etc/fstab

# Propriétaire = utilisateur FileBrowser (uid/gid mappés host, cf conteneur non privilégié)
chown 100999:100996 /mnt/shared-media
chmod 775 /mnt/shared-media
for dir in films series musique photos; do
    mkdir -p /mnt/shared-media/$dir
    chown 100999:100996 /mnt/shared-media/$dir
    chmod 775 /mnt/shared-media/$dir
done

L'uid/gid 100999:100996 correspond au mapping unprivileged LXC de l'utilisateur filebrowser (uid 999 / gid 996 dans le conteneur 202) vers l'hôte (+100000). Adapter selon le uid/gid réel de votre service dans le conteneur cible.


2. Bind mount dans les deux conteneurs

pct set 202 --mp1 /mnt/shared-media,mp=/srv/media       # FileBrowser
pct set 205 --mp0 /mnt/shared-media,mp=/data            # Jellyfin

pct stop 202 && pct start 202
pct stop 205 && pct start 205

3. Ajouter la source dans la config FileBrowser

Dans /etc/filebrowser/config.yaml du conteneur FileBrowser :

server:
  sources:
    - path: "/srv/files"
      name: "Files"
    - path: "/srv/media"
      name: "Médias"
      config:
        defaultEnabled: true
pct exec 202 -- systemctl restart filebrowser

config.defaultEnabled: true donne accès à cette source à tout nouveau compte créé après ce changement — les comptes existants doivent recevoir l'accès manuellement (Settings → Users → éditer l'utilisateur → ajouter la source), defaultEnabled n'est pas rétroactif.


4. Créer les bibliothèques dans Jellyfin

/data contient maintenant les mêmes fichiers que /srv/media côté FileBrowser. Suivre l'étape "Créer les bibliothèques" du guide Installer Jellyfin pour les déclarer (/data/films, /data/series, /data/musique) — cette étape inclut un piège connu (scan interrompu) à lire avant de continuer.


Migration depuis un ancien serveur de médias

Si les médias existent déjà ailleurs, un simple rsync vers le volume avant l'étape 4 suffit :

rsync -av --progress root@ancien-serveur:/chemin/vers/media/ /mnt/shared-media/
chown -R 100999:100996 /mnt/shared-media