Aller au contenu
medium

Installer Traefik v3 : binaire, Docker et package manager

18 min de lecture

Logo traefik

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.

CritèreMinimumRecommandé
LinuxKernel 3.10+Kernel 5.x+
RAM128 Mo256 Mo+
Espace disque50 Mo100 Mo (avec logs)
Architectureamd64, arm64amd64

Traefik fonctionne également sur Windows et macOS, mais ce guide se concentre sur Linux.

Traefik utilise plusieurs ports selon votre configuration :

PortUsageConfiguration
80HTTP (entrypoint web)Ouvert vers Internet
443HTTPS (entrypoint websecure)Ouvert vers Internet
8080Dashboard et APIInterne uniquement

Vérifiez que ces ports sont disponibles :

Fenêtre de terminal
# Vérifier les ports utilisés
ss -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.

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)

Cette méthode vous donne un contrôle total sur Traefik. Idéale pour les serveurs bare-metal ou les VMs sans Docker.

  1. 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 amd64
    wget 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.txt
    sha256sum -c traefik_${TRAEFIK_VERSION}_checksums.txt --ignore-missing

    Résultat attendu :

    traefik_v3.6.7_linux_amd64.tar.gz: OK
  2. Installer le binaire

    Extrayez et placez le binaire dans le PATH système :

    Fenêtre de terminal
    # Extraire l'archive
    tar xzf traefik_${TRAEFIK_VERSION}_linux_amd64.tar.gz
    # Déplacer vers /usr/local/bin
    sudo mv traefik /usr/local/bin/
    # Vérifier l'installation
    traefik version

    Résultat attendu :

    Version: 3.6.7
    Codename: comte
    Go version: go1.23.6
    Built: 2026-01-14T13:21:13Z
    OS/Arch: linux/amd64
  3. Créer la structure de répertoires

    Fenêtre de terminal
    # Créer les répertoires de configuration
    sudo mkdir -p /etc/traefik/conf.d
    sudo mkdir -p /var/log/traefik
    # Créer un utilisateur dédié (sécurité)
    sudo useradd -r -s /sbin/nologin traefik
    # Attribuer les permissions
    sudo chown -R traefik:traefik /etc/traefik
    sudo chown -R traefik:traefik /var/log/traefik
  4. Créer le fichier de configuration

    Créez /etc/traefik/traefik.yaml avec la configuration minimale :

    /etc/traefik/traefik.yaml
    # Configuration statique de Traefik
    # Points d'entrée réseau
    entryPoints:
    web:
    address: ":80"
    websecure:
    address: ":443"
    # Dashboard et API (attention : sécuriser en production !)
    api:
    dashboard: true
    insecure: true # À désactiver en production
    # Providers de configuration dynamique
    providers:
    file:
    directory: /etc/traefik/conf.d
    watch: true
    # Logging
    log:
    level: INFO
    filePath: /var/log/traefik/traefik.log
    accessLog:
    filePath: /var/log/traefik/access.log
  5. Créer le service systemd

    Créez /etc/systemd/system/traefik.service :

    [Unit]
    Description=Traefik Reverse Proxy
    Documentation=https://doc.traefik.io/traefik/
    After=network-online.target
    Wants=network-online.target
    [Service]
    Type=notify
    User=traefik
    Group=traefik
    ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yaml
    ExecReload=/bin/kill -USR1 $MAINPID
    Restart=on-failure
    RestartSec=5
    LimitNOFILE=65536
    # Sécurité
    NoNewPrivileges=true
    ProtectSystem=strict
    ProtectHome=true
    ReadWritePaths=/var/log/traefik /etc/traefik
    PrivateTmp=true
    # Capability pour les ports < 1024
    AmbientCapabilities=CAP_NET_BIND_SERVICE
    [Install]
    WantedBy=multi-user.target
  6. Démarrer et vérifier

    Fenêtre de terminal
    # Recharger systemd
    sudo systemctl daemon-reload
    # Activer le démarrage automatique
    sudo systemctl enable traefik
    # Démarrer le service
    sudo systemctl start traefik
    # Vérifier le statut
    sudo systemctl status traefik

    Résultat attendu :

    ● traefik.service - Traefik Reverse Proxy
    Loaded: 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

C'est la méthode la plus courante car Traefik est conçu pour les environnements conteneurisés.

  1. Créer la structure de répertoires

    Fenêtre de terminal
    # Créer le répertoire du projet
    mkdir -p ~/traefik-lab
    cd ~/traefik-lab
    # Créer les sous-répertoires
    mkdir -p config/dynamic
    # Créer le fichier pour les certificats ACME (Let's Encrypt)
    touch acme.json
    chmod 600 acme.json
  2. Créer la configuration statique

    Créez config/traefik.yaml :

    config/traefik.yaml
    # Configuration statique de Traefik
    # Points d'entrée
    entryPoints:
    web:
    address: ":80"
    websecure:
    address: ":443"
    # API et Dashboard
    api:
    dashboard: true
    insecure: true # Pour les tests uniquement
    # Provider Docker
    providers:
    docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false # Expose uniquement les conteneurs avec label traefik.enable=true
    watch: true
    file:
    directory: /etc/traefik/dynamic
    watch: true
    # Logging
    log:
    level: INFO
    accessLog: {}
  3. Créer le fichier docker-compose.yml

    docker-compose.yml
    services:
    traefik:
    image: traefik:v3.6
    container_name: traefik
    restart: unless-stopped
    security_opt:
    - no-new-privileges:true
    ports:
    - "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.json
    networks:
    - traefik-public
    networks:
    traefik-public:
    name: traefik-public
    driver: bridge
  4. 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 Traefik
    docker compose up -d
    # Vérifier le statut
    docker compose ps

    Résultat attendu :

    NAME IMAGE COMMAND SERVICE STATUS PORTS
    traefik traefik:v3.6 "/entrypoint.sh trae…" traefik running 0.0.0.0:80->80/tcp, ...
  5. Vérifier l'installation

    Fenêtre de terminal
    # Vérifier les logs
    docker compose logs traefik | tail -20
    # Tester l'API
    curl -s http://localhost:8080/api/overview | jq
    # Accéder au dashboard
    echo "Dashboard : http://localhost:8080/dashboard/"

    Résultat attendu pour l'API :

    {
    "http": {
    "routers": { "total": 0 },
    "services": { "total": 0 },
    "middlewares": { "total": 0 }
    },
    "tcp": { ... },
    "udp": { ... }
    }

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-public

