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
-
Créer un compte via https://www.yggtorrent.top/
-
Utiliser une adresse ProtonMail
-
Activer le compte avant de l’ajouter à Jackett
🐈 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
//🚨192.168.X.X🚨/media /mnt/media cifs credentials=/etc/samba/credentials,iocharset=utf8,nounix,uid=1000,gid=1000 0 0
Créer le dossier
nano /etc/samba/credentials
username=🚨NomUtilisateur🚨
password=🚨MotDePasse🚨
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é)
- Exemple :
🎞️ 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
ousonarr
-
-
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
- HDTV, WEB, Blu-ray, Remux (1080p et 2160p)
-
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
-
Ajouter un film/série depuis Jellyseerr
-
Radarr/Sonarr transmet à qBittorrent
-
Téléchargement dans
/downloads
-
Fichier déplacé dans
/films
ou/series
-
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.