Le docker-compose.yml du stack *arr
Un seul fichier. Vous copiez, vous adaptez 3 variables (PUID, PGID, clé WireGuard), vous lancez, c'est en route. Pas de bricolage, pas de "vous adapterez selon votre setup". Testé sur DS920+ et DS923+ en avril 2026.
Avant de coller le fichier
4 prérequis pour que le stack démarre du premier coup.
Container Manager installé
Sur DSM 7, via Package Center. C'est lui qui lit le docker-compose.yml et orchestre les containers.
Comprendre le stack *arrCompte VPN avec port forwarding
ProtonVPN ou AirVPN recommandés : port forwarding fiable, indispensable pour qBittorrent en tracker privé.
Choisir son VPNStructure de dossiers créée
Créez l'arborescence ci-dessous dans File Station AVANT de lancer le stack. Sinon les volumes Docker se monteront mal.
PUID/PGID identifiés
En SSH sur le NAS, tapez la commande id votre-utilisateur. Notez PUID (uid) et PGID (gid). Par défaut sur Synology : 1026 / 100.
Structure de dossiers à créer
Dans File Station, créez exactement cette arborescence sur votre volume principal.
/volume1/
├── docker/
│ ├── gluetun/
│ ├── qbittorrent/
│ ├── prowlarr/
│ ├── sonarr/
│ ├── radarr/
│ ├── bazarr/
│ └── jellyfin/
└── data/
├── torrents/
├── series/
└── films/ Important : /data/ et /docker/ doivent
être sur le même volume, sinon Sonarr/Radarr ne pourront pas faire du hardlink et vous
dupliquerez les fichiers inutilement.
Le docker-compose.yml
Le fichier complet. Un clic sur Copier, collez-le dans
/volume1/docker/docker-compose.yml, adaptez les variables,
démarrez.
# =============================================================
# docker-compose.yml : Stack *arr complet pour NAS Synology
# Testé DS920+ / DS923+ sous DSM 7.2, avril 2026
# monratio.fr
# =============================================================
services:
# -----------------------------------------------------------
# GLUETUN : Tunnel VPN partagé (ProtonVPN + WireGuard)
# Tout ce qui doit passer par le VPN partage son réseau.
# -----------------------------------------------------------
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
# --- VPN ---
- VPN_SERVICE_PROVIDER=protonvpn
- VPN_TYPE=wireguard
# REMPLACE ces valeurs avec celles de ton compte ProtonVPN
# https://account.protonvpn.com/downloads#wireguard-configuration
- WIREGUARD_PRIVATE_KEY=REMPLACER_PAR_TA_CLE_PRIVEE
- WIREGUARD_ADDRESSES=10.2.0.2/32
# --- Serveur ---
- SERVER_COUNTRIES=Netherlands
# --- DNS et divers ---
- TZ=Europe/Paris
- HEALTH_VPN_DURATION_INITIAL=120s
# Réseaux locaux autorisés hors tunnel (accès NAS/LAN)
- FIREWALL_OUTBOUND_SUBNETS=192.168.1.0/24,10.0.0.0/8
ports:
# Ports des services qui partagent le réseau de gluetun
- 8080:8080 # qBittorrent WebUI
- 6881:6881 # qBittorrent TCP
- 6881:6881/udp # qBittorrent UDP
- 9696:9696 # Prowlarr WebUI
volumes:
- /volume1/docker/gluetun:/gluetun
restart: unless-stopped
# -----------------------------------------------------------
# QBITTORRENT : Client torrent, DERRIÈRE gluetun
# network_mode: service:gluetun = tout son trafic passe par le VPN.
# Si gluetun tombe, qBittorrent n'a plus aucun accès réseau.
# -----------------------------------------------------------
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
depends_on:
- gluetun
network_mode: "service:gluetun"
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
- WEBUI_PORT=8080
volumes:
- /volume1/docker/qbittorrent:/config
- /volume1/data/torrents:/data/torrents
restart: unless-stopped
# -----------------------------------------------------------
# PROWLARR : Gestionnaire d'indexers (aussi derrière VPN)
# Se synchronise ensuite automatiquement vers Sonarr/Radarr.
# -----------------------------------------------------------
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
depends_on:
- gluetun
network_mode: "service:gluetun"
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
volumes:
- /volume1/docker/prowlarr:/config
restart: unless-stopped
# -----------------------------------------------------------
# SONARR : Gestion des séries
# Hors VPN (ne télécharge pas lui-même, pilote qBittorrent).
# -----------------------------------------------------------
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
volumes:
- /volume1/docker/sonarr:/config
- /volume1/data:/data
ports:
- 8989:8989
restart: unless-stopped
# -----------------------------------------------------------
# RADARR : Gestion des films
# -----------------------------------------------------------
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
volumes:
- /volume1/docker/radarr:/config
- /volume1/data:/data
ports:
- 7878:7878
restart: unless-stopped
# -----------------------------------------------------------
# BAZARR : Sous-titres automatiques (Sonarr + Radarr)
# -----------------------------------------------------------
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
volumes:
- /volume1/docker/bazarr:/config
- /volume1/data:/data
ports:
- 6767:6767
restart: unless-stopped
# -----------------------------------------------------------
# JELLYFIN : Lecteur média
# network_mode: host pour le DLNA + accélération matérielle GPU.
# -----------------------------------------------------------
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
network_mode: host
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
- JELLYFIN_PublishedServerUrl=http://192.168.1.10
volumes:
- /volume1/docker/jellyfin:/config
- /volume1/data:/data:ro
devices:
# Accélération matérielle Intel Quick Sync (DS920+/DS923+)
- /dev/dri:/dev/dri
restart: unless-stopped
Variables à adapter avant lancement
Les seules lignes à modifier dans le YAML. Le reste fonctionne tel quel.
PUID1026PGID100TZEurope/ParisWIREGUARD_PRIVATE_KEY(à récupérer)WIREGUARD_ADDRESSES10.2.0.2/32VPN_SERVICE_PROVIDERprotonvpnSERVER_COUNTRIESNetherlandsComment lancer
2 méthodes, au choix. La GUI si vous débutez, le SSH si vous préférez la ligne de commande.
Méthode GUI (Container Manager)
- Copier le fichier dans
/volume1/docker/docker-compose.ymlvia File Station. - Container Manager : onglet Projet > Créer.
- Source : "Créer le fichier docker-compose.yml" puis pointer vers le
chemin. Chemin :
/volume1/docker/. - Activer le projet : cliquez Démarrer à la fin du wizard. Les images se téléchargent, les containers démarrent.
Méthode SSH (une ligne)
Si vous avez activé SSH sur le NAS (Panneau de configuration > Terminal & SNMP), c'est infiniment plus rapide.
cd /volume1/docker
docker compose up -d -d = detached, les containers tournent en arrière-plan.
Vérification post-lancement
Après docker compose up -d, attendez 30-60 secondes puis testez ces URL.
Remplacez NAS-IP par l'IP de votre NAS (ex : 192.168.1.10).
docker compose ps Les 7 lignes doivent afficher 'running'. Si l'une est 'restarting' ou 'exited', regardez les logs.
http://NAS-IP:8080 Login par défaut : admin / adminadmin (à changer immédiatement).
http://NAS-IP:9696 L'indexer manager. Première étape de configuration une fois UP.
http://NAS-IP:8989 Gestion des séries. À connecter à Prowlarr + qBittorrent.
http://NAS-IP:7878 Gestion des films. Même logique que Sonarr.
http://NAS-IP:6767 Sous-titres automatiques. Se branche à Sonarr et Radarr.
http://NAS-IP:8096 Le lecteur média. Premier lancement = création du compte admin + ajout des bibliothèques.
Mise à jour du stack
Une commande, et tous les containers sont à jour. À lancer tous les mois environ, ou quand une CVE est publiée sur un des services.
cd /volume1/docker
docker compose pull
docker compose up -d pull télécharge les nouvelles versions des images.
up -d recrée les containers en utilisant les nouvelles images.
Les configs dans /volume1/docker/ sont conservées : aucune perte de données.
Configurations à faire après le premier lancement
Les containers tournent, mais rien n'est encore connecté. Voici l'ordre exact pour tout câbler ensemble.
- 1
Configurer qBittorrent
Kill switch via interface gluetun, catégories, répertoires de téléchargement.
Voir le tuto - 2
Configurer Prowlarr
Ajouter vos indexers (publics ou trackers privés), synchroniser vers Sonarr/Radarr.
Voir le tuto - 3
Configurer Sonarr
Connecter le téléchargeur qBittorrent, définir la bibliothèque séries, les profils qualité.
Voir le tuto - 4
Configurer Radarr
Même logique que Sonarr mais pour les films. Custom Formats TRaSH pour la qualité.
Voir le tuto - 5
Configurer Bazarr
Connecter Sonarr et Radarr, ajouter les providers de sous-titres (Opensubtitles, etc).
Voir le tuto - 6
Configurer Jellyfin
Compte admin, bibliothèques pointant vers /data/films et /data/series, transcodage.
Voir le tuto
Questions fréquentes
Les quatre questions qui reviennent tout le temps sur ce template.
Pourquoi tout faire passer derrière GlueTUN ?
network_mode: "service:gluetun"). Si le VPN tombe, le container gluetun tombe, et donc qBittorrent n'a plus AUCUN accès réseau. Impossible qu'une seule requête torrent fuite en clair. C'est un kill switch au niveau Docker, bien plus fiable que celui intégré à qBittorrent.Je préfère Plex à Jellyfin, comment remplacer ?
linuxserver/plex:latest, port 32400, volumes identiques (config + data en lecture). Supprimez la ligne network_mode: host si vous n'en avez pas besoin pour le DLNA. Sinon la structure reste strictement identique.Un container ne démarre pas, que faire ?
docker compose logs nom-du-container pour voir l'erreur exacte. 95% du temps : soit un dossier manquant (créez-le dans File Station), soit un PUID/PGID faux (revérifiez avec id), soit une clé VPN invalide (regénérez depuis le compte ProtonVPN).Comment ajouter un nouveau service (Lidarr, Readarr…) ?
docker compose up -d. Docker détecte le nouveau service et le lance. Les services existants ne sont pas impactés.C'est votre première fois avec Docker ?
Avant de coller le YAML, comprenez ce que fait chaque service et pourquoi ils sont interconnectés comme ça. Le tuto pédagogique.
Comprendre le stack *arrVous voulez les profils qualité aussi ?
Les profils JSON TRaSH adaptés au marché FR (priorité VFF/MULTi), à importer dans Sonarr et Radarr en 2 clics. Custom Formats inclus.
Voir les profils