MES TUTOS
VEILLE
Chargement de la veille...
DEVOPS

Traefik : Le Reverse Proxy Cloud-Native pour Docker

Avec Nginx ou Apache, chaque fois que vous ajoutez un service, vous devez modifier un fichier de configuration et redémarrer le serveur. Dans le monde des micro-services et de Docker, c'est archaïque. Traefik écoute votre démon Docker et configure les routes automatiquement. Voici comment le mettre en place.

1. Le concept de "Discovery"

Traefik se place entre Internet et vos conteneurs. Il agit comme un routeur intelligent :


2. Préparation du Réseau

Pour que Traefik puisse rediriger le trafic vers vos autres conteneurs, ils doivent partager un réseau Docker commun. Nous allons le créer manuellement pour qu'il soit persistant.

docker network create proxy

3. Installation de Traefik (Docker Compose)

Créez un dossier traefik et un fichier docker-compose.yml.

Nous allons configurer Traefik pour :

  1. Rediriger tout le HTTP vers HTTPS (Port 80 -> 443).
  2. Gérer les certificats Let's Encrypt (ACME).
  3. Fournir un tableau de bord sécurisé.

Créez d'abord un fichier vide pour stocker les certificats (c'est impératif pour les permissions) :

touch acme.json
chmod 600 acme.json

Voici le fichier docker-compose.yml complet :

version: '3.8'

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - "80:80"   # Point d'entrée HTTP
      - "443:443" # Point d'entrée HTTPS
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro # Écoute de Docker
      - ./acme.json:/acme.json # Stockage des certificats
    command:
      # Activation du Dashboard (Insecure pour le test, à sécuriser en prod)
      - "--api.dashboard=true"
      - "--api.insecure=true"
      
      # Configuration des Providers
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false" # Sécurité par défaut
      - "--providers.docker.network=proxy"
      
      # Points d'entrée (EntryPoints)
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      
      # Redirection Globale HTTP -> HTTPS
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      
      # Résolveur de certificats (Let's Encrypt)
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.myresolver.acme.email=votre-email@domaine.com"
      - "--certificatesresolvers.myresolver.acme.storage=/acme.json"

networks:
  proxy:
    external: true

Lancez le service : docker compose up -d.


4. Déployer un service (Exemple: Whoami)

Maintenant que Traefik tourne, déployons une petite application web (whoami) pour tester le routage. Nous n'allons pas toucher à la config de Traefik, tout se fait via les Labels du conteneur.

Créez un fichier docker-compose.whoami.yml :

version: '3.8'

services:
  whoami:
    image: traefik/whoami
    container_name: whoami_app
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      
      # Règle de routage : Si le domaine est 'whoami.localhost'...
      - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      
      # Activation du SSL (Utilise le résolveur configuré plus haut)
      - "traefik.http.routers.whoami.tls.certresolver=myresolver"

networks:
  proxy:
    external: true

Lancez-le : docker compose -f docker-compose.whoami.yml up -d.

Ouvrez votre navigateur sur http://whoami.localhost.
Traefik va automatiquement :
1. Intercepter la requête.
2. Voir que vous demandez "whoami.localhost".
3. Rediriger vers le HTTPS (Port 443).
4. Router le trafic vers le conteneur `whoami_app`.


5. Le Dashboard de Traefik

Traefik inclut une interface de visualisation magnifique. Comme nous avons activé api.insecure=true (pour le test local uniquement), elle est disponible sur le port 8080.

Si vous êtes sur un VPS, il faut router le dashboard via Traefik lui-même pour le sécuriser avec un mot de passe (Basic Auth).

Sécuriser le dashboard (Middleware)

Pour ajouter un mot de passe, on utilise un Middleware. Générez un mot de passe haché (ex: user/password) :

echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g

Ajoutez ensuite ces labels à votre conteneur Traefik :

labels:
  - "traefik.http.middlewares.auth.basicauth.users=user:$$apr1$$..."
  - "traefik.http.routers.api.rule=Host(`monitor.mondomaine.fr`)"
  - "traefik.http.routers.api.service=api@internal"
  - "traefik.http.routers.api.middlewares=auth"

Conclusion

Vous avez maintenant un point d'entrée unique pour toute votre infrastructure. Plus besoin d'ouvrir les ports 8080, 3000 ou 5000 sur votre pare-feu : tout passe par le 443, géré proprement par Traefik.

← Retour à la bibliothèque