Traefik : Le reverse proxy moderne pour Docker

Docker Reverse Proxy SSL Traefik
Traefik : Le reverse proxy moderne pour Docker

Le jour où j'ai découvert Traefik

Été 2022. Je gérais une dizaine de conteneurs Docker sur mon infra personnelle. Portainer, Gitea, Paperless, mes applications Django, etc. Chaque fois que j'ajoutais un nouveau service, c'était la même routine : éditer la config Nginx, ajouter un bloc server, recharger Nginx, lancer Certbot pour le SSL, croiser les doigts. Ça prenait 15 minutes à chaque fois, et un jour, j'ai cassé la config Nginx. Tous mes services étaient down.

C'est là qu'un collègue m'a parlé de Traefik. "Tu ajoutes juste des labels Docker, et Traefik configure tout automatiquement, même le SSL." J'étais sceptique. Mais après l'avoir testé, je n'ai plus jamais touché à un fichier de conf Nginx pour mes conteneurs Docker. Traefik a changé ma vie de DevOps.

Pourquoi Traefik plutôt que Nginx pour Docker ?

Nginx, c'est le couteau suisse des reverse proxy. C'est puissant, rapide, éprouvé. Mais pour Docker, c'est l'enfer. Chaque fois que vous lancez un nouveau conteneur, vous devez éditer manuellement la config Nginx, relancer le service, gérer les certificats SSL. C'est répétitif, fastidieux, et source d'erreurs.

Traefik, c'est l'inverse. Il est conçu spécifiquement pour les environnements dynamiques comme Docker. Il écoute l'API Docker, détecte automatiquement les nouveaux conteneurs, lit leurs labels, et configure le routage tout seul. Vous lancez un conteneur avec les bons labels ? Boum, il est accessible via HTTPS avec un certificat Let's Encrypt généré automatiquement. Zéro config manuelle.

1. Architecture de Traefik

Traefik fonctionne en trois couches. D'abord, les entrypoints : ce sont les ports d'entrée (80 pour HTTP, 443 pour HTTPS). Ensuite, les routers : ils définissent les règles de routage (quelle URL va vers quel service). Enfin, les services : ce sont vos conteneurs Docker finaux.

Le plus beau, c'est que vous n'avez pas à configurer tout ça à la main. Traefik lit les labels Docker et génère automatiquement les routers et services. C'est de la découverte de services à la volée. Et avec les middlewares, vous pouvez ajouter des redirections HTTP vers HTTPS, de l'authentification basique, du rate limiting, etc.

2. Configuration avec docker-compose

Voici ma stack Traefik de base, celle que j'utilise sur tous mes serveurs. Elle gère le SSL automatique via Let's Encrypt, expose les ports 80 et 443, et est connectée au réseau Docker pour découvrir les conteneurs.

# docker-compose.yml pour Traefik
version: '3.8'

services:
  traefik:
    image: traefik:v2.11
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/traefik.yml:ro
      - ./acme.json:/acme.json
      - ./logs:/logs
    networks:
      - web
    labels:
      # Dashboard Traefik (optionnel, sécurisé)
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`traefik.mondomaine.fr`)"
      - "traefik.http.routers.dashboard.service=api@internal"
      - "traefik.http.routers.dashboard.entrypoints=https"
      - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"

networks:
  web:
    external: true

Configuration traefik.yml

# traefik.yml
api:
  dashboard: true

entryPoints:
  http:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https
  https:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    network: web

certificatesResolvers:
  letsencrypt:
    acme:
      email: contact@mondomaine.fr
      storage: acme.json
      httpChallenge:
        entryPoint: http

log:
  level: INFO
  filePath: /logs/traefik.log

accessLog:
  filePath: /logs/access.log
Astuce importante : Le fichier acme.json doit avoir les permissions 600 sinon Traefik refusera de démarrer. Faites touch acme.json && chmod 600 acme.json avant de lancer Traefik.

3. Configuration des labels Docker

Maintenant, la magie. Pour exposer un conteneur via Traefik, vous ajoutez simplement des labels dans votre docker-compose.yml. Traefik détecte le conteneur, lit les labels, et configure tout automatiquement. Voici un exemple concret avec une application web.

# docker-compose.yml pour une application
version: '3.8'

services:
  webapp:
    image: monapp:latest
    container_name: webapp
    restart: unless-stopped
    networks:
      - web
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webapp.rule=Host(`app.mondomaine.fr`)"
      - "traefik.http.routers.webapp.entrypoints=https"
      - "traefik.http.routers.webapp.tls.certresolver=letsencrypt"
      - "traefik.http.services.webapp.loadbalancer.server.port=8000"

networks:
  web:
    external: true

Explication des labels

  • traefik.enable=true : Active Traefik pour ce conteneur (obligatoire car exposedByDefault: false)
  • traefik.http.routers.webapp.rule=Host(`app.mondomaine.fr`) : Route tout le trafic venant de app.mondomaine.fr vers ce conteneur
  • traefik.http.routers.webapp.entrypoints=https : Utilise l'entrypoint HTTPS (port 443)
  • traefik.http.routers.webapp.tls.certresolver=letsencrypt : Génère un certificat SSL via Let's Encrypt automatiquement
  • traefik.http.services.webapp.loadbalancer.server.port=8000 : Le conteneur écoute sur le port 8000

