Aller au contenu

Configurer Traefik v2.11 en tant que reverse proxy avec Docker et HTTPS automatique avec Let's Encrypt

Rogelio Guerra Riverón
Auteur
Rogelio Guerra Riverón
Construction de ma propre infrastructure web depuis zéro. Je documente chaque étape : serveurs, réseaux, conteneurs et tout ce qui se présente.

Introduction
#

Après des mois d’utilisation manuelle de nginx, j’ai décidé de passer à Traefik. La raison est simple : gérer les certificats SSL pour chaque nouveau service est fastidieux. Traefik automatise tout avec Let’s Encrypt intégré. Voici ma configuration réelle.

Pourquoi Traefik
#

Avec Traefik, tu n’as pas besoin de recharger nginx chaque fois que tu ajoutes un conteneur. Il détecte automatiquement les services Docker, génère les certificats SSL à la demande et redirige le trafic. Tout est déclaratif.

Structure de base
#

Je crée un dossier pour Traefik :

mkdir -p /home/usuario/docker/traefik
cd /home/usuario/docker/traefik

J’ai besoin de trois fichiers : docker-compose.yml, traefik.yml et acme.json.

Fichier acme.json
#

Ce fichier stocke les certificats. Il doit avoir des permissions restrictives :

touch acme.json
chmod 600 acme.json

Configuration de Traefik (traefik.yml)
#

api:
  insecure: true
  dashboard: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entrypoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
  file:
    filename: /traefik/traefik.yml
    watch: true

certificatesResolvers:
  letsencrypt:
    acme:
      email: mi-email@example.com
      storage: acme.json
      httpChallenge:
        entryPoint: web

Je remplace mi-email@example.com par mon vrai email. Let’s Encrypt l’utilise pour les notifications.

Docker Compose
#

C’est le fichier qui lance tout :

version: '3.8'

services:
  traefik:
    image: traefik:v2.11
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - "80:80"
      - "443:443"
    environment:
      - TZ=Europe/Madrid
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/traefik/traefik.yml:ro
      - ./acme.json:/acme.json
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.midominio.com`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
      - "traefik.http.services.traefik.loadbalancer.server.port=8080"

networks:
  proxy:
    driver: bridge

Je remplace traefik.midominio.com par mon vrai domaine. Le port 8080 est celui du tableau de bord de Traefik.

Lancer Traefik
#

docker-compose up -d

Je vérifie les logs :

docker-compose logs -f

Si tout va bien, le tableau de bord sera sur https://traefik.midominio.com.

Ajouter des services
#

Voilà le meilleur. Pour ajouter un nouveau service, j’ai juste besoin de labels Docker. Exemple avec un conteneur simple :

services:
  mi-app:
    image: mi-imagen:latest
    container_name: mi-app
    restart: unless-stopped
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mi-app.rule=Host(`app.midominio.com`)"
      - "traefik.http.routers.mi-app.entrypoints=websecure"
      - "traefik.http.routers.mi-app.tls.certresolver=letsencrypt"
      - "traefik.http.services.mi-app.loadbalancer.server.port=3000"

networks:
  proxy:
    external: true

Je n’ai pas besoin de toucher à Traefik. Le certificat se génère automatiquement.

Problèmes courants
#

Le domaine ne résout pas : Assure-toi que ton DNS pointe vers la bonne IP.

ACME challenge échoue : Vérifie que le port 80 est ouvert et accessible depuis internet. Let’s Encrypt en a besoin.

Tableau de bord lent : C’est normal avec beaucoup de services. Ce n’est pas un problème.

Conclusion
#

Traefik m’a fait gagner des heures de configuration manuelle. Chaque nouveau conteneur n’a besoin que de quatre labels. Les certificats se renouvellent automatiquement 30 jours avant leur expiration.

Si tu as un serveur domestique avec plusieurs services, ça vaut le coup de migrer. La courbe d’apprentissage est courte et les bénéfices sont réels.


Équipement recommandé
#

Liens d’affiliation. Pas de coût supplémentaire pour toi.