Migration vers un NAS : Jellyfin, NPM et sécurisation avec Teleport

30 décembre 2025

Migration vers un NAS : Jellyfin, NPM et sécurisation avec Teleport

Avec la croissance de mes besoins en stockage et en services auto-hébergés, mon infrastructure basée sur des Raspberry Pi a montré ses limites. J’ai donc décidé de migrer vers un NAS Ugreen DP4800plus pour centraliser mes données, héberger Jellyfin, et automatiser la gestion de mes médias, tout en sécurisant l’accès pour mes proches via un bastion d'authentification Teleport. Ce choix a permis de remplacer mon ancien serveur média (Raspberry Pi) et mon instance Nextcloud, tout en améliorant les performances, la fiabilité et la sécurité.

Pourquoi ce changement ?

Mon ancien setup reposait sur :

  • Un Raspberry Pi pour Jellyfin (limité en puissance pour le transcodage et le stockage).
  • Un NAS Synology ne m'appartenant pas pour le stockage, mais avec des contraintes en termes de flexibilité (Docker limité, ressources partagées).
  • Nextcloud sur un autre Raspberry Pi, ce qui multipliait les points de défaillance et la complexité de maintenance.

Mon ancien setup sur Raspberry Pi et NAS Synology rencontrait des problèmes de performances (transcodage multi-utilisateurs), de stockage limité, de sécurité pour le partage avec mes amis, et de maintenance complexe.

Choix du matériel : le NAS Ugreen DXP4800plus

Après des recherches approfondies, j’ai opté pour le Ugreen DXP4800plus pour plusieurs raisons :

  • Puissance : Processeur Intel Celeron N5105 (4 cœurs / 4 threads) et 8 Go de RAM
  • Stockage : 4 baies pour des disques 3.5" (j’ai opté pour 2x 14 To en RAID 1 pour commencer)
  • Consommation énergétique : Environ 30W en idle
  • Prix : Bien plus abordable qu’un NAS Synology ou QNAP avec des performances similaires voire meilleures
Project image
L'interface utilisateur du NAS

Architecture et services déployés

Migration de Jellyfin depuis le Raspberry Pi

La migration a été l’occasion de repenser l’organisation des médias de manière optimisée :

/media
├── films
├── séries
│ └── Exemple Serie
│ └── Saison 1
└── photos
Configuration de Jellyfin :

  • Installation via Docker
  • Activation du transcodage matériel (Intel Quick Sync) pour les navigateurs sans possibilité de transcodage
  • Bibliothèques : Séparation des bibliothèques par type de média, avec des métadonnées automatiquement récupérées via TheMovieDb et IMDB.

Note : J’ai désactivé le transcodage pour les utilisateurs externes (amis) et je leur demande d’utiliser des clients compatibles avec le direct play (ex: App Jellyfin sur Android TV) pour limiter la charge CPU.

Project image
L’interface d'administration de Jellyfin hébergée sur le NAS

Reverse Proxy avec Nginx Proxy Manager (NPM)


Pour exposer Jellyfin (et d’autres services) de manière sécurisée, j’ai déployé NPM en conteneur Docker.

Pourquoi NPM ?

Plus simple à configurer qu’un reverse proxy Nginx manuel, avec une interface graphique pour gérer les certificats SSL (via Let’s Encrypt) avec l'auto-renouvellement et les règles de redirection.

Configuration :

  • Domaine dédié avec certificat SSL automatique.
  • Restrictions d’accès

[📷 **Image à insérer ici** : Capture d’écran de l’interface NPM montrant la configuration du proxy pour Jellyfin (ex: tableau de bord avec les "Proxy Hosts").]
*Légende : Configuration du reverse proxy pour Jellyfin dans NPM.*

Automatisations média

Pour simplifier la gestion des médias, j’ai mis en place plusieurs automatisations :

  • Téléchargement automatique : Je ne rentrerais pas dans les détails.
  • Sonarr et Radarr pour gérer les séries et films
  • Surveillance des sorties de séries/films via Trakt
  • Renommage des fichiers selon un format standard
  • Script Python pour supprimer les fichiers temporaires ou les téléchargements terminés après 7 jours.

Sauvegardes distantes avec WireGuard et rsync

Pour éviter toute perte de données, j’ai mis en place un système de sauvegarde incrémentielle vers un second NAS situé chez un proche.

Topologie réseau sécurisée avec WireGuard

Pourquoi WireGuard ?

Plus léger et plus simple que OpenVPN, avec des performances optimales pour le transfert de fichiers.
Déploiement :

  • Deux conteneurs Docker (un par NAS) utilisant l’image linuxserver/wireguard
  • Configuration d’un tunnel VPN entre les deux NAS, avec :
  • Une clé pré-partagée pour l’authentification.
  • Un sous-réseau dédié pour isoler le trafic de sauvegarde.
  • Port forwarding sur le routeur du NAS distant

[📷 **Image à insérer ici** : Capture d’écran de la configuration WireGuard dans Portainer (ex: variables d’environnement du conteneur) **OU** schéma du tunnel VPN.]
*Légende : Configuration du conteneur WireGuard dans Portainer, avec les clés et le sous-réseau.*

Synchronisation avec rsync

Je sauvegarde automatiquement mes photos et dossiers personnels toutes les nuits vers un second NAS via un script rsync exécuté dans un conteneur Docker. Le transfert utilise un tunnel WireGuard pour sécuriser la connexion entre les deux machines.

En cas d'échec, un email de notification est envoyé automatiquement.

Project image
Schéma de la sauvegarde rsync à travers le tunnel vpn

Chiffrement et sécurité

Le NAS distant chiffre les sauvegardes avec LUKS (volume chiffré monté avant la synchronisation). Les clés SSH sont restreintes (pas de droit shell, seulement rsync). Sauvegarde incrémentielle : Seuls les fichiers modifiés sont transférés (grâce à rsync).

Sécurisation de l’accès avec Teleport

Pourquoi un bastion ?

Exposer Jellyfin directement sur Internet, même derrière un reverse proxy, comporte des risques :

  • Attaques par force brute sur les mots de passe.
  • Exposition des services moins sécurisés (Jellyfin n’est pas conçu pour être exposé publiquement).
  • Gestion des accès pour des amis : difficile de révoquer un accès sans changer les mots de passe.

J’ai donc choisi Teleport (open-source) comme bastion d’authentification pour centraliser l’accès à Jellyfin (et d’autres services) via un seul point d’entrée, ajouter une couche d’authentification forte (2FA, passkeys) et éviter d’exposer directement les services sur Internet

Mise en place de Teleport

  1. Installation :
    • Déploiement de Teleport en conteneur Docker sur le NAS (image officielle gravitational/teleport)
    • Configuration d’un cluster avec un seul nœud (le NAS)
  2. Configuration de l’accès :
    • Utilisateurs : Création de comptes pour chaque ami, avec des rôles limités (ex: accès uniquement à Jellyfin)
    • 2FA (TOTP) obligatoire pour tous les utilisateurs
    • Restriction des IP sources (France et quelques autres pays)
  3. Intégration avec Jellyfin :
    • Jellyfin n’est plus exposé directement sur Internet
    • Les amis se connectent d’abord à Teleport, puis accèdent à Jellyfin via un proxy HTTP configuré dans Teleport
Project image
L'interface de connexion de teleport avec 2FA et Passkey

Conclusion

Cette migration vers le NAS Ugreen DXP-4800plus a permis de centraliser mes services (Jellyfin, NPM, automatisations média) sur une seule machine, d'améliorer les performances (transcodage, stockage) et la fiabilité (moins de points de défaillance), de sécuriser l’accès pour mes amis via Teleport, sans compromettre la simplicité d’utilisation et d'automatiser la gestion des médias (téléchargements, sous-titres, organisation).