Le Cerveau en action : transformer le chaos du P2P en un Media Server organisé.
Accueil / Guide Media Server Docker 2026 (Partie 2) : Automatisation avec Sonarr, Radarr & Prowlarr

Guide Media Server Docker 2026 (Partie 2) : Automatisation avec Sonarr, Radarr & Prowlarr

Vous suivez notre guide sur la création du Media Server Docker ultime ? Bienvenue dans la phase d’intelligence.

Dans la Partie 1, nous avons construit un bunker : un client de téléchargement (qBittorrent) isolé du monde par un VPN (Gluetun) et piloté par une interface moderne (Qui). C’est robuste, mais c’est bête. Pour l’instant, vous devez ajouter vos torrents manuellement.

Aujourd’hui, nous installons le « Cerveau » de votre Media Server. Nous allons automatiser la recherche, standardiser le nommage des fichiers et, surtout, garantir que nous ne téléchargeons que de la qualité (fini les CAMs russes et les fakes 4K).

Au programme :

  1. Prowlarr : La tour de contrôle des indexers (la résilience).
  2. Sonarr & Radarr : Les chefs d’orchestre, connectés via le proxy sécurisé de Qui.
  3. Recyclarr : La gestion des qualités des releases à télécharger.
  4. qbit_manage : Le majordome de qBittorrent (Gestion des tags, catégories et nettoyage).

1. L’extension du docker-compose.yml

On reprend notre fichier de la Partie 1 et on y ajoute nos gestionnaires.

⚠️ Notez bien le mapping des volumes ${DATA_DIR}:/data (ou /data:/data). Il doit être identique à celui de qBittorrent pour que les Hardlinks fonctionnent. Si Sonarr voit /media/tv et qBittorrent voit /data/torrents, le hardlink échouera, provoquant une copie lente et doublant l’espace disque utilisé.

Ajoutez ces services à votre docker-compose.yml :

YAML
services:
  # ... (gluetun, qbittorrent, qui sont déjà là) ...

  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${CONFIG_DIR}/prowlarr:/config
    ports:
      - 9696:9696
    restart: always

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${CONFIG_DIR}/sonarr:/config
      - ${DATA_DIR}:/data
    ports:
      - 8989:8989
    restart: always

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${CONFIG_DIR}/radarr:/config
      - ${DATA_DIR}:/data
    ports:
      - 7878:7878
    restart: always

  recyclarr:
    image: recyclarr/recyclarr
    container_name: recyclarr
    user: ${PUID}:${PGID}
    volumes:
      - ${CONFIG_DIR}/recyclarr:/config

  qbit_manage:
    image: ghcr.io/stuffanthings/qbit_manage:latest
    container_name: qbit_manage
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - QBT_SCHEDULE=30
    volumes:
      - ${CONFIG_DIR}/qbit_manage:/config
      - ${DATA_DIR}:/data
    restart: unless-stopped

Lancez la mise à jour de la stack :

Bash
docker compose up -d

2. Prowlarr : L’Abstraction nécessaire

