Si vous avez suivi les trois premières parties, vous avez une stack media server qui offre une qualité et une liberté bien supérieures aux services de streaming classiques. C’est sécurisé, c’est beau, et ça télécharge tout seul.
Mais entre nous… c’est un peu « lent » et « fermé », non ?
Attendre 15 minutes que le RSS de Sonarr se réveille ? Devoir activer un VPN sur son téléphone juste pour demander un film sur Seerr ? C’est bon pour les amateurs.
Aujourd’hui, on passe à la vitesse supérieure. On va parler architecture réseau avancée, vitesse temps-réel et optimisation de ratio.
1. L’Accès Distant : Mon Architecture Hybride
Ouvrir tous les ports ou tout mettre derrière un reverse proxy classique (Nginx, Traefik…), c’est non seulement pénible à maintenir (certificats SSL, Fail2Ban…), mais surtout peu sécurisé : votre IP personnelle se retrouve exposée publiquement dans les enregistrements DNS. Pour 2026, j’ai adopté une approche hybride qui sépare les usages selon le niveau de confiance.
Voici ma stratégie :
- Accès « Famille/Invités » (Public) : Via Cloudflare Tunnel. C’est pour Seerr uniquement. Pas de VPN à installer pour Mamie, juste une URL HTTPS propre.
- Accès « Admin » (Privé) : Via Tailscale. C’est pour Sonarr, Radarr, Prowlarr, Qui. Hors de question d’exposer ces services critiques sur le net. Si je veux gérer mon serveur, je m’authentifie via le mesh VPN.
- Streaming (Performance) : Via Port Forwarding classique (32400). C’est pour Plex. Notez que Plex.tv connaît de toute façon votre IP pour établir la liaison.
Avec Jellyfin, vous n’auriez pas le choix que de « leaker » votre IP publiquement dans les DNS via un DynDNS pour l’exposer sans VPN). Pourquoi ? Car les tunnels (Cloudflare/Tailscale) peuvent brider la bande passante ou violer les TOS en cas de gros streaming vidéo.
A. Cloudflare Tunnel : Pour Seerr uniquement
C’est la solution « Zéro Trust ». Votre serveur crée un tunnel sortant vers Cloudflare. Pas de trou dans votre pare-feu, HTTPS géré par eux.
Pré-requis critiques :
- Avoir un Nom de Domaine (acheté chez OVH, Namecheap, etc.).
- Avoir confié la gestion des DNS à Cloudflare (Nameservers pointant vers ceux de Cloudflare). Sans ça, le tunnel ne peut pas créer les sous-domaines automatiquement.
Configuration :
- Allez sur Cloudflare Zero Trust > Networks > Tunnels.
- Cliquez sur le bouton « Gérer les tunnels » puis sur « Créer un nouveau Tunnel cloudflared ».
- Sélectionnez « Cloudflared », donnez-lui un nom (ex:
MediaServer) et validez. - À l’étape « Install and run a connector », choisissez l’environnement Docker. Cloudflare va vous afficher une longue commande
docker run ... --token eyJh.... ⚠️ Ne copiez pas toute la commande ! Copiez uniquement la longue chaîne de caractères après--token(le bloc qui commence parey...). - Ajoutez ce token dans votre fichier
.env:TUNNEL_TOKEN=eyJhIjoi... - Configurez le conteneur dans votre
compose.yml:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
command: tunnel run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}- Dans l’interface Cloudflare (cliquez sur « Next »), ajoutez un Public Hostname :
- Subdomain :
demandes.mondomaine.fr - Service :
http://seerr:5055
- Subdomain :

Pas envie d’acheter un nom de domaine ? Si vous ne voulez pas payer 10€/an pour un
.frou gérer des DNS, utilisez Tailscale Funnel. C’est une fonctionnalité incluse dans Tailscale qui permet d’exposer un service local sur le web public.
- Voir la section suivante pour l’installation sur le serveur.
- Activez Funnel dans la console admin.
- Lancez :
tailscale funnel 5055. Vous obtiendrez une URL publique gratuite enhttps://mon-serveur.tailnet.ts.netaccessible par n’importe qui. C’est parfait pour partager Seerr sans frais.
B. Tailscale : Pour l’Admin (Sonarr/Radarr)
Pour accéder à vos outils d’administration depuis l’extérieur sans les exposer, installez simplement Tailscale sur votre NAS/Serveur et sur vos appareils (Mac, iPhone).
Installation sur le serveur :
- Linux (Ubuntu/Debian) : Une simple commande suffit :
curl -fsSL https://tailscale.com/install.sh | sh - Synology / QNAP : Tailscale est disponible directement dans le « Package Center ».
- Docker : Vous pouvez aussi l’ajouter à votre stack (image
tailscale/tailscale), mais l’installation native sur l’hôte est souvent plus simple pour gérer le routing.
Une fois connecté, vous accédez à vos services via l’IP Tailscale (ex: http://100.x.y.z:8989 pour Sonarr) comme si vous étiez à la maison. C’est incassable.
2. Autobrr : Le Sniper (IRC > RSS)
Le RSS, c’est du « Polling » (on demande « c’est prêt ? » toutes les 15 min). L’IRC, c’est du « Push » (le tracker hurle « C’EST PRÊT ! »). Pour les trackers privés (ou les publics réactifs), Autobrr est le standard.
Ajout au compose.yml
autobrr:
image: ghcr.io/autobrr/autobrr:latest
container_name: autobrr
environment:
- TZ=${TZ}
user: ${PUID}:${PGID}
volumes:
- ${CONFIG_DIR}/autobrr:/config
ports:
- 7474:7474
restart: always
Configuration Express
- Allez sur
http://VOTRE_IP:7474. - Créez un user.
- Indexers : Ajoutez vos trackers (si supportés) ou connectez-le à Prowlarr (Settings > Indexers > Prowlarr).
- Clients (Sonarr/Radarr) : C’est l’étape indispensable pour que Autobrr puisse leur parler.
- Allez dans Settings > Clients.
- Cliquez sur le bouton « Add New ».
- Sélectionnez le type (ex: Sonarr).
- Host :
http://sonarr:8989(nom du conteneur Docker). - API Key : Collez la clé API de Sonarr.
- Testez et sauvegardez. (Faites pareil pour Radarr sur
http://radarr:7878).
- Filtres : C’est là que ça se joue. Créez un filtre « Global » :
- Dans l’onglet action : Choisissez Action type
Sonarr(votre client créé à l’étape 4). - Dans l’onglet general : Choisissez les indexers que vous voulez utilisez
- Dans les autres onglets : c’est à vous d’adapter en fonction de vos besoins. Dans “movies and tv”, vous pouvez bloquer les remux par exemple.
- Dans l’onglet action : Choisissez Action type
Autobrr voit tout passer sur l’IRC. Il notifie instantanément Sonarr/Radarr (« Push »). Sonarr vérifie si le film est recherché et s’il correspond à vos profils de qualité Recyclarr. Si oui, Sonarr lance le téléchargement dans qBit. C’est l’approche la plus propre car elle respecte votre logique de gestion centralisée.
3. Cross-seed : Le Multiplicateur de Ratio
Le principe : vous téléchargez un film sur le Tracker A. Cross-seed scanne les autres trackers (B, C, D) pour voir si le même fichier existe. Si oui, il l’ajoute en seed. Résultat : 1 téléchargement = 4 seeds. Votre ratio explose sans utiliser plus de disque (merci les Hardlinks).
Préparation des dossiers
Rappelez-vous la Partie 1, on avait créé /data/torrents/cross-seed. C’est son moment de gloire.
Ajout au compose.yml
cross-seed:
image: crossseed/cross-seed
container_name: cross-seed
user: ${PUID}:${PGID}
command: daemon
volumes:
- ${CONFIG_DIR}/cross-seed:/config
- ${DATA_DIR}:/data # Pour scanner vos fichiers
restart: always
Configuration (config.js)
Le fichier de configuration est en JavaScript. C’est puissant mais intimidant. Voici les points clés à modifier dans le fichier généré :
- Torznab : Il faut donner à Cross-seed les URLs Torznab de vos trackers (à récupérer dans Prowlarr).
- torrentClients : Utilisez le proxy Qui pour sécuriser l’accès (comme pour Sonarr/Radarr, plus de mot de passe en clair !).
URL :qbittorrent:http://gluetun:7476/proxy/VOTRE_CLE_API
(Générez une clé API dédiée pour Cross-seed dans Qui > Settings > Client Proxy Keys). - Utilisez
linkDirs(où créer les liens) etdataDirs(où chercher les sources, incluant votre librairie multimédia pour le cross-seeding rétroactif) :
linkDirs: [
"/data/torrents/cross-seed",
],
dataDirs: [
"/data/torrents/downloads",
"/data/media/movies",
"/data/media/tv"
]Note importante : Ce sont ici les paramètres de base pour que ça tourne. Cross-seed est un outil puissant mais qui demande du doigté. Il faudra impérativement fine-tuner le reste du fichier
config.jsen fonction des règles spécifiques de vos trackers (temps de seed, exclusions, etc.). Prenez le temps de lire la documentation pour l’adapter à votre usage.
4. Beszel : Le Monitoring sans l’usine à gaz
Oubliez Grafana + Prometheus + InfluxDB pour surveiller un simple NUC. C’est overkill. Beszel, c’est un agent ultra-léger et un joli dashboard. Ça s’installe en 2 minutes et ça vous dit si votre CPU est en train de fondre pendant un transcodage Plex.

Ajout au compose.yml
beszel-hub:
image: henrygd/beszel
container_name: beszel
ports:
- 8090:8090
volumes:
- ${CONFIG_DIR}/beszel:/beszel_data
restart: always
beszel-agent:
image: henrygd/beszel-agent
container_name: beszel-agent
network_mode: host # Nécessaire pour lire les stats du host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- PORT=45876
- KEY=VOTRE_CLE_PUBLIQUE_BESZEL # À récupérer dans le Hub
restart: alwaysUne fois le hub lancé, allez sur le port 8090 et créez votre compte admin.
Ensuite, cliquez sur le bouton « Add System » et remplissez les infos. Beszel va automatiquement vous générer le bloc Docker Compose pour l’agent contenant votre Clé Publique (KEY). Copiez cette clé dans votre compose.yml (section beszel-agent) et démarrez le conteneur agent. Vous avez maintenant de jolis graphes CPU/RAM/Docker/Disque.
Conclusion Finale : La fin du voyage
Voilà. Vous êtes passés d’un dossier « Téléchargements » en vrac à une infrastructure clean :
- VPN étanche avec Killswitch.
- Gestion automatisée de la qualité et du nommage.
- Interface Netflix-like accessible de partout.
- Vitesse temps-réel et monitoring.
Votre serveur va maintenant travailler pour vous, et non l’inverse. C’est ça, la vraie victoire du self-hosting.
Maintenant, vous pouvez retourner faire ce que vous voulez pendant que votre serveur se remplit tout seul de Linux ISOs.
Si cette série vous a plu, partagez-la (mais pas trop fort, on reste discrets). 🏴☠️



