
Ce guide vous accompagne dans l'installation de Traefik v3.7.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 »Vérifiez ces points avant de commencer : un manque à ce stade se manifeste bien plus tard, sous la forme d'une erreur qui ne le désigne pas.
Traefik est un binaire Go statique sans dépendance externe, ce qui explique des besoins matériels modestes. La consommation réelle dépend surtout du nombre de routes et du volume de journaux conservés, pas du trafic lui-même.
| 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 :
Téléchargez l'archive et le fichier de sommes de contrôle publié par le projet, puis vérifiez l'empreinte avant toute extraction : c'est la seule façon de détecter une archive tronquée ou substituée.
Fenêtre de terminal # Définir la version (vérifiez la dernière sur github.com/traefik/traefik/releases)TRAEFIK_VERSION="v3.7.6"# 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 avant d'extraire quoi que ce soitwget https://github.com/traefik/traefik/releases/download/${TRAEFIK_VERSION}/traefik_${TRAEFIK_VERSION}_checksums.txtsha256sum -c traefik_${TRAEFIK_VERSION}_checksums.txt --ignore-missingL'option
--ignore-missinglimite le contrôle aux fichiers réellement téléchargés, le fichier de sommes couvrant toutes les architectures. SansOKen sortie, n'allez pas plus loin.Résultat attendu :
traefik_v3.7.6_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.7.6Codename: langresGo version: go1.25.11Built: 2026-06-30T12:14:07ZOS/Arch: linux/amd64 -
Créer la structure de répertoires
Le compte
traefikest créé sans shell de connexion (/sbin/nologin) et sans répertoire personnel : il ne sert qu'à faire tourner le service, ce qui limite les dégâts en cas de compromission du processus.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
Deux directives portent l'essentiel du durcissement.
ProtectSystem=strictmonte tout le système de fichiers en lecture seule, d'où la nécessité de lister explicitement les répertoires inscriptibles dansReadWritePaths.AmbientCapabilities=CAP_NET_BIND_SERVICEautorise l'écoute sur les ports 80 et 443 sans lancer le processus en root : sans cette ligne, le service échoue au démarrage avec une erreur de permission.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. Le provider Docker lit directement la liste des conteneurs par la socket de l'hôte et construit les routes à partir de leurs labels, sans qu'aucun fichier de configuration ne soit à modifier lors d'un déploiement. En contrepartie, monter cette socket dans un conteneur revient à lui donner un accès privilégié à l'hôte : le montage en lecture seule et le durcissement du service sont ici des minimums.
-
Créer la structure de répertoires
Le fichier
acme.jsonstockera les certificats et les clés privées obtenus auprès de Let's Encrypt. Traefik refuse de démarrer si ses permissions sont plus larges que600, d'où lechmoddès la création.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
Les deux fichiers de configuration sont montés en lecture seule, ce qui empêche le conteneur de modifier ce qui le pilote ;
acme.jsonfait exception puisque Traefik doit y écrire les certificats. Sur un environnement de production, remplacez le tagv3.7.6par le digest@sha256:de l'image, seul identifiant qui ne peut pas être réattribué à un autre contenu.docker-compose.yml services:traefik:image: traefik:v3.7.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.7.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. L'image whoami renvoie les en-têtes de la requête reçue, ce qui permet de vérifier d'un coup d'oeil que le trafic est bien passé par le proxy. Les quatre labels sont le minimum vital : activer l'exposition, définir la règle de correspondance, choisir l'entrypoint et indiquer le port d'écoute interne du conteneur. Comme pour l'image de Traefik, épinglez cette image par digest hors contexte de test.
# Ajoutez à docker-compose.yml whoami: image: traefik/whoami:v1.11.0 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. Le décalage est problématique sur un composant exposé en frontal : un retard de plusieurs versions mineures signifie autant de correctifs de sécurité manquants. Sur Linux, préférez le binaire ou l'image officielle, cette section n'existe que pour les cas où la politique interne impose de passer par le gestionnaire de paquets.
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) »Sur macOS, Homebrew reste pratique pour disposer de la commande traefik en local, le temps de mettre au point une configuration. Vérifiez la version obtenue, elle ne correspond pas nécessairement à celle déployée sur vos serveurs.
brew install traefiktraefik versionStructure des fichiers de configuration
Section intitulée « Structure des fichiers de configuration »Traefik distingue deux configurations qu'il ne faut jamais confondre. La configuration statique est lue une seule fois au démarrage : elle définit les ports d'écoute, les sources de configuration et les résolveurs de certificats, et toute modification impose un redémarrage. La configuration dynamique décrit les routes et est rechargée à chaud, sans coupure de service. Confondre les deux est l'erreur la plus fréquente en début de parcours, une option placée au mauvais endroit étant simplement ignorée.
Vue d'ensemble
Section intitulée « Vue d'ensemble »L'arborescence ci-dessous matérialise cette séparation : un fichier unique pour le statique, un répertoire surveillé pour le dynamique. Le découpage du répertoire conf.d/ en plusieurs fichiers n'a aucune incidence technique, Traefik fusionne leur contenu.
/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, tous strictement équivalents en termes de fonctionnalités. Le choix se fait selon le contexte de déploiement : un fichier YAML ou TOML se versionne et se relit facilement, tandis que les arguments CLI et les variables d'environnement conviennent aux orchestrateurs où la configuration est injectée au lancement. Le nom des options suit toujours la même hiérarchie, seule la notation change.
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) »Le mode insecure publie le dashboard et l'API d'administration sur le port 8080 sans aucune authentification. Réservez-le à une machine de développement et ne laissez jamais ce port joignable depuis l'extérieur : l'API expose l'intégralité de la configuration, noms d'hôtes et adresses internes compris.
# 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) »En production, on désactive le mode insecure et on expose le dashboard comme n'importe quel autre service : par un router déclaré en configuration dynamique, protégé par un middleware d'authentification et servi en HTTPS. Le service interne à cibler s'appelle api@internal, c'est le nom réservé que Traefik donne à sa propre API.
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 »Un service démarré ne prouve pas qu'il fonctionne : Traefik se lance sans erreur même quand aucun provider ne lui remonte de configuration. Trois contrôles se complètent, la lecture des journaux au démarrage, l'interrogation de l'API pour compter les routes chargées, puis un appel réel à travers le proxy. Menez-les dans cet ordre, une erreur de configuration apparaissant toujours en premier dans les journaux.
Vérifier les logs
Section intitulée « Vérifier les logs »Au démarrage, Traefik indique la version lancée et les providers activés. Les messages de niveau ERROR répétés en boucle signalent presque toujours un fichier de configuration dynamique invalide, que le proxy relit à chaque modification détectée.
# 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 »Ces requêtes interrogent l'API d'administration et renvoient du JSON, que jq met en forme. Un compteur de routers à zéro alors que des conteneurs tournent oriente vers le label traefik.enable=true manquant, conséquence directe du réglage exposedByDefault: false.
# 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 »Ces routes sont servies par l'API interne, donc soumises à la même protection que le dashboard. Une exception mérite d'être connue : /ping n'est disponible que si l'option ping figure dans la configuration statique, sans quoi la requête renvoie une erreur alors même que Traefik fonctionne. C'est cet endpoint que vous brancherez sur une sonde de disponibilité.
| 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 »Les incidents rencontrés à l'installation se répartissent en quatre familles : un port occupé, un accès refusé à la socket Docker, un dashboard injoignable et une configuration invalide. Les trois premières se diagnostiquent depuis le système hôte, la dernière depuis les journaux de Traefik.
Port déjà utilisé
Section intitulée « Port déjà utilisé »Sur un serveur qui a déjà hébergé un site, un serveur web occupe souvent le port 80. Traefik s'arrête immédiatement dans ce cas, sans démarrer partiellement.
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 »La socket appartient au groupe docker et n'est lisible que par ses membres. Ajouter le compte de service à ce groupe résout le problème mais lui confère de fait des privilèges équivalents à root sur l'hôte, d'où la seconde solution proposée.
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 »Trois causes se succèdent dans l'ordre où le trafic les rencontre : l'API n'est pas activée, le port n'est pas publié par le conteneur, ou le pare-feu de l'hôte bloque la connexion. Vérifiez-les dans cet ordre plutôt qu'au hasard.
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 »Lancer Traefik au premier plan avec le niveau de journalisation DEBUG affiche l'erreur exacte, souvent tronquée dans le journal du service. Beaucoup de messages proviennent d'options héritées de la version 2, dont plusieurs noms ont changé en v3.
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