Traefik sur Docker Swarm - Reverse Proxy Moderne
Aucune installation système requise - Cette méthode utilise l'image Docker officielle de Traefik, évitant toute installation de paquets système ou dépendances complexes sur l'hôte. Traefik s'exécute entièrement en conteneur, garantissant isolation et facilité de mise à jour.
Installation avec Docker Swarm
Structure du projet
mkdir -p /cephfs/services/traefik
cd /cephfs/services/traefik
Fichier docker-compose.yml
version: '3.8'
services:
proxy:
image: "traefik:latest"
command:
- "--log.level=INFO"
- "--accesslog=true"
- "--api.insecure=true"
- "--api.dashboard=true"
- "--providers.docker=true"
- "--providers.swarm.endpoint=unix:///var/run/docker.sock"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--certificatesResolvers.letsencrypt.acme.httpChallenge=true"
- "--certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint=web"
- "--certificatesResolvers.letsencrypt.acme.email=*********"
- "--certificatesResolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
# - "--certificatesResolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
ports:
- "80:80"
- "443:443"
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 10s
order: start-first
restart_policy:
condition: on-failure
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.auth.basicAuth.users=admin:PASSWORD"
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
# Dashboard Traefik
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.domain.tld`)"
- "traefik.http.routers.traefik-dashboard.entrypoints=websecure"
- "traefik.http.routers.traefik-dashboard.middlewares=auth"
- "traefik.http.routers.traefik-dashboard.tls=true"
- "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
networks:
- traefik-network
networks:
traefik-network:
external: true
Déploiement
1. Créer le réseau Docker
docker network create -d overlay traefik-network
2. Créer le dossier des certificats
mkdir letsencrypt
chmod 600 letsencrypt
3. Déployer le stack
docker stack deploy -c docker-compose.yml traefik
4. Vérifier le déploiement
docker service ls
docker service logs traefik_proxy
Configuration Détaillée
Commandes Traefik Expliquées
Providers Docker
- "--providers.docker=true"
- "--providers.swarm.endpoint=unix:///var/run/docker.sock"
- "--providers.docker.exposedbydefault=false"
- Pourquoi : Traefik découvre automatiquement les services Docker
- Swarm : Spécifique pour l'orchestration Docker Swarm
- exposedbydefault=false : Sécurité - seuls les services avec labels Traefik sont exposés
EntryPoints et Redirections
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- web : Port 80 pour HTTP et challenges Let's Encrypt
- websecure : Port 443 pour HTTPS
- Redirections : Redirige automatiquement HTTP vers HTTPS
Let's Encrypt SSL Automatique
- "--certificatesResolvers.letsencrypt.acme.httpChallenge=true"
- "--certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint=web"
- "--certificatesResolvers.letsencrypt.acme.email=admin@owlsys.fr"
- "--certificatesResolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- httpChallenge : Validation via HTTP pour les certificats SSL
- email : Pour les notifications d'expiration
- storage : Fichier de stockage des certificats
Sécurité Dashboard
- "traefik.http.middlewares.auth.basicAuth.users=admin:PASSWORD"
- Basic Auth : Protection par mot de passe du dashboard
- Générer un password :
htpasswd -nB admin
Utilisation avec les Services
Exemple : Service WordPress
services:
wordpress:
image: wordpress:latest
deploy:
labels:
- "traefik.enable=true"
- "traefik.http.routers.wordpress.rule=Host(`mon-site.domain.tld`)"
- "traefik.http.routers.wordpress.entrypoints=websecure"
- "traefik.http.routers.wordpress.tls=true"
- "traefik.http.routers.wordpress.tls.certresolver=letsencrypt"
- "traefik.http.services.wordpress.loadbalancer.server.port=80"
networks:
- traefik-network
Dépannage
Vérifier l'état des services
docker service ps traefik_proxy
docker service logs traefik_proxy --tail 50
Vérifier les certificats Let's Encrypt
docker exec $(docker ps -q --filter "name=traefik") cat /letsencrypt/acme.json
Accéder au Dashboard
- URL :
https://traefik.domain.tld
- Authentification : Basic Auth avec les identifiants configurés
Mode Staging (Test)
Pour tester sans risquer les limites Let's Encrypt :
- "--certificatesResolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
Avantages de cette Configuration
- ✅ SSL Automatique avec Let's Encrypt
- ✅ Redirection HTTP→HTTPS transparente
- ✅ Découverte automatique des services
- ✅ Dashboard de monitoring
- ✅ Haute disponibilité avec Docker Swarm
- ✅ Sécurisé : Basic Auth et exposition selective
Cette configuration fournit un reverse proxy production-ready avec gestion automatique des certificats SSL.