Comment utiliser Traefik v3 avec Docker compose en mode swarm
· 2 minutes de lecture
La récente sortie de Traefik v3 apporte de nombreuses nouvelles fonctionnalités. Cet article n'a pas pour but d'expliquer toutes les nouveautés de Traefik v3, mais de vous montrer comment l'utiliser avec Docker compose.
Prérequis
Avant de commencer, vous devez avoir Docker et Docker compose installés sur votre machine. Si vous ne les avez pas installés, vous pouvez suivre la documentation officielle pour les installer.
Créer un fichier Docker compose
Créons un fichier docker-compose.yml simple pour déployer un serveur web et Traefik v3.
version: '3.8'
services:
traefik:
image: traefik:v3.0
networks:
- web
ports:
- target: 80
published: 80
protocol: tcp
mode: host
- target: 443
published: 443
protocol: tcp
mode: host
environment:
- TZ=Europe/Paris
command:
- --providers.swarm.endpoint=unix:///var/run/docker.sock
- --providers.docker.exposedbydefault=false
- --providers.swarm.network=fdp_web
- --accesslog
- --entryPoints.websecure.address=:443
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.myresolver.acme.email=organisation@lesfousdupeloton.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--entryPoints.web.forwardedHeaders.trustedIPs=10.0.0.0/24,10.0.2.0/24,192.168.100.0/24"
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=10.0.0.2/24,10.0.2.0/24,192.168.100.0/24"
- --accesslog.filepath=/log/acces/access.log
- "traefik.http.middlewares.exclude-ip-log.ipwhitelist.sourceRange=217.72.195.109" # Adresse IP à exclure pour le ping
volumes:
- ./certs:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./log:/log
deploy:
placement:
constraints:
- node.role == manager
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
labels:
- "traefik.enable=false"
frontend:
image: registry.gitlab.com/entrecompetents/lesfousdupeltoton/frontend:1.0.8
hostname: frontend.lfdp
networks:
- web
deploy:
mode: replicated
replicas: 1
labels:
- "traefik.enable=true"
- traefik.http.services.frontend.loadbalancer.server.port=8080
- traefik.http.routers.frontend.rule=Host(`lesfousdupeloton.com`)
- "traefik.http.routers.frontend.entrypoints=websecure"
- "traefik.http.routers.frontend.tls.certresolver=myresolver"
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8080/"] # Commande de vérification de santé utilisant curl
interval: 5s # Intervalle de vérification de santé
timeout: 2s # Délai d'attente pour la vérification de santé
retries: 3 # Nombre de tentatives avant de marquer le conteneur comme non sain
start_period: 10s # Délai avant de commencer les vérifications de santé après le démarrage du conteneur
networks:
web: