État du homelab 2026 : l’évolution du hobby du self-hosting
(mrlokans.work)- Récapitulatif d’un homelab combinant petit matériel et tunneling cloud gratuit pour faire tourner soi-même divers services de médias, IA, photos et monitoring
- Une architecture hybride qui a commencé sur OrangePI 5, puis a été mise à niveau vers un GMKTec NUC (32 Go de RAM, 1 To de NVMe), avec une machine virtuelle Hetzner exploitée en parallèle
- Tous les services tournent dans des conteneurs Docker, avec une IaC basée sur des rôles Ansible et le chiffrement SOPS pour garantir reproductibilité et sécurité
- Cloudflare Tunnel permet l’accès externe sans ouvrir de ports entrants, tandis que Traefik + Authentik gèrent le reverse proxy et l’authentification SSO
- Avec un coût d’exploitation d’environ 7 euros par mois, l’auteur conserve la propriété de ses données sans dépendance fournisseur et privilégie l’apprentissage et le plaisir à la perfection
Configuration matérielle
- Au départ, l’auteur utilisait un OrangePI 5, mais est passé à un GMKTec NUC à cause de problèmes de gestion d’alimentation et de stockage USB connecté
- CPU AMD Ryzen 7 5700U, 32 Go de RAM, stockage NVMe M2 de 1 To
- Deux slots M2 permettent d’étendre à la fois la RAM et le disque
- Fonctionnement nettement plus stable sur une exploitation annuelle
- Les services qui doivent tourner en 24/7 sont hébergés séparément sur une machine virtuelle Hetzner
- Aucun NAS n’est encore en place, et les données importantes sont synchronisées avec Syncthing
- L’auteur s’intéresse à Ugreen NAS, Ubiquiti, etc., mais prend pour l’instant davantage plaisir au fait de tout manipuler lui-même
Principes d’exploitation
- Infrastructure-as-Code : automatiser autant que possible tous les réglages via des scripts ou une plateforme de gestion (comme Ansible) et les stocker sous forme de code
- Reproductibilité : en cas de panne ou de remplacement d’une machine, l’infrastructure doit pouvoir être redéployée et reconfigurée rapidement, et la suppression d’un service expérimental ne doit laisser aucun résidu
- Simplicité d’usage : comme il s’agit d’un projet hobby, l’auteur privilégie des approches standard et familières
Système d’exploitation
- La distribution Debian est installée directement sur le bare metal
- NixOS (builds reproductibles) et Talos (cluster k8s) ont aussi été envisagés, mais la charge de gestion des workloads k8s sur une machine unique et le manque de temps ont conduit à reporter ce choix
- Un hyperviseur comme ProxMox a également été jugé inutile, et n’est donc pas utilisé
Architecture réseau
- Cloudflare Tunnel a été retenu comme méthode d’exposition vers l’extérieur
- Le serveur crée une connexion sortante uniquement vers le réseau Cloudflare, ce qui évite d’ouvrir des ports entrants sur le firewall
- Une fois le tunnel configuré, le trafic bidirectionnel passe par celui-ci
- En reliant le domaine à Cloudflare DNS, il est possible d’associer chaque sous-domaine à un port ou protocole précis de la machine (HTTP/HTTPS/TCP, etc.)
- Le service est proposé entièrement gratuitement et est considéré comme une meilleure alternative à ngrok
- Les IP fixes (White IP) impliquent des coûts et des risques de sécurité, et même s’il existe des alternatives comme Tailscale Funnel, Cloudflare Tunnel a été choisi comme solution la plus simple
-
Traefik
- Reverse proxy open source qui reconnaît Docker nativement, ce qui facilite l’automatisation côté serveur
- En ajoutant les bons labels aux conteneurs, le routage est détecté automatiquement, sans modifier de fichier de configuration séparé
-
Authentik
- Plateforme IdP (Identity Provider) et SSO
- La configuration peut être stockée sous forme de blueprints (fichiers YAML), ce qui permet de respecter les principes de l’IaC
- Le middleware ForwardAuth redirige vers une page de connexion lors de l’accès à des services sensibles
Outils d’exploitation
-
Ansible
- Outil d’automatisation d’infrastructure agentless (SSH uniquement requis), apprécié pour sa configuration YAML et l’abondance d’exemples
- Chaque service est défini sous forme de rôle : tasks, defaults, handlers, templates, files
- tasks : définit les actions à exécuter
- defaults : valeurs par défaut comme les tags d’image, ports, noms de conteneurs
- handlers : redémarrage des conteneurs lors d’un changement de configuration
- templates : rendu de fichiers
.envetconfig.yamlbasés sur Jinja2 - files : configuration statique, scripts
- Étapes générales du déploiement d’un service :
- création de ressources partagées (réseaux, volumes) → création du schéma et de l’utilisateur dans PostgreSQL → rendu des templates de configuration → pull de l’image Docker → exécution du conteneur (y compris variables d’environnement et configuration du logging) → provisioning de la configuration d’authentification dans les blueprints Authentik → configuration éventuelle de Cloudflare Tunnel
- Inconvénients : documentation volumineuse, structure DSL répétitive et boilerplate, mais l’auteur continue à l’utiliser par habitude
- Les playbooks sont exécutés manuellement, sans intégration GitOps, ce qui suffit pour l’instant
-
SOPS (Secrets OPerationS)
- Chiffre uniquement les valeurs YAML/JSON, tout en conservant la structure des clés, ce qui garde les diff Git utiles
- Utilise age comme backend de chiffrement — un outil décrit comme ayant « simplifié le chiffrement sans PGP »
- Pour chaque hôte, l’auteur sépare un fichier de configuration général (
homelab.yaml) et un fichier chiffré (homelab.sops.yaml) - Workflow :
- génération de la clé avec
age-keygen→ édition du fichier chiffré avec la commandesops(déchiffrement dans l’éditeur puis rechiffrement automatique à l’enregistrement) → déchiffrement automatique à l’exécution d’Ansible - Comme Ansible prend SOPS en charge nativement, aucun module ni flag supplémentaire n’est nécessaire
- génération de la clé avec
- Avantage par rapport à Ansible Vault : le chiffrement au niveau des valeurs permet de conserver des diff exploitables, contrairement à un chiffrement du fichier entier
- Limite : il faut partager la clé privée age de manière sûre avec les membres de l’équipe, et si la clé est perdue, les secrets sont irrécupérables
- Pour un homelab exploité seul, cela reste un niveau de complexité approprié
Services en cours d’exécution
-
Gestion des médias : stack *arr
- Prowlarr : gestionnaire d’indexeurs qui transmet les résultats de recherche aux autres services *arr
- Radarr : gestionnaire de collection de films — on indique les films voulus, puis la recherche, le téléchargement et l’organisation sont automatisés
- Lidarr : même fonction pour la musique, avec intégration à Navidrome
- Bazarr : téléchargement automatique des sous-titres
- Tidarr : service permettant de conserver localement de la musique Tidal
- Transmission : client BitTorrent (port 9091) qui traite toutes les demandes de téléchargement des services *arr
- Tous les services sont placés derrière l’authentification Authentik
- L’ensemble utilise un répertoire de téléchargement partagé (
/mnt/data/docker/transmission/downloads) et PUID/PGID 1000 afin d’économiser de l’espace disque grâce aux hard links - Exemple de workflow : ajout d’un film dans Radarr → recherche via Prowlarr → téléchargement par Transmission → déplacement vers la médiathèque par Radarr → lecture possible dans Jellyfin
-
Consommation des médias
- Jellyfin : serveur multimédia open source qui, contrairement à Plex, ne nécessite pas de connexion cloud. Il utilise sa propre authentification et prend en charge divers appareils, dont une app Android TV
- Navidrome : serveur de streaming musical compatible avec l’API Subsonic, intégrable à des apps mobiles (DSub2000, etc.). Lidarr alimente le dossier de bibliothèque musicale
- Calibre Web : gestionnaire et lecteur de bibliothèque d’ebooks
- La base de métadonnées gérée dans l’application desktop Calibre sur le laptop est synchronisée vers le serveur via Syncthing
- Les livres sont accessibles depuis plusieurs lecteurs grâce à l’API OPDS
-
IA et chat
- LibreChat : interface de chat IA self-hosted capable de se connecter à plusieurs fournisseurs de LLM (OpenAI, Anthropic, Ollama local)
- Prend en charge le RAG (Retrieval Augmented Generation)
- Requiert MongoDB (historique des conversations), PostgreSQL + pgvector (embeddings) et MeiliSearch (recherche plein texte), ce qui en fait une pile relativement lourde
- Claude Code étant plus accessible, le service est peu utilisé et son retrait est envisagé
- LibreChat : interface de chat IA self-hosted capable de se connecter à plusieurs fournisseurs de LLM (OpenAI, Anthropic, Ollama local)
-
Photos et fichiers
- Immich : alternative self-hosted à Google Photos
- Sauvegarde automatique des photos depuis le téléphone, reconnaissance faciale, organisation des albums, extraction des métadonnées EXIF
- Utilise son propre PostgreSQL (avec pgvector) et un conteneur de machine learning (classification d’images), et stocke actuellement plusieurs milliers de photos
- Syncthing : synchronisation de dossiers entre laptop, téléphone et serveur. Synchronisation directe en P2P sans intermédiaire cloud
- Sert à synchroniser un vault Obsidian, des documents et d’autres contenus sur plusieurs appareils, y compris Android
- MinIO : stockage objet compatible S3, utilisé pour des tests ou applications nécessitant l’API S3
- Immich : alternative self-hosted à Google Photos
-
Lecture et information
- Miniflux : lecteur de flux RSS minimaliste, avec environ 50 blogs et sources d’actualité abonnés
- Prise en charge des raccourcis clavier et flux chronologique sans tri algorithmique
- Miniflux : lecteur de flux RSS minimaliste, avec environ 50 blogs et sources d’actualité abonnés
-
Infrastructure et authentification
- Traefik : reverse proxy qui route le trafic vers les conteneurs Docker en fonction du hostname. Détection automatique au démarrage des conteneurs si les bons labels sont présents
- Authentik : fournisseur d’ID et SSO. Protège les services via le middleware ForwardAuth et stocke les blueprints dans Git pour gérer toute la configuration d’authentification
- PostgreSQL : serveur de base de données partagé. Authentik, Miniflux, Immich, LibreChat, etc. partagent une même instance au lieu d’avoir chacun leur propre base, afin d’économiser des ressources et de simplifier les sauvegardes
- Redis : cache partagé et stockage de sessions, principalement utilisé pour la gestion de session et les files de tâches d’Authentik et d’autres services
-
Logiciels maison
- Highlight Exporter : service Go qui extrait les surlignages de livres depuis KOReader, Readwise et Apple Books pour les convertir en Markdown compatible Obsidian
- Telegram Assistant : bot Telegram fournissant diverses automatisations et un accès à l’IA dans les groupes de discussion. C’est le projet que l’auteur réécrit le plus souvent pour tester de nouvelles technologies
- Chess-blunder trainer : webapp qui importe des parties de chess.com ou lichess.com, les analyse avec Stockfish, puis sélectionne les coups ratés pour l’entraînement ; une publication open source est prévue prochainement
Monitoring
-
Beszel
- Solution de monitoring légère avec une configuration simple, une exploitation facile et de bons réglages par défaut
- La stack Grafana a été jugée excessive et trop complexe pour afficher les statistiques système de base sur deux machines
- Des projets similaires comme Glances ont aussi été perçus comme demandant trop de tuning
- Beszel couvre 120 % des besoins tout en restant très simple à installer
-
Statsping
- Outil minimaliste de ping de services pour un monitoring fin de ressources spécifiques
- Envoie des pings à des endpoints définis, remonte latence et disponibilité, et notifie de différentes façons en cas de panne
- Hébergé sur une machine cloud afin de rester accessible même si le homelab tombe, sans surcoût de maintenance notable
Points encore insuffisants
-
Sauvegardes
- Bien que l’importance des sauvegardes soit reconnue, elles ne sont actuellement pas du tout mises en œuvre
- Plus que la perte de films, musique ou photos, c’est surtout la sauvegarde des bases de données des services qui est nécessaire, mais ni la bonne solution (restic, etc.) ni la configuration matérielle n’ont encore été arrêtées
-
Configuration RAID
- Les données média et le système cohabitent sur un unique disque M2 NVMe
- L’espace physique manque pour un serveur NAS ou une machine de sauvegarde dédiée
-
Indépendance vis-à-vis du cloud
- La disponibilité des ressources dépend fortement de l’infrastructure Cloudflare Tunnel
- En cas de panne de Cloudflare, l’accès à l’infrastructure s’interrompt aussi, et l’auteur prévoit d’investir dans des alternatives à l’avenir
-
IaC et automatisation complètes
- Les playbooks Ansible sont exécutés manuellement, sans pipeline CI ni provisioning automatique
- À ce stade, un passage à GitOps ne semble pas apporter de bénéfice majeur
Efficacité des coûts et conclusion
- Environ 7 euros par mois sont dépensés pour la machine virtuelle Hetzner, et la consommation électrique du home server est estimée très faible
- L’ajout d’un nouveau service ou une modification de configuration prend environ 20 à 30 minutes, une grande partie étant déléguée à Claude Code avec une simple relecture avant déploiement
- Le temps total investi dans l’ensemble du projet est estimé à environ 100 à 150 heures sur plusieurs années
- Les données restent sous contrôle avec un minimum de dépendance fournisseur, sans risque de perte lié à un changement soudain de conditions d’utilisation, à un feed algorithmique ou à une fusion-acquisition
- L’objectif n’est pas de construire un système parfait, mais de comprendre l’infrastructure et d’y prendre plaisir ; chaque service déployé, chaque rôle Ansible écrit, chaque secret chiffré a une valeur d’apprentissage
- Pour démarrer un homelab, l’important est de commencer petit et de ne pas trop se prendre la tête
Aucun commentaire pour le moment.