60 points par GN⁺ 2026-04-14 | 19 commentaires | Partager sur WhatsApp
  • 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 .env et config.yaml basé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 commande sops (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
    • 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é
  • 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
  • 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
  • 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

19 commentaires

 
dongho42 2026-04-14

J’utilisais Tailscale, mais maintenant j’utilise Cloudflare Tunnel et c’est vraiment excellent. Leurs usages sont un peu différents, mais dans mon cas, Tailscale entrait en conflit avec Adguard, donc c’était difficile à utiliser.

 
minhoryang 2026-04-15

Il ne suffit pas de définir le DNS parent de Tailscale sur AdGuard ?

 
click 2026-04-16

Ce n’est pas le cas d’AdGuard Desktop, mais AdGuard Mobile fonctionne comme un VPN local, donc on ne peut pas l’utiliser en même temps.

 
dongho42 2026-04-16

Il semble que le conflit se soit produit au niveau du VPN, et non du DNS.

 
kw9101 2026-04-14

Récemment, en essayant par tous les moyens de faire diffuser MBC Radio sur Google Nest,
j’ai utilisé Cloudflare Tunnel. C’est un excellent service, au point de se demander pourquoi il est gratuit.

 
hulryung 2026-04-14

Ça a l’air intéressant. Racontez-nous un peu.

 
toida 2026-04-15

J’utilise l’offre free tier d’Oracle Cloud. Avec 4 vCPU, 24 Go de RAM et 200 Go, et à part quelques incompatibilités occasionnelles liées à l’architecture ARM, c’est un super jouet.

 
click 2026-04-15

Mon nouvel opérateur bloquait les ports 80 et 443, donc je contourne ça avec un Cloudflare Tunnel.
Sans ça, j’aurais presque payé les pénalités de résiliation pour changer d’opérateur.

 
recast7838 2026-04-15

Chez quel opérateur êtes-vous pour qu’ils aient bloqué les ports ?

 
click 2026-04-16

À vrai dire, ce n’est pas moi qui l’avais bloqué directement ; c’est plutôt que le routeur du FAI empêchait le port forwarding sur les ports 80 et 443.
Comme j’utilisais un routeur tiers pour faire du port forwarding, ils ont discrètement bridé à 100 Mbps le débit de mon abonnement censé être en option 1g.
En cherchant une alternative, j’ai trouvé que le plus propre était finalement de le faire passer par un tunnel CF.

 
keepworking 2026-04-16

Vérifiez si votre routeur tiers dispose d’une fonction de conversion d’adresse MAC, puis essayez de la convertir en celle du routeur de l’opérateur ; il me semble que cela pourrait aussi permettre de contourner le problème.

 
click 2026-04-17

Une fois le tunnel cf configuré, les logs fail2ban qui s’accumulaient sur les ports 80 et 443 ont complètement disparu, donc je les ai carrément retirés et je n’y ai plus repensé depuis.
J’ai aussi acheté le domaine directement chez Cloudflare et configuré le SSO chez Cloudflare ; si on ne passe pas le SSO, impossible d’utiliser les services, ce qui fait que Cloudflare encaisse toutes les attaques à ma place.
Comme il n’y a que des services que j’utilise seul derrière, cette configuration est largement suffisante à l’usage.
Et si Cloudflare tombe en panne, j’ai décidé d’accepter ce compromis.

 
antegral 2026-04-15

J’ai entendu dire que, souvent, les routeurs fournis par les opérateurs bloquent le port forwarding.

On pourrait bien sûr l’ouvrir en ajoutant un routeur tiers… mais comme vous l’avez dit, cf tunnel intègre déjà un WAF de base et peut même s’appuyer sur la région ICN, donc il n’y a franchement pas beaucoup de raisons de ne pas l’utiliser.

 
bus710 2026-04-15

J’ai déployé n8n sur mon homelab et je le relie à Anthropic, Telegram, du stockage, etc., pour faire tourner plein de petites tâches ; comme les connecteurs sont bien faits, c’est vraiment pratique.

 
ndrgrd 2026-04-14

J’utilise un appareil basse consommation de la série Ryzen 8000 comme serveur domestique 24/7.
Je m’en sers habituellement comme NAS, et avec les conteneurs et les services, j’en fais tourner environ 70 au total ; au final, la consommation électrique n’atteint même pas 10 kWh par mois. Cela revient à un coût d’environ 2 000 wons.

 
kimjoin2 2026-04-14

Cloudflare Tunnel
J’adore.

 
kimjoin2 2026-04-14

Il arrive que certains amis mettent du temps à répondre et crachent parfois des 502,
mais bon, c’est gratuit~

 
j2sus91 2026-04-14

J’utilise aussi un tunnel cloud, et c’est vraiment très pratique.
En général, quand on est derrière un routeur, c’est souvent le routeur qui possède l’IP externe.

En utilisant Cloudflare Tunnel, même une IP interne
peut devenir accessible depuis l’extérieur via l’enregistrement d’un domaine~

Et en plus, c’est gratuit,

 
GN⁺ 2026-04-14
Réactions sur Hacker News
  • C’est vraiment cool, mais il ne faut pas utiliser Cloudflare Tunnel pour le streaming de médias
    C’est interdit par les conditions d’utilisation, ou au minimum ce n’est pas l’usage prévu. Le service peut être bloqué
    Mieux vaut utiliser Wireguard ou Tailscale
    Article lié

    • Du coup, pour la même raison, je loue aussi un VPS à 5 dollars par mois et je m’y connecte avec Tailscale
      C’est aussi pratique pour contourner le CGNAT, et côté interface graphique je recommande Nginx Proxy Manager
    • Je me demande si Tailscale Funnel prend désormais en charge les domaines personnalisés
      Je suis en train de migrer vers une combinaison rathole + traefik. J’ai fait des tests jusqu’au petit matin et j’y ai passé la nuit
    • Cloudflare Tunnel expose publiquement un service, alors que Wireguard/Tailscale sont des VPN
      Tailscale (pas Headscale) propose aussi une fonction de reverse proxy appelée Funnel, mais on ne peut pas utiliser son propre domaine
      Comme alternative à CF Tunnel, Pangolin est ce qui s’en rapproche le plus, et on peut aussi auto-héberger NetBird avec une fonction de reverse proxy
    • Si je me souviens bien, les conditions de CF interdisaient surtout le cache média, pas le streaming en lui-même
  • Ça ressemble moins à un fantasme d’« indépendance » qu’à un fantasme de devenir administrateur système

    • J’adore le fait de ne pas avoir à m’inquiéter de perdre l’accès à la musique que j’aime pour des raisons de licence
    • L’indépendance implique aussi des responsabilités. Les deux sont inséparables
    • Par exemple, on voit sur r/homelab des gens monter eux-mêmes un NAS pour stocker les photos de leur femme au lieu d’utiliser Google Photos
      Mais honnêtement, payer 5 dollars par mois à Google ou Apple me semble être un bien meilleur choix. Je doute même qu’ils fassent une sauvegarde 3-2-1
  • Ce serait bien qu’il existe à la bibliothèque municipale un groupe de bénévoles qui fasse tourner ce genre de services
    Ce serait une bonne occasion pour les enfants d’apprendre à exploiter des services, et pour les personnes peu à l’aise avec la technique de profiter de l’open source

    • Mais le problème, c’est toujours le support
      Personne ne veut s’occuper du support client. C’est pour ça que la plupart des services reposent sur un modèle où l’on paie pour pouvoir dire : « voyez ça avec leur support »
  • Pour la gestion des secrets, j’utilise fnox
    Ça prend en charge bien plus de backends que sops, et je trouve aussi que la DX (expérience développeur) est meilleure

    • Moi, j’auto-héberge Infisical
    • Ça a l’air intéressant. J’utilise SOPS en ce moment, mais ça vaut le coup d’être envisagé comme alternative
  • On parle d’un « fantasme d’homme indépendant et préparé », mais au final Cloudflare reste au milieu, donc ce n’est pas une indépendance totale

  • Cloudflare Tunnel est vraiment un excellent outil
    Avant, j’hébergeais directement sur l’IP de chez moi, mais maintenant je gère tout bien plus facilement avec cloudflared
    Je m’inquiète aussi moins du pare-feu et des intrusions réseau
    Mon homelab est désormais géré par des scripts bash idempotents écrits par Claude
    J’ai l’impression que les dépendances deviennent complexes à cause du désir de chacun de modifier les propriétés, et que leurs interactions créent des bugs
    C’est pour ça qu’exprimer tout avec de simples scripts bash me paraît plus fiable
    En ce moment, j’utilise systemd + des conteneurs podman, et j’ai laissé une page de notes pour mes archives

    • Ça ne pose pas de problème de confidentialité que Cloudflare puisse voir toutes les données ?
      Je me demande si, selon toi, le confort d’usage compense réellement cet inconvénient
    • J’aimerais savoir quel est l’avantage de Cloudflare Tunnel par rapport au simple usage de Wireguard
  • Je ne comprends pas pourquoi tout le monde met ça sur l’Internet public. Pourquoi ne pas simplement utiliser Tailscale ?

    • C’est pratique de pouvoir juste installer l’appli et définir une URL publique, sans avoir à rattacher tout le monde au même tailnet
    • Tailscale est une solution disproportionnée. Il suffit d’ouvrir les ports 80 et 443 et de bien configurer l’authentification via un reverse proxy pour que ce soit suffisamment sûr. Je fonctionne comme ça depuis des années
    • Mais il y a aussi des cas où des utilisateurs externes, sur une smart TV par exemple, doivent accéder à Jellyfin sans pouvoir installer Tailscale
  • L’auteur semble confondre homelab et self-hosting
    Le self-hosting consiste à exploiter des services dont on se sert réellement, alors qu’un homelab est un environnement d’expérimentation et d’apprentissage
    Je ne mets pas mes données personnelles ni mes services dans un homelab. C’est un espace qui peut casser

  • J’ai déjà vu en Ukraine une entreprise SaaS qui traitait réellement du trafic de production depuis un bunker souterrain

  • J’ai été choqué de voir que mes abonnements de streaming me coûtaient 1 300 dollars par an
    J’ai donc acheté un NAS et 36 To de disques, monté une stack arr et résilié tous les abonnements
    Toute la famille a suivi le mouvement, ce qui nous fait économiser 5 à 6 000 dollars par an
    Le NAS devrait être amorti en quelques mois, et maintenant ce n’est plus que du bénéfice net
    Grâce au code de Claude, la configuration a pris seulement quelques heures
    Et en plus, je peux avoir une curation de contenu sans bruit façon Netflix ou Hulu, ce qui rend le tout bien plus agréable

    • Un autre gros avantage, c’est la possibilité de faire du streaming à haut bitrate
      En rippant des Blu-ray 4K et en les diffusant chez soi, on obtient une qualité d’image bien supérieure aux services commerciaux
    • J’utilise une approche hybride. Je garde les abonnements bon marché, mais pour la meilleure qualité sans pub je passe par mon propre serveur multimédia
      J’ai l’impression que le rapport qualité-prix des services de streaming est au plus bas aujourd’hui. Même les offres chères sont souvent limitées au 1080p
    • Je me demande si c’est légal. J’imagine que l’idée est d’éviter l’upload ?
    • Ou alors, on peut aussi choisir de ne plus y consacrer ni argent ni temps, sortir de son addiction à la consommation de contenus et se trouver un autre hobby