~/ziphub — zsh
ZipHub·~/catalog~/articles~/feed~/sellers~/hire
auth login
[article]category · new-cat

Cloudflare Tunnel avec Docker Compose : accès sécurisé aux conteneurs sans ports ouverts

@dignezzz · author2 min read2026-03-15free

TL;DR: Comment configurer Cloudflare Tunnel à l'aide de Docker Compose et obtenir un accès HTTPS sécurisé à vos conteneurs sans redirection de port.

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

  1. Inscrivez-vous et ajoutez votre domaine dans Cloudflare.

  2. Installez cloudflared localement et effectuez l'authentification :

bash
1cloudflared login
  1. Créez un tunnel :
bash
1    cloudflared tunnel create my-tunnel
  1. Associez le DNS :
bash
1    cloudflared tunnel route dns my-tunnel app.example.com
  1. Copiez le fichier .json avec les identifiants (généralement situé dans ~/.cloudflared/) dans le répertoire du projet, par exemple, ./cloudflared.

Étape 2. Structure du projet

yaml
1project/
2├── docker-compose.yml
3├── cloudflared/
4   ├── config.yml
5   └── <votre tunnel-id>.json ici
6

Étape 3. config.yml — configuration du tunnel

yaml
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

yaml
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

bash
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 iptables et 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.

~2 min read · scroll to continue ↓

## discussion

$ topics --entity=article0
sign in to start or join a discussion
No discussions yet — start one to break the ice.
↑↓ nav open⌘K palettei install? help