Terminé

Media Stack

Le guide pas-à-pas pour les débutants : demande un film sur ton téléphone, il est téléchargé, trié et dispo sur ta TV automatiquement.

DockerJellyfinSonarrRadarrqBittorrentGluetun

Le Concept (Pour les non-initiés)

Imaginez l'expérience parfaite : vous êtes dans le canapé, vous ouvrez une application sur votre téléphone et vous demandez le dernier film sorti. Vous posez le téléphone, et 5 minutes plus tard, le film apparaît sur votre télévision, avec sa belle affiche, ses sous-titres, parfaitement rangé.

Pas de recherche sur des sites obscurs, pas de copier-coller de fichiers, pas de renommage manuel. Tout est 100% automatique. Ce miracle est possible grâce à un ensemble de logiciels gratuits et légaux (la "Stack") qui vont travailler ensemble. Ce guide est écrit pour que n'importe qui puisse y arriver, étape par étape.


Le Matériel : Sur quoi installer tout ça ?

Pour que cela fonctionne H24, il faut un appareil allumé en permanence. Vous avez deux grands choix :

  1. Un NAS Synology : C'est un boîtier avec plusieurs disques durs (très populaire).
  2. Un Mini-PC (Alternative recommandée) : Un petit ordinateur (comme un Intel N100 sous Ubuntu/Debian) caché à côté de la box internet. Souvent moins cher qu'un NAS, plus puissant pour la vidéo, et plus facile à configurer car il n'a pas les limitations imposées par Synology.

Note : Dans ce tutoriel, si vous n'utilisez pas de NAS Synology, vous devrez simplement remplacer les mentions /volume1/ du fichier d'installation par le chemin de votre disque dur (ex: /home/user/media/).


Étape 1 : Le Déploiement (La fondation)

Tous nos logiciels vont tourner dans "Docker". Imaginez Docker comme un grand immeuble, et chaque logiciel va occuper un appartement (un "conteneur") bien isolé.

Tout à la fin de cet article, vous trouverez un grand bloc de texte appelé docker-compose.yml. C'est le plan de construction de votre immeuble.

  1. Installez Docker sur votre NAS ou Mini-PC.
  2. Créez les dossiers qui accueilleront vos fichiers (ex: media et torrents).
  3. Lancez ce fichier docker-compose.yml (n'oubliez pas d'y mettre les vraies informations de votre fournisseur VPN !).

Une fois lancé, l'immeuble est construit. Passons maintenant à la décoration de chaque appartement !


Étape 2 : Configuration Pas-à-Pas (Le cœur du guide)

Règle vitale pour les débutants : Dans toutes les interfaces web que nous allons configurer, quand on vous demande de choisir un dossier, ne choisissez jamais les dossiers de votre ordinateur physique (comme C:/ ou /volume1/). Choisissez TOUJOURS les dossiers internes de Docker, c'est-à-dire /data/media ou /data/torrents.

1. qBittorrent (Le Téléchargeur)