Redémarrez et testez :

Fenêtre de terminal
docker compose up -d
curl -H "Host: whoami.localhost" http://localhost

Résultat attendu :

Hostname: whoami
IP: 172.18.0.3
RemoteAddr: 172.18.0.2:54312
GET / HTTP/1.1
Host: whoami.localhost
...

Certaines distributions proposent Traefik dans leurs dépôts, mais les versions sont souvent anciennes.

Traefik n'est pas dans les dépôts officiels Debian/Ubuntu. Utilisez le binaire ou Docker.

Même recommandation : utilisez le binaire téléchargé manuellement.

Fenêtre de terminal
brew install traefik
traefik version
/etc/traefik/
├── traefik.yaml # Configuration statique (démarrage)
└── conf.d/ # Configuration dynamique (hot-reload)
├── routers.yaml
├── services.yaml
└── middlewares.yaml

Voici un exemple de traefik.yaml avec les options principales :

/etc/traefik/traefik.yaml
# =============================================================================
# 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: true

Traefik accepte plusieurs formats pour la configuration statique :

traefik.yaml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
api:
dashboard: true
providers:
docker:
exposedByDefault: false

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

Si api.insecure: true est configuré :

Fenêtre de terminal
# Accès direct
http://localhost:8080/dashboard/
# Via curl
curl http://localhost:8080/api/overview

Créez un fichier de configuration dynamique pour sécuriser le dashboard :

/etc/traefik/conf.d/dashboard.yaml
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 :

Fenêtre de terminal
# Installer htpasswd si nécessaire
sudo apt install apache2-utils # Debian/Ubuntu
# ou
sudo dnf install httpd-tools # RHEL/Rocky
# Générer le hash
htpasswd -nb admin VotreMotDePasse
Fenêtre de terminal
# Binaire avec systemd
sudo journalctl -u traefik -f
# Docker
docker compose logs -f traefik
# Rechercher des erreurs
docker compose logs traefik 2>&1 | grep -i error
Fenêtre de terminal
# API overview
curl -s http://localhost:8080/api/overview | jq
# Liste des routers HTTP
curl -s http://localhost:8080/api/http/routers | jq
# Liste des services
curl -s http://localhost:8080/api/http/services | jq
# Santé du service
curl -s http://localhost:8080/ping
EndpointDescription
/api/overviewVue d'ensemble des ressources
/api/http/routersListe des routers HTTP
/api/http/servicesListe des services HTTP
/api/http/middlewaresListe des middlewares
/api/entrypointsConfiguration des entrypoints
/pingHealth check simple

Symptôme : Erreur "bind: address already in use"

Fenêtre de terminal
# Identifier le processus utilisant le port
sudo ss -tlnp | grep :80
# ou
sudo lsof -i :80
# Arrêter le service concurrent
sudo systemctl stop nginx # ou apache2

Symptôme : Erreur "permission denied" sur /var/run/docker.sock

Fenêtre de terminal
# Vérifier les permissions
ls -la /var/run/docker.sock
# Solution 1 : Ajouter l'utilisateur au groupe docker
sudo usermod -aG docker traefik
sudo systemctl restart traefik
# Solution 2 : Utiliser un proxy socket sécurisé (recommandé en production)
# Voir : https://github.com/Tecnativa/docker-socket-proxy

Symptôme : "Connection refused" sur le port 8080

  1. Vérifiez que l'API est activée :

    api:
    dashboard: true
    insecure: true
  2. Vérifiez que le port est exposé (Docker) :

    ports:
    - "8080:8080"
  3. Vérifiez le pare-feu :

    Fenêtre de terminal
    sudo ufw status
    sudo firewall-cmd --list-all

Symptôme : Traefik ne démarre pas

Fenêtre de terminal
# Valider la syntaxe YAML
yamllint /etc/traefik/traefik.yaml
# Tester la configuration sans démarrer
traefik --configFile=/etc/traefik/traefik.yaml --log.level=DEBUG 2>&1 | head -50
Erreur couranteSolution
yaml: unmarshal errorsVérifier l'indentation YAML
field not foundVérifier le nom des options (v3 vs v2)
invalid portFormat correct : ":80" avec les guillemets
  1. 3 méthodes d'installation : binaire (contrôle total), Docker (recommandé), package manager (versions souvent anciennes)

  2. Configuration statique : définit entrypoints, providers et options de démarrage, ne change qu'au redémarrage

  3. Configuration dynamique : définit routers, services et middlewares, hot-reload en temps réel

  4. exposedByDefault: false : bonne pratique de sécurité qui force l'ajout explicite de traefik.enable=true

  5. Dashboard : toujours sécuriser avec authentification en production

  6. Réseau traefik-public : réseau Docker dédié pour la communication entre Traefik et les services

  7. Logs : activer les access logs en JSON pour faciliter l'analyse

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn