Ce guide vous accompagne dans l’installation de Traefik v3.6 sur Linux. Vous apprendrez à déployer Traefik via binaire, Docker ou package manager, puis à configurer les options de base (entrypoints, providers, dashboard). À la fin, vous aurez un Traefik fonctionnel prêt à router du trafic vers vos services.
Temps estimé : 15-20 minutes selon la méthode choisie.
Prérequis
Section intitulée « Prérequis »| Critère | Minimum | Recommandé |
|---|---|---|
| Linux | Kernel 3.10+ | Kernel 5.x+ |
| RAM | 128 Mo | 256 Mo+ |
| Espace disque | 50 Mo | 100 Mo (avec logs) |
| Architecture | amd64, arm64 | amd64 |
Traefik fonctionne également sur Windows et macOS, mais ce guide se concentre sur Linux.
Ports réseau
Section intitulée « Ports réseau »Traefik utilise plusieurs ports selon votre configuration :
| Port | Usage | Configuration |
|---|---|---|
| 80 | HTTP (entrypoint web) | Ouvert vers Internet |
| 443 | HTTPS (entrypoint websecure) | Ouvert vers Internet |
| 8080 | Dashboard et API | Interne uniquement |
Vérifiez que ces ports sont disponibles :
# Vérifier les ports utilisésss -tlnp | grep -E ':80|:443|:8080'Si un port est déjà utilisé, vous devrez arrêter le service concerné ou changer le port Traefik.
Connaissances recommandées
Section intitulée « Connaissances recommandées »Avant de commencer, assurez-vous de comprendre :
- Les concepts de base de Traefik (voir Introduction à Traefik)
- La ligne de commande Linux
- Les bases de Docker (pour la méthode Docker)
Méthode 1 : Installation binaire
Section intitulée « Méthode 1 : Installation binaire »Cette méthode vous donne un contrôle total sur Traefik. Idéale pour les serveurs bare-metal ou les VMs sans Docker.
-
Télécharger le binaire
Récupérez la dernière version depuis GitHub :
Fenêtre de terminal # Définir la version (vérifiez la dernière sur github.com/traefik/traefik/releases)TRAEFIK_VERSION="v3.6.7"# Télécharger le binaire pour Linux amd64wget https://github.com/traefik/traefik/releases/download/${TRAEFIK_VERSION}/traefik_${TRAEFIK_VERSION}_linux_amd64.tar.gz# Vérifier le checksum (optionnel mais recommandé)wget https://github.com/traefik/traefik/releases/download/${TRAEFIK_VERSION}/traefik_${TRAEFIK_VERSION}_checksums.txtsha256sum -c traefik_${TRAEFIK_VERSION}_checksums.txt --ignore-missingRésultat attendu :
traefik_v3.6.7_linux_amd64.tar.gz: OK -
Installer le binaire
Extrayez et placez le binaire dans le PATH système :
Fenêtre de terminal # Extraire l'archivetar xzf traefik_${TRAEFIK_VERSION}_linux_amd64.tar.gz# Déplacer vers /usr/local/binsudo mv traefik /usr/local/bin/# Vérifier l'installationtraefik versionRésultat attendu :
Version: 3.6.7Codename: comteGo version: go1.23.6Built: 2026-01-14T13:21:13ZOS/Arch: linux/amd64 -
Créer la structure de répertoires
Fenêtre de terminal # Créer les répertoires de configurationsudo mkdir -p /etc/traefik/conf.dsudo mkdir -p /var/log/traefik# Créer un utilisateur dédié (sécurité)sudo useradd -r -s /sbin/nologin traefik# Attribuer les permissionssudo chown -R traefik:traefik /etc/traefiksudo chown -R traefik:traefik /var/log/traefik -
Créer le fichier de configuration
Créez
/etc/traefik/traefik.yamlavec la configuration minimale :/etc/traefik/traefik.yaml # Configuration statique de Traefik# Points d'entrée réseauentryPoints:web:address: ":80"websecure:address: ":443"# Dashboard et API (attention : sécuriser en production !)api:dashboard: trueinsecure: true # À désactiver en production# Providers de configuration dynamiqueproviders:file:directory: /etc/traefik/conf.dwatch: true# Logginglog:level: INFOfilePath: /var/log/traefik/traefik.logaccessLog:filePath: /var/log/traefik/access.log -
Créer le service systemd
Créez
/etc/systemd/system/traefik.service:[Unit]Description=Traefik Reverse ProxyDocumentation=https://doc.traefik.io/traefik/After=network-online.targetWants=network-online.target[Service]Type=notifyUser=traefikGroup=traefikExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yamlExecReload=/bin/kill -USR1 $MAINPIDRestart=on-failureRestartSec=5LimitNOFILE=65536# SécuritéNoNewPrivileges=trueProtectSystem=strictProtectHome=trueReadWritePaths=/var/log/traefik /etc/traefikPrivateTmp=true# Capability pour les ports < 1024AmbientCapabilities=CAP_NET_BIND_SERVICE[Install]WantedBy=multi-user.target -
Démarrer et vérifier
Fenêtre de terminal # Recharger systemdsudo systemctl daemon-reload# Activer le démarrage automatiquesudo systemctl enable traefik# Démarrer le servicesudo systemctl start traefik# Vérifier le statutsudo systemctl status traefikRésultat attendu :
● traefik.service - Traefik Reverse ProxyLoaded: loaded (/etc/systemd/system/traefik.service; enabled)Active: active (running) since ...Testez l’accès au dashboard :
Fenêtre de terminal curl -s http://localhost:8080/api/overview | jq
Méthode 2 : Installation avec Docker
Section intitulée « Méthode 2 : Installation avec Docker »C’est la méthode la plus courante car Traefik est conçu pour les environnements conteneurisés.
-
Créer la structure de répertoires
Fenêtre de terminal # Créer le répertoire du projetmkdir -p ~/traefik-labcd ~/traefik-lab# Créer les sous-répertoiresmkdir -p config/dynamic# Créer le fichier pour les certificats ACME (Let's Encrypt)touch acme.jsonchmod 600 acme.json -
Créer la configuration statique
Créez
config/traefik.yaml:config/traefik.yaml # Configuration statique de Traefik# Points d'entréeentryPoints:web:address: ":80"websecure:address: ":443"# API et Dashboardapi:dashboard: trueinsecure: true # Pour les tests uniquement# Provider Dockerproviders:docker:endpoint: "unix:///var/run/docker.sock"exposedByDefault: false # Expose uniquement les conteneurs avec label traefik.enable=truewatch: truefile:directory: /etc/traefik/dynamicwatch: true# Logginglog:level: INFOaccessLog: {} -
Créer le fichier docker-compose.yml
docker-compose.yml services:traefik:image: traefik:v3.6container_name: traefikrestart: unless-stoppedsecurity_opt:- no-new-privileges:trueports:- "80:80"- "443:443"- "8080:8080"volumes:# Socket Docker (lecture seule)- /var/run/docker.sock:/var/run/docker.sock:ro# Configuration statique- ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro# Configuration dynamique- ./config/dynamic:/etc/traefik/dynamic:ro# Certificats ACME- ./acme.json:/acme.jsonnetworks:- traefik-publicnetworks:traefik-public:name: traefik-publicdriver: bridge -
Lancer Traefik
Fenêtre de terminal # Créer le réseau (si pas créé automatiquement)docker network create traefik-public 2>/dev/null || true# Lancer Traefikdocker compose up -d# Vérifier le statutdocker compose psRésultat attendu :
NAME IMAGE COMMAND SERVICE STATUS PORTStraefik traefik:v3.6 "/entrypoint.sh trae…" traefik running 0.0.0.0:80->80/tcp, ... -
Vérifier l’installation
Fenêtre de terminal # Vérifier les logsdocker compose logs traefik | tail -20# Tester l'APIcurl -s http://localhost:8080/api/overview | jq# Accéder au dashboardecho "Dashboard : http://localhost:8080/dashboard/"Résultat attendu pour l’API :
{"http": {"routers": { "total": 0 },"services": { "total": 0 },"middlewares": { "total": 0 }},"tcp": { ... },"udp": { ... }}
Tester avec un service whoami
Section intitulée « Tester avec un service whoami »Pour valider que Traefik route correctement le trafic, ajoutons un service de test :
# Ajoutez à docker-compose.yml whoami: image: traefik/whoami container_name: whoami labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)" - "traefik.http.routers.whoami.entrypoints=web" - "traefik.http.services.whoami.loadbalancer.server.port=80" networks: - traefik-publicRedémarrez et testez :
docker compose up -dcurl -H "Host: whoami.localhost" http://localhostRésultat attendu :
Hostname: whoamiIP: 172.18.0.3RemoteAddr: 172.18.0.2:54312GET / HTTP/1.1Host: whoami.localhost...Méthode 3 : Package manager (optionnel)
Section intitulée « Méthode 3 : Package manager (optionnel) »Certaines distributions proposent Traefik dans leurs dépôts, mais les versions sont souvent anciennes.
Debian/Ubuntu (via dépôt tiers)
Section intitulée « Debian/Ubuntu (via dépôt tiers) »Traefik n’est pas dans les dépôts officiels Debian/Ubuntu. Utilisez le binaire ou Docker.
RHEL/Rocky/Alma (via binaire)
Section intitulée « RHEL/Rocky/Alma (via binaire) »Même recommandation : utilisez le binaire téléchargé manuellement.
Homebrew (macOS pour développement)
Section intitulée « Homebrew (macOS pour développement) »brew install traefiktraefik versionStructure des fichiers de configuration
Section intitulée « Structure des fichiers de configuration »Vue d’ensemble
Section intitulée « Vue d’ensemble »/etc/traefik/├── traefik.yaml # Configuration statique (démarrage)└── conf.d/ # Configuration dynamique (hot-reload) ├── routers.yaml ├── services.yaml └── middlewares.yamlConfiguration statique complète
Section intitulée « Configuration statique complète »Voici un exemple de traefik.yaml avec les options principales :
# =============================================================================# ENTRYPOINTS - Ports d'écoute# =============================================================================entryPoints: web: address: ":80" http: redirections: entryPoint: to: websecure scheme: https
websecure: address: ":443" http: tls: certResolver: letsencrypt
metrics: address: ":8082"
# =============================================================================# PROVIDERS - Sources de configuration dynamique# =============================================================================providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false network: traefik-public
file: directory: /etc/traefik/conf.d watch: true
# =============================================================================# API ET DASHBOARD# =============================================================================api: dashboard: true # insecure: false # En production, désactiver et sécuriser
# =============================================================================# CERTIFICATS ACME (Let's Encrypt)# =============================================================================certificatesResolvers: letsencrypt: acme: email: admin@example.com storage: /etc/traefik/acme.json httpChallenge: entryPoint: web
# =============================================================================# LOGGING# =============================================================================log: level: INFO filePath: /var/log/traefik/traefik.log format: json
accessLog: filePath: /var/log/traefik/access.log format: json filters: statusCodes: - "400-599" fields: headers: names: User-Agent: keep Authorization: drop
# =============================================================================# METRIQUES (Prometheus)# =============================================================================metrics: prometheus: entryPoint: metrics addServicesLabels: true addRoutersLabels: trueFormats de configuration supportés
Section intitulée « Formats de configuration supportés »Traefik accepte plusieurs formats pour la configuration statique :
entryPoints: web: address: ":80" websecure: address: ":443"
api: dashboard: true
providers: docker: exposedByDefault: false[entryPoints] [entryPoints.web] address = ":80" [entryPoints.websecure] address = ":443"
[api] dashboard = true
[providers] [providers.docker] exposedByDefault = falsetraefik \ --entrypoints.web.address=:80 \ --entrypoints.websecure.address=:443 \ --api.dashboard=true \ --providers.docker.exposedByDefault=falseexport TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=":80"export TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=":443"export TRAEFIK_API_DASHBOARD="true"export TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT="false"
traefikAccéder au Dashboard
Section intitulée « Accéder au Dashboard »Le dashboard Traefik affiche en temps réel :
- Les routers actifs et leurs règles
- Les services backend et leur état
- Les middlewares configurés
- Les entrypoints et le trafic
Accès local (mode insecure)
Section intitulée « Accès local (mode insecure) »Si api.insecure: true est configuré :
# Accès directhttp://localhost:8080/dashboard/
# Via curlcurl http://localhost:8080/api/overviewSécuriser l’accès (production)
Section intitulée « Sécuriser l’accès (production) »Créez un fichier de configuration dynamique pour sécuriser le dashboard :
http: routers: dashboard: rule: "Host(`traefik.example.com`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))" service: api@internal entryPoints: - websecure middlewares: - dashboard-auth tls: certResolver: letsencrypt
middlewares: dashboard-auth: basicAuth: users: # admin:password (généré avec htpasswd -nb admin password) - "admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/"Générez le hash du mot de passe :
# Installer htpasswd si nécessairesudo apt install apache2-utils # Debian/Ubuntu# ousudo dnf install httpd-tools # RHEL/Rocky
# Générer le hashhtpasswd -nb admin VotreMotDePasseValider l’installation
Section intitulée « Valider l’installation »Vérifier les logs
Section intitulée « Vérifier les logs »# Binaire avec systemdsudo journalctl -u traefik -f
# Dockerdocker compose logs -f traefik
# Rechercher des erreursdocker compose logs traefik 2>&1 | grep -i errorTester avec curl
Section intitulée « Tester avec curl »# API overviewcurl -s http://localhost:8080/api/overview | jq
# Liste des routers HTTPcurl -s http://localhost:8080/api/http/routers | jq
# Liste des servicescurl -s http://localhost:8080/api/http/services | jq
# Santé du servicecurl -s http://localhost:8080/pingEndpoints API utiles
Section intitulée « Endpoints API utiles »| Endpoint | Description |
|---|---|
/api/overview | Vue d’ensemble des ressources |
/api/http/routers | Liste des routers HTTP |
/api/http/services | Liste des services HTTP |
/api/http/middlewares | Liste des middlewares |
/api/entrypoints | Configuration des entrypoints |
/ping | Health check simple |
Dépannage
Section intitulée « Dépannage »Port déjà utilisé
Section intitulée « Port déjà utilisé »Symptôme : Erreur “bind: address already in use”
# Identifier le processus utilisant le portsudo ss -tlnp | grep :80# ousudo lsof -i :80
# Arrêter le service concurrentsudo systemctl stop nginx # ou apache2Permissions Docker socket
Section intitulée « Permissions Docker socket »Symptôme : Erreur “permission denied” sur /var/run/docker.sock
# Vérifier les permissionsls -la /var/run/docker.sock
# Solution 1 : Ajouter l'utilisateur au groupe dockersudo usermod -aG docker traefiksudo systemctl restart traefik
# Solution 2 : Utiliser un proxy socket sécurisé (recommandé en production)# Voir : https://github.com/Tecnativa/docker-socket-proxyDashboard inaccessible
Section intitulée « Dashboard inaccessible »Symptôme : “Connection refused” sur le port 8080
-
Vérifiez que l’API est activée :
api:dashboard: trueinsecure: true -
Vérifiez que le port est exposé (Docker) :
ports:- "8080:8080" -
Vérifiez le pare-feu :
Fenêtre de terminal sudo ufw statussudo firewall-cmd --list-all
Erreurs de configuration
Section intitulée « Erreurs de configuration »Symptôme : Traefik ne démarre pas
# Valider la syntaxe YAMLyamllint /etc/traefik/traefik.yaml
# Tester la configuration sans démarrertraefik --configFile=/etc/traefik/traefik.yaml --log.level=DEBUG 2>&1 | head -50| Erreur courante | Solution |
|---|---|
yaml: unmarshal errors | Vérifier l’indentation YAML |
field not found | Vérifier le nom des options (v3 vs v2) |
invalid port | Format correct : ":80" avec les guillemets |
À retenir
Section intitulée « À retenir »-
3 méthodes d’installation : binaire (contrôle total), Docker (recommandé), package manager (versions souvent anciennes)
-
Configuration statique : définit entrypoints, providers et options de démarrage — ne change qu’au redémarrage
-
Configuration dynamique : définit routers, services et middlewares — hot-reload en temps réel
-
exposedByDefault: false : bonne pratique de sécurité qui force l’ajout explicite de
traefik.enable=true -
Dashboard : toujours sécuriser avec authentification en production
-
Réseau traefik-public : réseau Docker dédié pour la communication entre Traefik et les services
-
Logs : activer les access logs en JSON pour faciliter l’analyse