C'est le logiciel qui va récupérer les fichiers sur internet (protégé par votre VPN).

  • Où aller ? Ouvrez votre navigateur et tapez http://IP_DE_VOTRE_MACHINE:8080.
  • Identifiants : Par défaut, tapez admin et adminadmin.
  • À faire : 1. Allez dans les réglages (l'engrenage) > Web UI et changez la langue en Français. 2. Allez dans Téléchargements et vérifiez que le chemin par défaut est bien /data/torrents. 3. Changez le mot de passe par défaut pour des raisons de sécurité.

2. Prowlarr (L'Annuaire)

C'est lui qui connaît les adresses de tous les sites de téléchargement (les "trackers").

  • Où aller ? http://IP_DE_VOTRE_MACHINE:9696.
  • À faire :
    1. Cliquez sur Add Indexer (Ajouter un indexeur).
    2. Cherchez vos sites préférés (ex: YGG, C411, La Cale) et entrez vos identifiants.
    3. Cliquez sur Test puis Save. S'il y a une coche verte, c'est gagné ! Prowlarr est connecté.

3. Radarr & Sonarr (Les Cerveaux)

Ce sont les chefs d'orchestre. Radarr gère les Films, Sonarr gère les Séries. La configuration est la même pour les deux.

  • Où aller ? http://IP_DE_VOTRE_MACHINE:7878 (Radarr) et 8989 (Sonarr).
  • À faire :
    1. Lier le téléchargeur : Allez dans Settings > Download Clients > cliquez sur le +. Choisissez qBittorrent. Dans "Host", tapez qbittorrent, le port 8080, et mettez le mot de passe que vous avez créé à l'étape 1. Cliquez sur Test et Sauvegardez.
    2. Créer la bibliothèque : Allez dans Settings > Media Management. Tout en bas, dans Root Folders, ajoutez le dossier /data/media/movies (pour Radarr) ou /data/media/tv (pour Sonarr).
    3. Activer la magie (Hardlinks) : Toujours dans Media Management, cochez la case "Use Hardlinks instead of Copy". C'est ce qui évite que votre disque dur ne se remplisse deux fois plus vite !

(Note : Prowlarr se liera tout seul à Radarr/Sonarr, vous n'avez rien à faire de ce côté !)

4. Jellyfin (Votre Netflix personnel)

C'est l'interface magnifique que vous verrez sur votre télévision.

  • Où aller ? http://IP_DE_VOTRE_MACHINE:8096.
  • À faire :
    1. Créez votre compte administrateur.
    2. Il va vous demander d'ajouter des bibliothèques. Cliquez sur le +.
    3. Choisissez le type "Films", et pour le dossier, naviguez jusqu'à /data/media/movies.
    4. Faites pareil pour les Séries en pointant vers /data/media/tv. Jellyfin va scanner ces dossiers et télécharger les affiches automatiquement.

5. Jellyseerr (Le Portail de Requêtes)

C'est l'application "vitrine" que vous donnerez à vos amis ou votre famille pour qu'ils demandent des films facilement, sans rien casser.

  • Où aller ? http://IP_DE_VOTRE_MACHINE:5055.
  • À faire :
    1. À la première ouverture, choisissez de vous connecter avec Jellyfin. Mettez l'adresse http://jellyfin:8096 et vos identifiants Jellyfin.
    2. Ensuite, il vous demandera d'ajouter vos serveurs Radarr et Sonarr. Utilisez les adresses http://radarr:7878 et http://sonarr:8989. Et voilà !

Dépannage (Les erreurs classiques)

  • Mon qBittorrent refuse de s'ouvrir ! Si vous utilisez un NAS Synology, il "oublie" souvent une pièce maîtresse pour le VPN au démarrage. Tapez ceci dans le terminal (SSH) de votre NAS pour réparer :
sudo mkdir -p /dev/net
sudo mknod /dev/net/tun c 10 200
sudo chmod 600 /dev/net/tun
sudo docker-compose up -d
  • Rien ne marche, mes conteneurs sont "fantômes". Parfois, Docker s'emmêle les pinceaux. La solution miracle est d'éteindre complètement l'immeuble et de le rallumer (les données ne seront pas perdues) :
sudo docker-compose down
sudo docker-compose up -d

Le Fichier Docker Compose Complet

Voici le plan de construction à utiliser à l'Étape 1. Pensez absolument à remplacer TA_CLE_PRIVEE_ICI et TON_IP_WIREGUARD_ICI par les informations fournies par votre fournisseur VPN (comme Surfshark, NordVPN, ou ProtonVPN).

version: "3.8"

services:

  # ── VPN & TÉLÉCHARGEMENT ──────────────────────

  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    environment:
      - VPN_SERVICE_PROVIDER=custom
      - VPN_TYPE=wireguard
      - WIREGUARD_PRIVATE_KEY=TA_CLE_PRIVEE_ICI
      - WIREGUARD_ADDRESSES=TON_IP_WIREGUARD_ICI
    ports:
      - 8080:8080    # qBittorrent Web UI
      - 6881:6881    # qBittorrent écoute (TCP)
      - 6881:6881/udp
    volumes:
      - /volume1/docker/gluetun:/gluetun
    restart: unless-stopped

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    # C'est cette ligne qui oblige le téléchargement à passer par le VPN :
    network_mode: "service:gluetun" 
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - WEBUI_PORT=8080
    volumes:
      - /volume1/docker/qbittorrent:/config
      - /volume1/torrents:/data/torrents
    depends_on:
      - gluetun
    restart: unless-stopped

  # ── RECHERCHE & INDEXEURS ─────────────────────

  flaresolverr:
    image: 21hsmw/flaresolverr:nodriver
    container_name: flaresolverr
    environment:
      - TZ=Europe/Paris
      - DRIVER=nodriver
    ports:
      - 8191:8191
    restart: unless-stopped

  jackett:
    image: lscr.io/linuxserver/jackett:latest
    container_name: jackett
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    ports:
      - 9117:9117
    volumes:
      - /volume1/docker/jackett:/config
      - /volume1/torrents:/downloads
    restart: unless-stopped

  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    ports:
      - 9696:9696
    volumes:
      - /volume1/docker/prowlarr:/config
    restart: unless-stopped

  # ── GESTIONNAIRES DE MÉDIAS (*ARR) ────────────

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    ports:
      - 7878:7878
    volumes:
      - /volume1/docker/radarr:/config
      - /volume1:/volume1
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    ports:
      - 8989:8989
    volumes:
      - /volume1/docker/sonarr:/config
      - /volume1:/volume1
    restart: unless-stopped

  # ── STREAMING & REQUÊTES ──────────────────────

  jellyfin:
    image: lscr.io/linuxserver/jellyfin:latest
    container_name: jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    ports:
      - 8096:8096
    volumes:
      - /volume1/docker/jellyfin:/config
      - /volume1/media:/data/media
    restart: unless-stopped

  jellyseerr:
    image: fallenbagel/jellyseerr:latest
    container_name: jellyseerr
    environment:
      - TZ=Europe/Paris
    ports:
      - 5055:5055
    volumes:
      - /volume1/docker/jellyseerr:/app/config
    restart: unless-stopped

  # ── SYSTÈME & ACCÈS EXTERNE ───────────────────

  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    ports:
      - 80:80      # HTTP
      - 443:443    # HTTPS (SSL)
      - 81:81      # Admin NPM
    volumes:
      - /volume1/docker/npm/data:/data
      - /volume1/docker/npm/letsencrypt:/etc/letsencrypt
    restart: unless-stopped

  homarr:
    image: ghcr.io/ajnart/homarr:latest
    container_name: homarr
    ports:
      - 7575:7575
    volumes:
      - /volume1/docker/homarr/configs:/app/data/configs
      - /volume1/docker/homarr/icons:/app/public/icons
      - /volume1/docker/homarr/data:/data
    restart: unless-stopped

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_CLEANUP=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped