Page cover

Traefik

Cette documentation vous guide à travers l'installation et la configuration de Traefik sur votre serveur, en expliquant comment utiliser Traefik pour appliquer un certificat SSL à une URL de conteneur

Qu'est-ce que Traefik?

Traefik est un reverse proxy et un load balancer moderne conçu pour les microservices. Il est particulièrement bien adapté aux environnements dynamiques tels que Kubernetes, Docker, grâce à son intégration native avec ces plateformes. Traefik offre des fonctionnalités avancées comme le support du HTTP/2, des certificats SSL automatisés via Let's Encrypt ou d'autres fournisseurs, et une configuration dynamique basée sur des labels ou des annotations.

Prérequis

  • Un serveur avec Docker installé.

  • Accès à un domaine et capacité à modifier ses enregistrements DNS.

Déploiement (Facultatif)

Vous pouvez déployer Traefik de différentes manières, notamment via Docker Compose, Kubernetes, ou directement avec un fichier de configuration Traefik. Pour cette documentation, nous utiliserons Docker Compose.

Étapes d'installation

Créer un réseau Docker

docker network create traefik

Création du fichierdocker-compose.yml

version: "3.7"

services:
  traefik:
    image: traefik:3.0.1
    container_name: traefik
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      #Monte le socket Docker pour que Traefik puisse interagir avec l'API
      - "/var/run/docker.sock:/var/run/docker.sock:ro" 
      # Monte le fichier de configuration principal de Traefik en lecture seule
      - "/var/volume/traefik/config/traefik.yaml:/etc/traefik/traefik.yaml:ro"
      # Monte le répertoire local contenant des configurations supplémentaires
      - "/var/volume/traefik/config/conf/:/etc/traefik/conf/"
      # Monte le répertoire local contenant des certificats supplémentaires
      - "/var/volume/traefik/config/certs/:/etc/traefik/certs/"    
    networks:
      # Définit le réseau Docker auxquel le conteneur doit être connecté.
      - traefik
    environment:
      # Définit la variable d'environnement pour le conteneur
      - CF_DNS_API_TOKEN=$CF_DNS_API_TOKEN

# Section définissant les réseaux utilisés par les services
networks:
  traefik:
    external: true

Création du fichier de configuration

Editer le ficher ou créer le fichier qui se trouve dans "/var/volume/traefik/config/traefik.yaml" ou dans un autre répertoire en fonction de votre configuration.

Cette configuration de Traefik est commentée afin d'expliquer chaque paramètre, ce qui aide à comprendre le rôle de chaque ligne dans la configuration de Traefik.

global:
  # Désactive la vérification des nouvelles versions de Traefik
  checkNewVersion: false
  # Désactive l'envoi de données d'utilisation anonymes
  sendAnonymousUsage: false
  
# Active le journal d'accès avec la configuration par défaut
accessLog: {}

log:
  # Définit le niveau de journalisation à ERROR pour ne consigner que les erreurs
  level: ERROR

api:
  # Active le tableau de bord de Traefik
  dashboard: true
  # Rend le tableau de bord accessible sans authentification (à utiliser avec prudence)
  insecure: true
  # Désactive le mode débogage pour l'API
  debug: false

entryPoints:
  web:
    # Définit le point d'entrée pour le trafic HTTP sur le port 80
    address: :80
    http:
      redirections:
        entryPoint:
          # Redirige tout le trafic HTTP vers HTTPS
          to: websecure
          # Utilise le schéma HTTPS pour la redirection
          scheme: https
  websecure:
    # Définit le point d'entrée pour le trafic HTTPS sur le port 443
    address: :443

certificatesResolvers:
  cloudflare:
    acme:
      # Adresse email utilisée pour ACME (Let's Encrypt)
      email: "VOTRE@EMAIL"
      # Emplacement de stockage des certificats ACME
      storage: /etc/traefik/certs/cloudflare-acme.json
      # URL de l'API de Let's Encrypt
      caServer: 'https://acme-v02.api.letsencrypt.org/directory'
      # Type de clé à utiliser pour les certificats (ECC avec courbe P-256)
      keyType: EC256
      dnsChallenge:
        # Utilise Cloudflare pour le challenge DNS ACME
        provider: cloudflare
        resolvers:
          # Résolveur DNS primaire (Cloudflare DNS)
          - "1.1.1.1:53"
          # Résolveur DNS secondaire (Google DNS)
          - "8.8.8.8:53"

serversTransport:
  # Désactive la vérification des certificats SSL pour les serveurs backend (à utiliser avec prudence)
  insecureSkipVerify: true

providers:
  docker:
    # N'expose pas tous les conteneurs Docker par défaut
    exposedByDefault: false
    # Chemin de la socket Docker pour l'API
    endpoint: 'unix:///var/run/docker.sock'
    # Surveille les changements dans Docker pour reconfigurer dynamiquement
    watch: true
  file:
    # Répertoire où se trouvent les fichiers de configuration supplémentaires
    directory: /etc/traefik/conf/
    # Surveille les changements dans le répertoire de configuration pour recharger dynamiquement
    watch: true

Démarrer Traefik

docker-compose up -d

Utilisation pour appliquer le certificat SSL sur une URL de conteneur

Pour appliquer un certificat SSL à un conteneur spécifique, vous pouvez utiliser des labels dans le fichier docker-compose.yml de votre service Docker. Voici un exemple de configuration pour un conteneur watchtower:

version: "3.7"

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.watchtower-http.entrypoints=web"
      - "traefik.http.routers.watchtower-http.rule=Host(`watchtower.martinbranda.com`)"
      ## HTTPS Routers
      - "traefik.http.routers.watchtower-https.entrypoints=websecure"
      - "traefik.http.routers.watchtower-https.rule=Host(`watchtower.martinbranda.com`)"
      - "traefik.http.routers.watchtower-https.tls=true"
      - "traefik.http.routers.watchtower-https.tls.certresolver=cloudflare"
    networks:
      - traefik

networks:
  traefik:
    external: true

Dans cet exemple, les labels de Docker sont utilisés pour configurer les routers HTTP et HTTPS pour le conteneur watchtower. Les labels expliquent à Traefik comment router le trafic et appliquer le certificat SSL via le resolver Cloudflare.

Mis à jour