Auto-hébergement sur mini PC avec Docker + Cloudflare Tunnel
Comment exposer plusieurs services web en toute sécurité avec un seul mini PC à la maison. HTTPS via Cloudflare Tunnel sans ouvrir de port, et tout tourne avec Docker Compose.
L'essentiel
Lancez vos services avec Docker Compose sur un mini PC, puis branchez domaine et HTTPS via Cloudflare Tunnel (cloudflared) sans ouvrir le moindre port. Ni config du routeur, ni IP fixe, ni renouvellement de certificat.
Sur cette page
Les factures cloud pèsent plus qu'on ne le croit sur les petits projets. Moi, je fais tourner plusieurs services, y compris ce blog, sur un seul mini PC à la maison. Je partage la méthode.
Pourquoi un mini PC
- Toujours allumé, pour quelques euros d'électricité par mois
- Avec Docker, l'environnement de déploiement est identique au cloud
- Si le trafic explose, on migrera à ce moment-là
Il ne reste qu'un seul problème : « comment exposer son réseau domestique vers l'extérieur en toute sécurité ».
N'ouvrez pas de ports
La méthode traditionnelle : redirection de ports sur le routeur + DDNS + renouvellement de certificats. C'est fastidieux, et cela revient à ouvrir son réseau domestique directement sur Internet. Risqué.
À la place, on utilise Cloudflare Tunnel. Sur le mini PC, cloudflared ouvre une connexion sortante vers Cloudflare, et le trafic entre par ce tunnel. Nombre de ports entrants ouverts vers l'extérieur : 0.
사용자 → Cloudflare(HTTPS) → 터널 → 미니 PC 의 컨테이너
- Pas besoin d'IP publique ni de redirection de ports
- Cloudflare gère automatiquement les certificats HTTPS
- Une IP dynamique ne pose aucun problème
Regrouper les services avec Docker Compose
Chaque service tourne dans un conteneur. Pour une appli Next.js, on la construit avec output: "standalone" pour obtenir une image légère.
services:
blog:
build:
context: .
dockerfile: apps/blog/Dockerfile
container_name: why-next-blog
restart: unless-stopped
networks: [api]
networks:
api:
external: true # cloudflared 와 같은 네트워크
L'essentiel est de placer le conteneur sur le même réseau Docker que cloudflared. C'est ainsi que le tunnel retrouve le service par son nom de conteneur.
Brancher le domaine
Dans le tableau de bord Cloudflare (ou la config du tunnel), on ajoute un Public Hostname.
blog.example.com → http://why-next-blog:3001
Et c'est tout. Un docker compose up -d --build, et quelques minutes plus tard le site s'ouvre sur votre domaine.
En résumé
- Mini PC + Docker = déploiement bon marché, identique au cloud
- Cloudflare Tunnel pour HTTPS et domaine sans ouvrir de port
- Placer les conteneurs sur le même réseau que cloudflared
- Un Public Hostname pour mapper
domaine → conteneur:port
Pour de petits services, cette combinaison tient largement la route. C'est comme ça que je fais tourner plusieurs applis et que j'agrandis la liste de mes créations.
Questions fréquentes
Mon IP domestique est dynamique, c'est un problème ?
Aucun. Avec Cloudflare Tunnel, c'est le mini PC qui ouvre une connexion sortante vers Cloudflare, donc IP publique, redirection de ports et DDNS sont totalement inutiles.
Est-ce que ça coûte quelque chose ?
Cloudflare Tunnel est gratuit en soi. Il suffit du coût d'un nom de domaine pour commencer.
Articles similaires
- 💻 Dev
Construire un blog MDX avec Next.js : comment ce blog a été fait
Comment j'ai construit un blog qui tourne uniquement avec des fichiers markdown, sans CMS, avec Next.js 16 et l'App Router. Structure des dossiers, config MDX et SEO, avec le vrai flux de code.
- 💻 Dev
5 applis dans un seul dépôt : le monorepo Turborepo d'un développeur solo
Comment gérer plusieurs applis et sites web dans un seul dépôt avec un monorepo Turborepo. Partage des configs communes, économies de build grâce au cache et déploiement par appli, vu du terrain.
- 📚 Apprentissage
Arrêtez de mémoriser des mots anglais : transformez-les en vos propres phrases
Pourquoi les mots ne sortent jamais quand vous en avez besoin, peu importe combien vous en mémorisez, et comment transformer les objets vus aujourd'hui en vos propres phrases pour qu'ils restent en mémoire.