Introduction
Cloudflare Tunnel permet de publier de manière fiable vos services locaux sur Internet, sans ouvrir de ports ni gérer manuellement le HTTPS. Dans ce guide, vous apprendrez à configurer un tunnel en conjonction avec Docker Compose pour proxyfier automatiquement l'accès aux conteneurs souhaités, comme s'il s'agissait d'un site public ordinaire.
Pourquoi est-ce nécessaire ?
- Pas d'IP publique — et ce n'est pas grave.
- Pas de redirection de port sur le routeur ou le pare-feu.
- Cloudflare fournit le HTTPS, le WAF, la protection DDoS et anti-bots.
- Tout peut être exécuté dans des conteneurs — sans configuration superflue de nginx, certbot, etc.
Exemple : publication d'une application web via un tunnel
Supposons que nous ayons un conteneur my-app qui fonctionne sur http://my-app:3000. Nous voulons qu'il soit accessible via https://app.example.com.
Étape 1. Préparation de Cloudflare
-
Inscrivez-vous et ajoutez votre domaine dans Cloudflare.
-
Installez
cloudflaredlocalement et effectuez l'authentification :
1cloudflared login
- Créez un tunnel :
1 cloudflared tunnel create my-tunnel
- Associez le DNS :
1 cloudflared tunnel route dns my-tunnel app.example.com
- Copiez le fichier
.jsonavec les identifiants (généralement situé dans~/.cloudflared/) dans le répertoire du projet, par exemple,./cloudflared.
Étape 2. Structure du projet
1project/
2├── docker-compose.yml
3├── cloudflared/
4│ ├── config.yml
5│ └── <votre tunnel-id>.json ici
6
Étape 3. config.yml — configuration du tunnel
1tunnel: my-tunnel
2credentials-file: /etc/cloudflared/<votre tunnel-id>.json ici
3
4ingress:
5 - hostname: app.example.com
6 service: http://my-app:3000
7 - service: http_status:404
Étape 4. docker-compose.yml
1version: '3.8'
2
3services:
4 my-app:
5 image: your-image
6 container_name: my-app
7 expose:
8 - 3000
9 networks:
10 - app-network
11
12 cloudflared:
13 image: cloudflare/cloudflared:latest
14 container_name: cloudflared
15 restart: always
16 command: tunnel --config /etc/cloudflared/config.yml run
17 volumes:
18 - ./cloudflared:/etc/cloudflared
19 networks:
20 - app-network
21
22networks:
23 app-network:
24 driver: bridge
Étape 5. Lancement
1docker compose up -d
Maintenant, en accédant à https://app.example.com, vous atteindrez votre conteneur my-app, sans ouvrir de ports vers l'extérieur.
Conclusion
L'utilisation de Cloudflare Tunnel en conjonction avec Docker Compose permet de :
- Simplifier la publication des services.
- Éliminer la nécessité d'une configuration HTTPS manuelle.
- Augmenter la sécurité sans manipulations complexes avec
iptableset nginx.
Tout fonctionne dans des conteneurs — de manière transparente et sans magie. C'est un excellent moyen de proxyfier les interfaces d'administration, les panneaux de contrôle ou les API que vous ne souhaitez pas exposer directement.