Skip to content

Serveur multimédia

installation_serveur-multimedia_linux1~# Installer un Serveur Multimédia - (Jellyfin)

Tutoriel complet pour une stack Docker locale incluant Jellyfin, Jellyseerr, qBittorrent, Jackett, Radarr, Sonarr avec une configuration robuste et fonctionnelle. Inclut la configuration d'un VPN avec Gluetun pour anonymiser qBittorrent, Jackett et FlareSolverr, ainsi que l'utilisation de YggTorrent.


🧪 Prérequis

Matériel recommandé

  • 💻 Serveur ou VM avec :

    • Processeur : 4 cœurs minimum

    • RAM : 8 à 12 Go

    • Stockage :

      • 80 Go pour le système

      • 1 To pour les médias (RAID 5 recommandé)

Réseau

  • IP statique : 192.168.X.X

  • DNS recommandé : 8.8.8.8

  • Ports à ouvrir :

    • 8096 Jellyfin

    • 7878 Radarr

    • 8989 Sonarr

    • 9117 Jackett

    • 5055 Jellyseerr

    • 8080 qBittorrent

    • 6881 qBittorrent (TCP/UDP)

    • 3001 Uptime-Kuma

    • 8191 FlareSolverr

Compte YggTorrent


🐈 Système

  • OS : Debian / Ubuntu

  • VM nommée Media


🔗 Montage du partage multimédia

/media/
├── downloads/
├── films/
└── series/

Montage temporaire :

apt update && apt install cifs-utils -y
mkdir -p /mnt/media/downloads /mnt/media/films /mnt/media/series
mount -t cifs //192.168.X.X/media /mnt/media -o username=NomUtilisateur,password=MotDePasseSecurise,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777

Montage permanent :

Éditer le fichier :

nano /etc/fstab
Puis copier ceci en bas
//🚨192.168.X.X🚨/media /mnt/media cifs credentials=/etc/samba/credentials,iocharset=utf8,nounix,uid=1000,gid=1000 0 0
ctrl+x -> y/o

Créer le dossier

nano /etc/samba/credentials
Puis copier y les identifiant nécessaire pour accéder au partage
username=🚨NomUtilisateur🚨
password=🚨MotDePasse🚨
ctrl+x -> y/o

Sécuriser le fichier

chmod 600 /etc/samba/credentials

monter le partage directement

mount -a


🐳 Installation de Docker

apt update && apt install curl -y
curl -fsSL https://get.docker.com | sh
usermod -aG docker $USER
newgrp docker
apt install docker-compose -y

📁 Arborescence du projet

mkdir -p /opt/media-server/gluetun
mkdir -p /opt/media-server/jellyseerr-config
cd /opt/media-server
cp /chemin/vers/ton-fichier.ovpn gluetun/default.ovpn

📀 Fichier docker-compose.yml

services:
  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
    volumes:
      - ./gluetun:/gluetun
    environment:
      - TZ=Europe/Paris
      - VPN_SERVICE_PROVIDER=custom
      - OPENVPN_USER=🚨IdentifiantVPN🚨
      - OPENVPN_PASSWORD=🚨MotDePasseVPN🚨
#     - OPENVPN_CONFIG=default.ovpn
      - OPENVPN_CUSTOM_CONFIG=/gluetun/default.ovpn
      - DOT=off
      - DNS=1.1.1.1
    ports:
      - "8080:8080"
      - "9117:9117"
      - "8191:8191"
      - "6881:6881"
      - "6881:6881/udp"
    restart: unless-stopped

  qbittorrent:
    image: hotio/qbittorrent:latest
    container_name: qbittorrent
    network_mode: service:gluetun
    depends_on:
      - gluetun
    volumes:
      - qbittorrent-config:/config
      - /mnt/media/downloads:/downloads
      - /mnt/media/downloads:/app/qBittorrent/downloads
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - WEBUI_PORT=8080
    restart: unless-stopped

  jackett:
    image: lscr.io/linuxserver/jackett
    container_name: jackett
    network_mode: service:gluetun
    depends_on:
      - gluetun
    volumes:
      - jackett-config:/config
      - /mnt/media/downloads:/downloads
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    restart: unless-stopped

  flaresolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    network_mode: service:gluetun
    depends_on:
      - gluetun
    environment:
      - LOG_LEVEL=info
      - CAPTCHA_SOLVER=none
      - BROWSER_TIMEOUT=180
    restart: unless-stopped

  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    restart: unless-stopped
    network_mode: host
    volumes:
      - /mnt/media:/media
      - jellyfin-config:/config
    environment:
      - TZ=Europe/Paris

  radarr:
    image: lscr.io/linuxserver/radarr
    container_name: radarr
    restart: unless-stopped
    ports:
      - "7878:7878"
    volumes:
      - /mnt/media/films:/films
      - /mnt/media/downloads:/downloads
      - radarr-config:/config
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris

  sonarr:
    image: lscr.io/linuxserver/sonarr
    container_name: sonarr
    restart: unless-stopped
    ports:
      - "8989:8989"
    volumes:
      - /mnt/media/series:/series
      - /mnt/media/downloads:/downloads
      - sonarr-config:/config
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris

  jellyseerr:
    image: fallenbagel/jellyseerr
    container_name: jellyseerr
    restart: unless-stopped
    ports:
      - "5055:5055"
    volumes:
      - ./jellyseerr-config:/app/config
    environment:
      - LOG_LEVEL=info
      - TZ=Europe/Paris

  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma-data:/app/data
    environment:
      - TZ=Europe/Paris

volumes:
  jellyfin-config:
  radarr-config:
  sonarr-config:
  jellyseerr-config:
  qbittorrent-config:
  jackett-config:
  uptime-kuma-data:

😎 Services couverts par le VPN

Les services suivants passent par Gluetun (VPN) :

  • qBittorrent

  • Jackett

  • FlareSolverr

Les autres services (Jellyfin, Radarr, Sonarr, Jellyseerr, Uptime-Kuma) restent sur le réseau local pour une accessibilité optimale.


⚙️ Accès aux interfaces Web

  • Jellyfin : http://192.168.X.X:8096

  • Jellyseerr : http://192.168.X.X:5055

  • Radarr : http://192.168.X.X:7878

  • Sonarr : http://192.168.X.X:8989

  • qBittorrent : http://192.168.X.X:8080

  • Jackett : http://192.168.X.X:9117

  • Uptime-Kuma : http://192.168.X.X:3001


🔐 Identifiants

Tous les services utilisent les identifiants suivants (modifiables dans chaque interface) :

  • Utilisateur : Utilisateur

  • Mot de passe : MotDePasseSecurise

Pour Jackett :

  • Définir un mot de passe admin dans l’interface.

  • Valider les paramètres pour qu’ils soient conservés.

Pour qBittorrent :

docker logs qbittorrent
[info] Default WebUI credentials:
Username: admin
Password: <mot_de_passe_temporaire>
  • Puis dans "paramètre" > "UI Web" changer le mots de passe

  • Valider les paramètres pour qu’ils soient conservés.


🛠️ Paramètres à configurer

🎬 Jellyfin

  • Ajouter les bibliothèques suivantes :

    • Films : /media/films

    • Séries : /media/series

  • Activer la détection automatique dans les paramètres de bibliothèque si besoin.

🧩 Jackett

  • Ajouter un ou plusieurs indexeurs francophones (ex. YggTorrent, Cpasbien, Torrent9, etc.).

  • Pour chaque indexeur :

    • Cliquer sur l’icône 🔗 à droite pour copier le lien Torznab.

    • Noter la clé API (API Key) affichée en haut de la page de Jackett.

  • Dans Radarr et Sonarr :

    • Ajouter Jackett comme indexeur en utilisant :

      • URL Torznab

      • Clé API

  • Si l’indexeur est protégé par Cloudflare (comme YggTorrent), ajouter :

    • FlareSolverr : http://localhost:8191

    • Configurer Jackett pour utiliser ce proxy.

🧲 qBittorrent

  • Créer une catégorie dédiée dans qBittorrent :

    • Exemple : radarr (pour les films), sonarr (pour les séries)
    • Définir le répertoire de téléchargement :

    • /downloads (dans le conteneur)

    • Vérifier que les identifiants sont bien renseignés dans Radarr/Sonarr :

    • Nom d’utilisateur : (user personnalisé)

    • Mot de passe : (mot de passe personnalisé)

🎞️ Radarr / Sonarr

  • Ajout des dossiers racines :

    • Radarr : /films

    • Sonarr : /series

  • Ajout du client de téléchargement :

    • Type : qBittorrent

    • Adresse : 192.168.4.170

    • Port : 8080

    • URL Base : (laisser vide)

    • Utilisateur : spider

    • Catégorie : radarr ou sonarr

  • Indexeurs :

    • Ajouter Jackett en utilisant l'URL Torznab + API Key.
    • Profils de qualité :

    • Créer un profil "Complet" incluant :

      • HDTV, WEB, Blu-ray, Remux (1080p et 2160p)
        • Activer les mises à niveau automatiques
    • Langue : Français

    • Dans "Download Clients > Edit qBittorrent > Remote Path Mapping" :

    • Host : 192.168.4.170

    • Remote : /app/qBittorrent/downloads

    • Local : /downloads

🎟️ Jellyseerr

  • Lier Jellyseerr à :

    • Jellyfin : pour afficher les médias disponibles

    • Radarr : pour la gestion des films

    • Sonarr : pour la gestion des séries

  • Vérifier les chemins de stockage (/films/series) et les profils utilisés (qualité, langue, etc.)

📡 Uptime Kuma

  • Ajouter les moniteurs suivants :

    • Interface Jellyfin

    • Port Jackett

    • Port qBittorrent

    • Services FlareSolverr, Radarr, Sonarr, Jellyseerr, etc.

  • Vérifier l’état des services Docker et redémarrer si besoin.


✅ Test de fonctionnement

  1. Ajouter un film/série depuis Jellyseerr

  2. Radarr/Sonarr transmet à qBittorrent

  3. Téléchargement dans /downloads

  4. Fichier déplacé dans /films ou /series

  5. Jellyfin détecte le nouveau média automatiquement


🤕 Dépannage

chown -R 1000:1000 /mnt/media
  • Vérifier les chemins et permissions

  • Consulter les logs :

docker logs <nom_du_conteneur>

🗓️ Sauvegarde

cd /opt/media-server
tar -czf sauvegarde_media_config.tar.gz *-config

🛠️ Rôle des services

  • Jellyfin : Serveur multimédia

  • Radarr : Gestion des films

  • Sonarr : Gestion des séries

  • Jellyseerr : Interface de demande

  • qBittorrent : Téléchargement BitTorrent via VPN

  • Jackett : Indexeurs torrent via VPN

  • FlareSolverr : Contourne les protections Cloudflare via VPN

  • Uptime Kuma : Supervision

  • Gluetun : VPN sécurisé pour tous les services P2P


🔄 Redémarrage des services

cd /opt/media-server
docker compose up -d

✅ Conclusion

Cette configuration vous offre un serveur multimédia complet, anonyme et fiable grâce à l'intégration du VPN via Gluetun. Uptime Kuma permet de superviser tous les services, et Jellyfin propose une interface moderne et efficace pour profiter de vos médias.