Oubliez Jackett. Prowlarr s’intègre nativement avec Sonarr et Radarr. Son rôle est simple : vous configurez vos sites de torrents (Indexers) ici, et il les synchronise automatiquement vers les autres applications.

  1. Accédez à http://VOTRE_IP:9696.
  2. Créez un compte ou configurez l’auth (recommandé).
  3. Ajoutez vos indexers (bouton « Add Indexer »).
    • Pour commencer simple : Cherchez des trackers publics fiables comme 1337x, TorrentGalaxy ou des trackers FR si disponibles.
  4. Allez dans Settings > Apps.
  5. Connectez Sonarr et Radarr :
    • Prowlarr Server : http://prowlarr:9696 (C’est l’URL que Sonarr utilisera pour interroger Prowlarr. Attention à bien mettre le nom du conteneur !)
    • Sonarr/Radarr Server : http://sonarr:8989 ou http://radarr:7878 (L’URL que Prowlarr utilise pour pousser les infos).
    • API Key : Récupérez-les via votre navigateur dans Settings > General (sur http://VOTRE_IP:8989 et http://VOTRE_IP:7878).
  6. Cliquez sur « Sync App Indexers ».
Dashboard Prowlarr : Tous vos trackers gérés au même endroit.

Si un site change d’URL ou ferme, vous le modifiez uniquement dans Prowlarr. Sonarr et Radarr n’ont même pas besoin de savoir que la source a changé. C’est du découplage propre.

3. La Connexion Sécurisée via « Qui » (Le Reverse Proxy)

C’est ici que notre architecture se distingue des tutos de 2020.

Habituellement, on connecte Sonarr à qBittorrent en entrant le login/mdp administrateur de qBittorrent dans la config de Sonarr. C’est une mauvaise pratique de sécurité (couplage fort, credentials root qui traînent).

Nous allons utiliser le Reverse Proxy intégré à Qui.

  1. Accédez à Qui (http://VOTRE_IP:7476).
  2. Allez dans Settings > Client Proxy Keys.
  3. Cliquez sur Create Client API Key.
  4. Nommez-la « Sonarr » et sélectionnez votre instance qBittorrent.
  5. Copiez l’URL générée. Elle ressemble à : http://localhost:7476/proxy/abc123...

Configuration dans Sonarr (et Radarr) :

  1. Allez dans Settings > Download Clients.
  2. Cliquez sur le bouton + pour ajouter un client qBittorrent.
  3. Activez « Show Advanced » (en bas à gauche, à côté du bouton Test) pour voir le champ URL Base.
  4. Name : qBit-Qui
  5. Host : gluetun (Qui tourne dans le réseau de Gluetun, c’est son hostname Docker).
  6. Port : 7476 (Le port de Qui, pas celui de qBit !).
  7. URL Base : /proxy/VOTRE_CLE_API_GENEREE (Collez la partie après le port, ex: /proxy/abc...).
  8. Username/Password : Laissez vide ! C’est Qui qui gère l’auth via la clé dans l’URL.
  9. Category : Changez tv-sonarr (par défaut) en sonarr (et radarr pour les films). Qui ne gère pas encore bien les tirets - dans les noms de catégories et risque de bloquer la sauvegarde.

Testez. Ça passe au vert. Vous avez maintenant une connexion découplée et sécurisée. Répétez l’opération pour Radarr.

4. Recyclarr : La gestion des qualités

Configurer les « Custom Formats » à la main dans Sonarr (pour préférer le x265, éviter le HDR si on n’a pas d’écran compatible, bannir les CAMs) est un enfer de clics. Les TRaSH Guides sont la référence mondiale, mais ils sont fastidieux à appliquer manuellement.

Recyclarr automatise ça. On définit ce qu’on veut dans un fichier YAML, et il configure Sonarr/Radarr pour nous via leurs APIs.

Le secret pour bien démarrer : Les Templates.

Ne réinventez pas la roue. Recyclarr fournit des fichiers de configuration « prêts à l’emploi » (Starter Configs) maintenus par la communauté. C’est le moyen le plus simple et le plus sûr de commencer : Voir les templates officiels sur GitHub

Créez le fichier ${CONFIG_DIR}/recyclarr/recyclarr.yml. Voici un exemple basique utilisant les templates pour une configuration 4K optimisée, à adapter avec vos clés API :

YAML
sonarr:
  fr-bluray-web-2160p-v4:
    base_url: http://sonarr:8989
    api_key: VOTRE_API_KEY_SONARR
    
    # On importe les templates officiels pour ne pas tout écrire à la main
    include:
      - template: sonarr-quality-definition-series
      - template: sonarr-v4-quality-profile-bluray-web-2160p-french-multi-vo
      - template: sonarr-v4-custom-formats-bluray-web-2160p-french-multi-vo
      
    # On peut surcharger ou ajouter des Custom Formats spécifiques ici
    custom_formats:
      # Exemple : Bannir les releases "bad audio" (ID TRaSH fictif pour l'exemple)
      - trash_ids:
          - 9b27ab6498ec0f31a3353992e19434ca
        assign_scores_to:
          - name: FR-MULTi-VO-WEB-2160p # Nom du profil défini dans le template
      
      # Exemple : Donner un gros score au x265
      - trash_ids:
          - 47435ece6b99a0b477caf360e79ba0bb
        assign_scores_to:
          - name: FR-MULTi-VO-WEB-2160p
            score: 100

Lancez la synchro manuelle pour appliquer la config :

Bash
docker compose run --rm recyclarr sync

Allez voir dans Sonarr (Settings > Custom Formats) : vos règles sont importées. Dans vos profils de qualité, les versions « CAM » auront un score négatif ou seront rejetées. Votre stack est devenue intelligente. Maintenant que Sonarr est configuré, n’oubliez pas de faire la même chose avec Radarr.

Voici un exemple avec ma configuration. Ça différera forcément d’un Media Server à l’autre, chacun ayant des besoins différents.

Les Custom Formats importés dans Sonarr : une gestion fine et automatisée.

5. qbit_manage : Le Majordome

Sonarr et Radarr savent lancer des téléchargements, mais ils ne savent pas nettoyer derrière eux. Si vous mettez à jour un film, l’ancien fichier reste souvent en seed indéfiniment. C’est là qu’intervient qbit_manage. Il peut :

  • Tagguer automatiquement vos torrents en fonction du tracker (utile pour le filtrage).
  • Gérer les catégories.
  • Supprimer les torrents orphelins (fichiers qui ne sont plus dans qBit).
  • Identifier les torrents sans seeders.

Configuration : Au premier lancement, qbit_manage va créer un fichier config.yml vierge dans votre dossier de config. Vous devez l’éditer pour le connecter à votre qBittorrent.

Vous pouvez utiliser le proxy Qui ici aussi pour la connexion ! (url: http://gluetun:7476/proxy/...).

Voici une configuration de base robuste pour commencer :

YAML
commands:
  dry_run: false
  tag_nohardlinks: true
  share_limits: true
  cat_update: false
  tag_update: false
  rem_unregistered: false
  recheck: false
  tag_tracker_error: false
  rem_orphaned: false
  skip_cleanup: false
  skip_qb_version_check: false

qbt:
  host: http://gluetun:7476/proxy/VOTRE_CLE_API_GENEREE
  user:
  pass:

directory:
  root_dir: /data/torrents

settings:
  force_auto_tmm: false
  tracker_error_tag: issue
  nohardlinks_tag: noHL
  stalled_tag: stalledDL
  share_limits_tag: ~share_limit
  share_limits_min_seeding_time_tag: MinSeedTimeNotReached
  share_limits_min_num_seeds_tag: MinSeedsNotMet
  share_limits_last_active_tag: LastActiveLimitNotReached
  cat_filter_completed: true
  share_limits_filter_completed: true
  tag_nohardlinks_filter_completed: true
  rem_unregistered_filter_completed: false
  cat_update_all: true
  force_auto_tmm_ignore_tags: []
  disable_qbt_default_share_limits: true
  tag_stalled_torrents: true
  rem_unregistered_ignore_list: []
  rem_unregistered_grace_minutes: 10
  rem_unregistered_max_torrents: 10
  private_tag:

cat:
  radarr: /data/torrents/downloads
  sonarr: /data/torrents/downloads
  cross-seed-link: /data/torrents/cross-seed
  radarr.cross-seed: /data/torrents/cross-seed
  sonarr.cross-seed: /data/torrents/cross-seed

# Vous pouvez tagguer vos trackers ici
tracker:
  other:
    tag: other


# On liste uniquement les catégories qu'on veut scanner pour les hardlinks.
nohardlinks:
  radarr:
    exclude_tags: []
  sonarr:
    exclude_tags: []
  cross-seed-link:
    exclude_tags: []
  radarr.cross-seed:
    exclude_tags: []
  sonarr.cross-seed:
    exclude_tags: []

share_limits:
  # RÈGLE 1 : PROTECTION
  # On garde en seed les fichiers utilisés par Plex
  protected_media:
    priority: 1
    exclude_all_tags: [noHL]
    categories:
      - radarr
      - sonarr
      - cross-seed-link
      - radarr.cross-seed
      - sonarr.cross-seed
    max_ratio: -1
    max_seeding_time: -1
    cleanup: false

  # RÈGLE 2 : NETTOYAGE
  # Si un fichier n'est pas utilisé par Plex => On supprime après X temps/ratio
  recycle_bin:
    priority: 2
    include_all_tags: [noHL]
    categories:
      - radarr
      - sonarr
      - cross-seed-link
      - radarr.cross-seed
      - sonarr.cross-seed
    max_ratio: 1.0
    max_seeding_time: 21600 # 15 jours
    min_seeding_time: 10080 # 7 jours min
    cleanup: true

6. Configuration Média (Root Folders & Renaming)

Avant de lancer le premier téléchargement, il faut expliquer à Sonarr/Radarr où ranger les fichiers et comment les nommer. C’est ici que l’architecture /data prend tout son sens.

A. Les Root Folders (Où ranger ?)

Dans Sonarr et Radarr, allez dans Settings > Media Management. Tout en bas, cherchez la section Root Folders.

⚠️ Attention : Ne choisissez surtout pas /data tout court ! Cela mélangerait vos séries avec vos torrents en vrac. Respectez la structure de la Partie 1 :

  • Pour Sonarr : Ajoutez /data/media/tv.
  • Pour Radarr : Ajoutez /data/media/movies.

Comme ces dossiers sont sur le même point de montage (/data) que /data/torrents/downloads, le déplacement du fichier sera instantané (Atomic Move / Hardlink).

B. Le Standard de Renaming (Comment nommer ?)

Toujours dans Media Management, activez « Rename » et « Replace Illegal Characters ».

Le nommage est vital pour que Plex et votre futur « moi » s’y retrouvent. Le format recommandé par les TRaSH Guides (optimisé pour le nouvel agent Plex avec ID TMDb) permet une reconnaissance instantanée.

Standard Movie Format (Radarr) : {Movie CleanTitle} {(Release Year)} {tmdb-{TmdbId}} - {edition-{Edition Tags}} {[MediaInfo 3D]}{[Custom Formats]}{[Quality Full]}{[Mediainfo AudioCodec}{ Mediainfo AudioChannels]}{[MediaInfo VideoDynamicRangeType]}{[MediaInfo VideoCodec]}{-Release Group}

Standard Series Format (Sonarr) : {Series CleanTitle} {tvdb-{TvdbId}} - S{season:00}E{episode:00} - {Episode CleanTitle} {[Custom Formats]}{[Quality Full]}{[MediaInfo VideoDynamicRangeType]}{[Mediainfo AudioCodec}{ Mediainfo AudioChannels]}{[Mediainfo VideoCodec]}{-Release Group}

Note : Ces formats sont longs, mais ils contiennent toutes les métadonnées techniques (HDR, Codec, Audio) directement dans le nom du fichier. En plus d’aider Plex, c’est votre assurance vie en cas de crash ou de migration : Sonarr ou Radarr pourra reconstruire sa base de données parfaitement juste en lisant les noms de fichiers, sans rien deviner.

Conclusion Partie 2

Nous avons maintenant un Media Server intelligent et autonome.

  • Prowlarr trouve les sources et nous permet de switcher de tracker en 2 minutes.
  • Recyclarr garantit que nous ne téléchargeons pas de CAMs pourries.
  • qbit_manage maintient l’ordre dans les téléchargements.
  • Qui sécurise la connexion au bunker de téléchargement.
  • Sonarr/Radarr orchestrent le tout et rangent proprement les fichiers.

Mais il manque le principal : pouvoir regarder ce qu’on télécharge ! Pas question d’aller fouiller dans les dossiers.

Dans la Partie 3, nous installerons la « Vitrine » de votre Media Server : Plex pour diffuser vos contenus (avec transcodage matériel) et Seerr pour centraliser les demandes de votre famille.

18 réflexions sur “Guide Media Server Docker 2026 (Partie 2) : Automatisation avec Sonarr, Radarr & Prowlarr”

  1. Ping : Guide Media Server Docker 2026 (Partie 3) : Plex, Seerr et Transcodage - LabDuGeek.fr

  2. Salut, merci pour le tuto.
    J’ai rencontré un soucis avec le service qbit_manage, l’adresse de l’image semble avoir changé et une petite coquille s’est glissée dans le nom de la variable /data :
    # image: ghcr.io/stuffbymax/qbit_manage:latest > image: ghcr.io/stuffanthings/qbit_manage:latest
    – ${DATA_PATH}:/data > ${DATA_DIR}:/data

        1. Bien vu ! J’avais fait la correction à moitié la dernière fois en zappant la variable d’environnement… Le classique volume vide monté à cause d’une mauvaise variable, je comprends ton heure de debug ! C’est corrigé sur l’article, merci d’avoir relancé le sujet, ça sauvera d’autres lecteurs.

    1. Salut ! C’est vrai que Qui gère très bien les tags à l’ajout.

      Mais j’utilise qbit_manage surtout pour faire le grand ménage. Il va :
      – Supprimer les fichiers « orphelins » (les restes oubliés sur le disque).
      – Virer automatiquement les torrents morts (quand un tracker est en erreur).
      – Gérer la suppression automatique basée sur ton ratio ou temps de seed.

  3. Bonjour, merci pour le tuto
    Je galère à cause d’une permission de qbit_manage dans cette 2e partie :

    qbit_manage | Traceback (most recent call last):
    qbit_manage | File « /app/qbit_manage.py », line 318, in
    qbit_manage | default_dir = ensure_config_dir_initialized(get_default_config_dir(config_files, config_dir))
    qbit_manage | File « /app/modules/util.py », line 316, in ensure_config_dir_initialized
    qbit_manage | (p / « logs »).mkdir(parents=True, exist_ok=True)
    qbit_manage | File « /usr/local/lib/python3.13/pathlib/_local.py », line 722, in mkdir
    qbit_manage | os.mkdir(self, mode)
    qqbit_manage | PermissionError: [Errno 13] Permission denied: ‘/config/logs’

    Saurais tu pourquoi ça échoue ?

    1. Hello, il y avait une coquille dans l’article.
      Dans les volumes de qbit_manage, il faut mettre :
      – ${DATA_DIR}:/data à la place de – ${DATA_PATH}:/data.

      Encore désolé, j’espère que ça t’aidera !

    2. Bonjour ! merci pour ces tutos incroyable.
      Question, je voudrais garder les fichiers récupérer en Seed, notamment pour une question de ratio.

      ton système malgré le renommage le permet ?

      1. Hello, oui, c’est tout l’intérêt des hardlinks ! Le fichier est physiquement stocké à un seul endroit mais disponible dans plusieurs dossiers à la fois.

      1. Malheureusement, j’avais déjà corrigé cette variable.
        Le problème est plutôt en rapport avec des autorisations puisque j’ai 2 erreurs :
        – la première signalée au dessus : qbit_manage ne peut pas écrire ses logs
        – la 2e lors de la création du fichier recyclarr.yml : nano ${CONFIG_DIR}/recyclarr/recyclarr.yml me retourne un message d’erreur [ Directory ‘/recyclarr’ does not exist ]

        1. Salut ! Comme je le précisais dans les prérequis du guide, cette stack demande d’être un minimum familier avec les commandes de base d’un terminal Linux.

          Ici, ce sont deux erreurs très classiques de droits et d’arborescence :

          • Pour qbit_manage : Si le dossier de configuration n’existait pas avant le premier lancement, Docker l’a créé automatiquement avec les droits root. Du coup, quand le conteneur démarre et bascule sur ton utilisateur et ton groupe media (définis via le PUID/PGID dans la Partie 1), il n’a plus le droit d’écrire ses propres logs dedans.
            Pour corriger ça, réattribue simplement la propriété du dossier à ton utilisateur avec la commande :
            sudo chown -R ton_user:media /chemin/vers/ton/config/qbit_manage (remplace avec tes vraies infos).
          • Pour le fichier recyclarr.yml : nano ne sait pas créer les dossiers parents. Il faut d’abord créer le dossier avec mkdir -p ${CONFIG_DIR}/recyclarr avant de lancer la commande nano.

          Bon courage pour la suite du setup !

          1. Merci, ça marche. J’apprends petit à petit, désolé si mes questions sont un peu basiques.
            Ton tuto était complètement « plug & play » jusqu’à ce point et ça m’a dérouté.

          2. Salut, finalement, après quelques semaines d’apprentissage, j’ai résolu tous les accueils. Je crois que tout tourne sans problème. je vais me trouver un gros hdd et tout remonter au propre. Merci pour ce super tuto.

  4. Bonjour, et un grand merci pour le partage !
    J’ai appliqué ta méthode et je suis très content du résultat, sauf, pour un cas d’usage avec « Sonarr » : chaque fois que je tente de récupérer une « série française », il enregistre le nom en anglais et lorsqu’il fait ses recherches sur les les « indexeurs », il tente de trouver le titre en anglais et bien sûr il n’y arrive pas !
    Comment as-tu fait pour résoudre ce souci ?
    Par avance, merci.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut