Présentation
Mon propre Netflix - sans abonnement, sans pub, sans compromis.
Ce projet est probablement le plus ambitieux et le plus utilisé de tout mon homelab. L'objectif : avoir un serveur média self-hosted complet, depuis la recherche automatique de contenu jusqu'à la diffusion en qualité maximale, avec transcodage GPU matériel.

Architecture globale
La stack est volontairement répartie sur deux infras distinctes pour ne pas surcharger le homelab :
- Serveur (dédié) - héberge toute la partie automatisation : Sonarr, Radarr, Jellyseerr,
Jackett, RDTClient, NordVPN… via Docker Compose sous
/opt/jellyfin - Homelab — héberge Jellyfin dans une VM Debian dédiée avec passthrough PCIe de la RTX pour le transcodage NVENC
- NAS - stockage centralisé (~12,67 To en RAID 5, partagé en SMB/CIFS)
- WireGuard - tunnel VPN entre le Server et le homelab pour relier le tout de façon sécurisée
Le workflow complet

1. La demande — Jellyseerr
Tout commence par Jellyseerr, l'interface de demande de contenu. N'importe quel utilisateur ayant un compte peut chercher un film ou une série et cliquer sur "Demander". Jellyseerr dispatche ensuite automatiquement vers Radarr (films) ou Sonarr (séries).
C'est le point d'entrée unique pour tous les utilisateurs. Ils ne voient jamais les outils internes.
2. L'automatisation - Sonarr & Radarr
Radarr gère les films, Sonarr gère les séries (avec une instance séparée pour l'anime). Leur rôle : surveiller les demandes, gérer les profils de qualité (1080p, 4K, etc.) et déclencher la recherche via les indexeurs.
Dès qu'une demande arrive de Jellyseerr, ils lancent une recherche automatique. Si un résultat correspond au profil de qualité configuré, le torrent est envoyé au client de téléchargement.
3. La recherche d'indexeurs - Jackett
Jackett fait le pont entre Sonarr/Radarr et les sites de torrents. Il traduit les requêtes en appels vers de nombreux trackers publics et semi-privés, et retourne les résultats dans un format standard (Torznab/Newznab).
En complément, Prowlarr est aussi présent dans la stack pour certains indexeurs natifs. (Off actuellement)
4. Le téléchargement premium - RDTClient + AllDebrid
C'est la partie la plus intéressante du workflow.
AllDebrid est un service de téléchargement premium ("debrideur") : quand on lui soumet un lien torrent ou magnet, il le télécharge sur ses propres serveurs haut débit, puis met à disposition un lien de téléchargement direct rapide.
RDTClient fait le lien entre Sonarr/Radarr et AllDebrid : il se présente comme un client qBittorrent standard aux yeux de l'Arr, mais en coulisse, il envoie chaque torrent à l'API AllDebrid et récupère le lien direct. Le fichier est ensuite téléchargé directement depuis les serveurs AllDebrid vers le stockage.
Résultat : pas de ratio à gérer, pas de seed, des vitesses de téléchargement maximales (souvent en quelques secondes pour un film).
RDTClient tourne dans le namespace réseau du container NordVPN pour sécuriser les requêtes.
5. La diffusion - Jellyfin
Jellyfin tourne dans une VM Debian 12 dédiée sur le Homelab, avec la RTX passée en PCIe passthrough. Cela lui donne accès au moteur de transcodage NVENC de la carte graphique pour transcoder les flux à la volée sans charger le CPU.
Les médias sont accessibles depuis la VM via des montages SMB/CIFS depuis le NAS QNAP, qui héberge l'ensemble de la bibliothèque (~12,67 To en RAID 5).
Jellyfin est exposé publiquement via le reverse proxy Nginx sur le Server, qui fait suivre le trafic
jellyfin.entyscoco.ovh vers la VM homelab via le tunnel WireGuard.
(Sera amené à évoluer...)

Infrastructure Docker
Toute la stack d'automatisation tourne sous Docker Compose dans /opt/jellyfin sur le Serveur.
Les services sont organisés avec des proxies Nginx internes pour l'exposition de chaque outil.
jellyfin/
├── docker-compose.yml
├── .env
├── config/
│ ├── sonarr/
│ ├── radarr/
│ ├── jackett/
│ ├── jellyseerr/
│ └── rdtclient/
└── nginx/
└── conf.d/

Un point notable : RDTClient, qBittorrent et Jackett partagent le namespace réseau du container
NordVPN (network_mode: "service:nordvpn"). Ce pattern évite d'exposer leur trafic hors VPN, mais
implique que si NordVPN redémarre et change d'IP Docker interne, les proxies doivent utiliser le
nom de service (et non l'IP hardcodée) dans leurs proxy_pass pour ne pas casser.
nordvpn:
image: ghcr.io/bubuntux/nordlynx:latest
container_name: nordvpn
networks:
- media
cap_add:
- NET_ADMIN
environment:
- PRIVATE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
- NET_LOCAL=192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
- COUNTRY=Netherlands
ports:
- "51413:51413"
- "51413:51413/udp"
healthcheck:
test: ["CMD", "curl", "-sf", "https://ipinfo.io"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
restart: unless-stopped
Stockage - NAS
Le NAS centralise l'ensemble du stockage média avec ~12,67 To utiles en RAID 5 sur 8 disques WD Red de 2To.
La structure de stockage est la suivante :
| Dossier | Type | Accès |
|---|---|---|
/Films |
Films | SMB → VM Jellyfin |
/Series |
Séries TV | NFS → Proxmox → VM |
/Anime_films |
Films anime | SMB → VM Jellyfin |

Points techniques notables
GPU Passthrough RTX
La RTX est passée en PCIe passthrough à la VM Jellyfin. Seules les fonctions 01:00.0
(GPU) et 01:00.1 (audio HDMI) sont passées. Les fonctions USB/serial (01:00.2, 01:00.3)
sont exclues pour éviter les conflits xhci_hcd
Deux quirks importants à retenir :
options vfio-pci disable_idle_d3=1est obligatoire pour éviter les crashs VM liés au power state D3cold- Les device nodes
/dev/nvidia*ne se créent pas automatiquement dans la VM — un service systemd oneshot avecmknodest nécessaire au boot

Transcodage NVENC dans Jellyfin
Avec le passthrough fonctionnel, Jellyfin utilise NVENC pour le transcodage matériel.
La librairie libnvidia-encode1 doit être installée séparément depuis le repo CUDA
(les packages NVIDIA sont fragmentés sur Debian 12, nvidia-smi est un dummy).

Résultat
Une stack entièrement automatisée : une demande dans Jellyseerr, et quelques minutes plus tard le contenu est disponible dans Jellyfin, en qualité maximale, transcodé en temps réel si besoin.
Le tout self-hosted, sur mes propres serveurs, sans dépendance à un service tiers (hormis AllDebrid pour le téléchargement premium).
