165 lines
6.7 KiB
Markdown
165 lines
6.7 KiB
Markdown
---
|
|
title: DockFlare
|
|
created: 2026-06-06
|
|
updated: 2026-06-06
|
|
type: app
|
|
tags: [catalogue, reverse-proxy, cloudflare, tunnel, docker, dns, webui]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/ChrispyBacon-dev/DockFlare]
|
|
---
|
|
|
|
# ☁️ DockFlare
|
|
|
|
> **Gestionnaire de tunnels Cloudflare automatisé par labels Docker, avec WebUI de supervision**. Réputation : excellent complément à [[app-cloudflared]] pour les utilisateurs qui veulent piloter leurs tunnels depuis Docker.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Champ | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [github.com/ChrispyBacon-dev/DockFlare](https://github.com/ChrispyBacon-dev/DockFlare) |
|
|
| **GitHub** | [ChrispyBacon-dev/DockFlare](https://github.com/ChrispyBacon-dev/DockFlare) |
|
|
| **License** | MIT |
|
|
| **Langage** | Python (Flask), JavaScript |
|
|
| **Étoiles GitHub** | 2.2k ⭐ |
|
|
| **Dernière MAJ** | 2026-06 |
|
|
| **Catégorie** | [[cat-reverse-proxy\|Reverse Proxy]], Tunnel, Cloudflare |
|
|
|
|
## 📝 Description
|
|
|
|
**DockFlare** est une **WebUI + orchestrateur** pour **Cloudflare Tunnels** qui automatise la création des ingress rules et des DNS CNAME à partir de **labels Docker** posés sur vos conteneurs. Au lieu de gérer manuellement votre `config.yml` de `cloudflared`, vous déclarez l'intention sur le conteneur et DockFlare réconcilie l'état réel sur l'API Cloudflare.
|
|
|
|
Le principe de fonctionnement : un daemon Python surveille les événements Docker (`docker events`), lit les labels `dockflare.enable=true`, `dockflare.hostname=app.example.com`, et **propage la configuration** sur l'API Cloudflare. La WebUI affiche l'état de tous les tunnels et de leurs ingress rules, avec édition manuelle possible.
|
|
|
|
**DockFlare ne remplace pas cloudflared** — il orchestre sa configuration. Vous avez toujours besoin d'un (ou plusieurs) agents `cloudflared` qui font passerelle entre Internet et votre réseau. DockFlare est à `cloudflared` ce que **Traefik** est à Nginx : un planificateur intelligent.
|
|
|
|
**Public cible** : utilisateurs qui veulent **la simplicité de Cloudflare Tunnel** (pas de port forwarding, IP masquée) **combinée à l'auto-discovery Docker** (à la Traefik). Idéal pour les setups derrière un NAT strict ou un CGNAT.
|
|
|
|
## 🚀 Installation
|
|
|
|
### Option 1 : Docker Compose (recommandé)
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
cloudflared:
|
|
image: cloudflare/cloudflared:latest
|
|
container_name: cloudflared
|
|
restart: unless-stopped
|
|
command: tunnel run
|
|
environment:
|
|
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
|
|
networks:
|
|
- dockflare-net
|
|
depends_on:
|
|
- dockflare
|
|
|
|
dockflare:
|
|
image: alplat/dockflare:latest
|
|
container_name: dockflare
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5000:5000" # WebUI
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
environment:
|
|
- CF_API_TOKEN=${CF_API_TOKEN}
|
|
- CF_ACCOUNT_ID=${CF_ACCOUNT_ID}
|
|
- CF_TUNNEL_ID=${CF_TUNNEL_ID}
|
|
- TUNNEL_NAME=home-tunnel
|
|
- LABELS_MODE=secure
|
|
networks:
|
|
- dockflare-net
|
|
|
|
networks:
|
|
dockflare-net:
|
|
```
|
|
|
|
> 💡 **Variables d'environnement sensibles** : `TUNNEL_TOKEN` et `CF_API_TOKEN` doivent être dans un `.env` non versionné.
|
|
|
|
### Option 2 : Variante Traefik
|
|
|
|
DockFlare est **complémentaire** de Traefik dans certains setups : Traefik gère le reverse proxy interne, DockFlare gère l'exposition publique via Cloudflare. Les deux peuvent coexister.
|
|
|
|
```yaml
|
|
# Sur une app exposée à la fois en interne (Traefik) et en externe (Cloudflare)
|
|
services:
|
|
mon-app:
|
|
labels:
|
|
# Traefik (interne)
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.app.rule=Host(`app.lan`)"
|
|
# DockFlare (externe via Cloudflare)
|
|
- "dockflare.enable=true"
|
|
- "dockflare.hostname=app.example.com"
|
|
- "dockflare.service=http://mon-app:80"
|
|
```
|
|
|
|
## ⚙️ Configuration Initiale
|
|
|
|
1. **Créer un tunnel Cloudflare** : `cloudflared tunnel create home-tunnel` puis récupérer le token
|
|
2. **Créer un token API Cloudflare** avec permissions `Zone:DNS:Edit` et `Account:Cloudflare Tunnel:Edit`
|
|
3. **Renseigner** `.env` avec `TUNNEL_TOKEN`, `CF_API_TOKEN`, `CF_ACCOUNT_ID`, `CF_TUNNEL_ID`
|
|
4. **Lancer** : `docker compose up -d`
|
|
5. **Accéder à la WebUI** : `http://localhost:5000`
|
|
6. **Ajouter des labels** sur les conteneurs à exposer
|
|
|
|
```yaml
|
|
# Exemple labels
|
|
labels:
|
|
- "dockflare.enable=true"
|
|
- "dockflare.hostname=photos.example.com"
|
|
- "dockflare.service=http://immich-server:2283"
|
|
- "dockflare.access.policy=authenticated" # optionnel
|
|
```
|
|
|
|
## 🔀 Alternatives
|
|
|
|
### Open Source
|
|
- **cloudflared** standalone (sans DockFlare) : config manuelle via `config.yml`
|
|
- [[app-traefik]] : auto-discovery Docker mais pas spécifique à Cloudflare
|
|
- [[app-pangolin]] : concurrent plus large (tunnel + auth + reverse proxy)
|
|
- [[app-caddy]] : peut s'intégrer à Cloudflare via le plugin DNS
|
|
|
|
### Comparaison DockFlare vs cloudflared standalone vs Traefik
|
|
|
|
| Critère | DockFlare | cloudflared seul | Traefik + Cloudflare |
|
|
| :--- | :--- | :--- | :--- |
|
|
| Auto-discovery Docker | ✅ | ❌ | ✅ |
|
|
| WebUI | ✅ | ❌ | ⚠️ Dashboard basique |
|
|
| Édition manuelle | ✅ | ✅ (config.yml) | ⚠️ |
|
|
| Tunnel Cloudflare | ✅ (orchestre) | ✅ (mote) | ⚠️ Plugin |
|
|
| Auth intégrée | ⚠️ Basique | ❌ | ⚠️ ForwardAuth |
|
|
| Multi-tunnel | ✅ | ⚠️ Config complexe | ⚠️ |
|
|
| Sans port forwarding | ✅ | ✅ | ⚠️ Selon config |
|
|
|
|
### Propriétaires (ce que DockFlare remplace)
|
|
- **Cloudflare Zero Trust dashboard** (en partie, pour la partie tunnel)
|
|
- **Ngrok Business** (en self-hosted)
|
|
|
|
## 🔒 Sécurité
|
|
|
|
- ✅ **Pas d'exposition de ports** sur l'IP publique (Cloudflare Tunnel)
|
|
- ✅ **IP d'origine masquée** derrière le réseau Cloudflare
|
|
- ✅ **WebUI protégée** par token / mot de passe configurable
|
|
- ✅ **Cloudflare Access** intégrable (auth Zero Trust)
|
|
- ⚠️ **Token Cloudflare = accès total au compte** : rotation régulière recommandée
|
|
- ⚠️ **Socket Docker monté** : envisager [[app-docker-socket-proxy]] en amont
|
|
- ⚠️ **Pas de rate-limiting natif** : compter sur Cloudflare côté edge
|
|
|
|
## 📚 Ressources
|
|
|
|
- [README GitHub](https://github.com/ChrispyBacon-dev/DockFlare)
|
|
- [Wiki - BasicUsageSingleDomain](https://github.com/ChrispyBacon-dev/DockFlare/wiki/BasicUsageSingleDomain.md)
|
|
- [Documentation Cloudflare Tunnels](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/)
|
|
- [Wiki selfh.st](https://selfh.st/apps/?tag=Reverse+Proxy)
|
|
|
|
## 🔗 Pages Liées
|
|
|
|
- [[cat-reverse-proxy]] — Catégorie Reverse Proxy
|
|
- [[app-traefik]] — Concurrent auto-discovery
|
|
- [[app-pangolin]] — Concurrent orienté tunnel + auth
|
|
- [[app-cloudflared]] — Composant sous-jacent
|
|
- [[comparatif-reverse-proxy]] — Comparaison détaillée
|
|
- [[securisation-home-lab]] — Sécurité
|