C'est tout. Vous lancez le conteneur avec docker-compose up -d, et en 30 secondes, votre application est accessible en HTTPS avec un certificat valide. Pas de config Nginx, pas de Certbot, pas de rechargement de service. C'est automatique.

4. Let's Encrypt automatique

Le gros avantage de Traefik, c'est le SSL automatique. Avec Nginx, vous devez lancer Certbot manuellement, configurer le renouvellement automatique, gérer les certificats. Avec Traefik, vous spécifiez juste tls.certresolver=letsencrypt dans les labels, et Traefik s'occupe de tout.

Traefik génère le certificat lors du premier accès au domaine. Il le stocke dans acme.json. Et il le renouvelle automatiquement avant expiration. Vous n'avez littéralement rien à faire. J'ai des dizaines de domaines gérés par Traefik, et je n'ai jamais eu à toucher aux certificats manuellement. Ça marche, point.

5. Middleware : Redirections et sécurité

Les middlewares Traefik permettent de modifier les requêtes et réponses. Vous pouvez forcer HTTPS, ajouter de l'authentification basique, configurer du rate limiting, gérer les CORS, etc. Voici quelques exemples pratiques que j'utilise régulièrement.

Redirection HTTP vers HTTPS

Cette redirection est déjà configurée au niveau de l'entrypoint HTTP dans traefik.yml. Toutes les requêtes HTTP sont automatiquement redirigées vers HTTPS. Simple et efficace.

Authentification basique

# Ajouter un middleware d'auth basique
labels:
  - "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xyz..."
  - "traefik.http.routers.webapp.middlewares=auth"

# Générer le mot de passe hashé
htpasswd -nb admin motdepasse

Headers de sécurité

labels:
  - "traefik.http.middlewares.security.headers.sslredirect=true"
  - "traefik.http.middlewares.security.headers.stsSeconds=31536000"
  - "traefik.http.middlewares.security.headers.contentTypeNosniff=true"
  - "traefik.http.middlewares.security.headers.browserXssFilter=true"
  - "traefik.http.routers.webapp.middlewares=security"

6. Cas d'usage pratiques

Plusieurs conteneurs, même domaine, différents chemins

# API sur /api, frontend sur /
labels:
  # API
  - "traefik.http.routers.api.rule=Host(`monsite.fr`) && PathPrefix(`/api`)"
  - "traefik.http.routers.api.entrypoints=https"
  - "traefik.http.services.api.loadbalancer.server.port=8000"

  # Frontend
  - "traefik.http.routers.frontend.rule=Host(`monsite.fr`)"
  - "traefik.http.routers.frontend.entrypoints=https"
  - "traefik.http.services.frontend.loadbalancer.server.port=3000"

Wildcard SSL (*.mondomaine.fr)

Pour un wildcard SSL, vous devez utiliser le DNS challenge au lieu du HTTP challenge. Cela nécessite une configuration DNS chez votre registrar, mais Traefik gère toute la complexité.

7. Traefik vs Nginx : Quand utiliser quoi ?

Soyons clairs : Nginx reste incontournable pour certains cas. Pour servir des fichiers statiques à haute performance, Nginx est imbattable. Pour des configurations complexes avec du caching avancé, du rate limiting granulaire, ou du load balancing custom, Nginx offre plus de contrôle. Et si vous n'utilisez pas Docker, Nginx est probablement plus simple.

Mais pour une infrastructure Docker, Traefik gagne haut la main. La découverte automatique des services, le SSL Let's Encrypt intégré, et la configuration par labels Docker rendent Traefik imbattable pour ce cas d'usage. Je peux déployer un nouveau service en 2 minutes au lieu de 15. Et je n'ai plus jamais cassé ma config de reverse proxy depuis que j'utilise Traefik.

Ma recommandation

Utilisez Traefik pour vos infrastructures Docker. C'est fait pour ça, et ça vous fera gagner un temps fou. Gardez Nginx pour les services non-Dockerisés, les sites statiques haute performance, ou les configurations très spécifiques. Et si vous avez déjà une stack Nginx qui marche bien, pas besoin de tout migrer. Mais pour un nouveau projet Docker, partez directement sur Traefik.

Attention : Traefik peut être gourmand en ressources si vous avez beaucoup de conteneurs. Sur un VPS avec 1GB de RAM, ça peut être juste. Nginx est plus léger. Mais pour 90% des cas, Traefik tourne sans problème.

Ce qu'il faut retenir

Traefik révolutionne la gestion des reverse proxy dans les environnements Docker. Plus besoin de configurer manuellement Nginx, plus besoin de lancer Certbot à chaque nouveau service. Vous lancez un conteneur avec les bons labels, et Traefik configure tout automatiquement : routage, SSL, redirections.

Depuis que j'utilise Traefik, je ne perds plus de temps à éditer des fichiers de config. J'ajoute des labels Docker, et ça roule. Mon infrastructure est plus réactive, plus maintenable, et franchement plus agréable à gérer. Si vous bossez avec Docker et que vous n'avez pas encore testé Traefik, vous passez à côté d'un outil qui va vraiment améliorer votre quotidien.

Retour aux articles Conteneurisation