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 traefikCréation du fichierdocker-compose.yml
docker-compose.ymlversion: "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: trueDémarrer Traefik
docker-compose up -dUtilisation 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
