🎯 TUTORIEL PAS À PAS

🚀 Installation de Traefik en bare-metal sur Debian 13

📅 Mis à jour : Août 2026 ⏱️ Durée : 20-25 min 📋 Niveau : Intermédiaire 🐧 Debian 13 🚀 Traefik 3.7.10 🔒 Let's Encrypt

Ce tutoriel vous guide pas à pas dans l'installation de Traefik 3.7.10 en bare-metal sur Debian 13.2. Vous apprendrez à configurer un reverse-proxy moderne avec gestion automatique des certificats Let's Encrypt, un tableau de bord sécurisé, et des middlewares de sécurité avancés.

📌 Prérequis :

1 Préparation du système

Étape 1 – Mise à jour du système
Avant toute installation, assurez-vous que votre système est à jour.
$ sudo apt update && sudo apt full-upgrade -y
Étape 2 – Installation de curl
Installez curl pour télécharger les fichiers nécessaires.
$ sudo apt install curl -y
Étape 3 – Création de l'utilisateur traefik
Créez un utilisateur système dédié pour l'exécution de Traefik, sans shell interactif.
$ sudo useradd --system --home /etc/traefik --shell /bin/false traefik
🔍 Explication :
  • --system : crée un compte système (UID < 1000).
  • --home /etc/traefik : définit le répertoire personnel.
  • --shell /bin/false : interdit toute connexion interactive.

2 Création de l'arborescence

Étape 1 – Création des répertoires
Créez les répertoires de configuration et de données pour Traefik.
$ sudo mkdir -p /etc/traefik /var/lib/traefik
$ sudo chown traefik:traefik /etc/traefik /var/lib/traefik
📂 Organisation :
  • /etc/traefik : configuration statique et fichiers dynamiques.
  • /var/lib/traefik : données persistantes (certificats ACME).

3 Installation du binaire Traefik

Étape 1 – Téléchargement du binaire
Téléchargez la version 3.7.10 de Traefik depuis GitHub.
$ wget https://github.com/traefik/traefik/releases/download/v3.7.10/traefik_v3.7.10_linux_amd64.tar.gz
Étape 2 – Extraction et installation
Extrayez le binaire et placez-le dans /usr/local/bin.
$ sudo tar -xvzf traefik_v3.7.10_linux_amd64.tar.gz -C /usr/local/bin traefik
$ sudo chmod +x /usr/local/bin/traefik
✅ Vérification : traefik version doit afficher 3.7.10.

4 Configuration statique de Traefik

Étape 1 – Création du fichier traefik.yml
Créez le fichier de configuration statique avec les paramètres de base.
$ sudo nano /etc/traefik/traefik.yml
log:
  level: INFO

api:
  dashboard: true
  insecure: false

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
          permanent: true

  websecure:
    address: ":443"
    http3: {}            # active HTTP/3 (QUIC) sur 443

providers:
  file:
    directory: "/etc/traefik/dynamic"
    watch: true

certificatesResolvers:
  le:
    acme:
      email: "VOTRE_MAIL@ik.me"   # ← À MODIFIER !
      storage: "/var/lib/traefik/acme.json"
      httpChallenge:
        entryPoint: web
⚠️ Important : Remplacez VOTRE_MAIL@ik.me par votre adresse email réelle, utilisée pour les notifications Let's Encrypt.
Étape 2 – Création du fichier ACME
Créez le fichier de stockage des certificats avec les bonnes permissions.
$ sudo touch /var/lib/traefik/acme.json
$ sudo chown traefik:traefik /var/lib/traefik/acme.json
$ sudo chmod 600 /var/lib/traefik/acme.json
🔐 Sécurité : Le fichier acme.json contient les clés privées des certificats. Les droits 600 garantissent que seul l'utilisateur Traefik peut y accéder.

5 Configuration du tableau de bord sécurisé

Étape 1 – Génération du mot de passe chiffré
Installez apache2-utils et générez un mot de passe chiffré pour l'authentification.
$ sudo apt install apache2-utils -y
$ htpasswd -nbB admin VOTRE_MOT_DE_PASSE
⚠️ Conservez le hash généré : Vous en aurez besoin pour l'étape suivante. Exemple de sortie : admin:$2y$05$...
Étape 2 – Création du dossier dynamique
$ sudo mkdir /etc/traefik/dynamic
Étape 3 – Création du fichier dashboard.yml
Créez la configuration du tableau de bord avec authentification et redirections.
$ sudo nano /etc/traefik/dynamic/dashboard.yml
http:
  routers:
    dashboard:
      rule: "Host(`traefik.mon_domaine.fr`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
      entryPoints: ["websecure"]
      service: api@internal
      tls:
        certResolver: le
      middlewares:
        - auth
        - SecureHeaders
        - Compression

    dashboard-root:
      rule: "Host(`traefik.mon_domaine.fr`) && Path(`/`)"
      entryPoints: ["websecure"]
      service: api@internal
      tls:
        certResolver: le
      middlewares:
        - dash-redirect
        - SecureHeaders

  middlewares:
    auth:
      basicAuth:
        realm: "Traefik"
        users:
          - "admin:COLLER_ICI_LE_HASH_GÉNÉRÉ"   # ← À MODIFIER

    dash-redirect:
      redirectRegex:
        regex: "^/$"
        replacement: "/dashboard/"
        permanent: true
⚠️ Modifications nécessaires :
  • Remplacez traefik.mon_domaine.fr par votre domaine réel.
  • Remplacez admin:COLLER_ICI_LE_HASH_GÉNÉRÉ par le hash généré à l'étape précédente.

6 Middlewares de sécurité

6.1 – Configuration TLS

Création du fichier tls.yml
$ sudo nano /etc/traefik/dynamic/tls.yml
tls:
  options:
    default:
      minVersion: "VersionTLS12"
      preferServerCipherSuites: true
      cipherSuites:
        - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
        - "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305"
        - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
        - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
        - "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"
      curvePreferences:
        - CurveP256
        - CurveP384
        - CurveP521

6.2 – Configuration des headers de sécurité

Création du fichier headers.yml
$ sudo nano /etc/traefik/dynamic/headers.yml
http:
  middlewares:
    Compression:
      compress:
        excludedContentTypes:
          - text/event-stream

    SecureHeaders:
      headers:
        forceSTSHeader: true
        stsSeconds: 63072000
        stsIncludeSubdomains: true
        stsPreload: true
        customFrameOptionsValue: "SAMEORIGIN"
        contentTypeNosniff: true
        referrerPolicy: "same-origin"
        permissionsPolicy: >-
          accelerometer=(), camera=(), geolocation=(),
          gyroscope=(), magnetometer=(), microphone=(),
          payment=(), usb=()
        contentSecurityPolicy: >-
          default-src 'self';
          script-src 'self' 'unsafe-inline' 'unsafe-eval';
          style-src 'self' 'unsafe-inline';
          img-src 'self' data: blob:;
          font-src 'self' data:;
          connect-src 'self' https: wss:;
          frame-ancestors 'self';
          base-uri 'self';
          form-action 'self';
          upgrade-insecure-requests
🔍 Explication : Ce middleware ajoute des en-têtes de sécurité (HSTS, CSP, X-Frame-Options, etc.) pour protéger vos applications contre les attaques web courantes.

7 Création du service systemd

Création du fichier traefik.service
$ sudo nano /etc/systemd/system/traefik.service
[Unit]
Description=Traefik Reverse Proxy
After=network-online.target
Wants=network-online.target

[Service]
User=traefik
Group=traefik
ExecStart=/usr/local/bin/traefik --configfile=/etc/traefik/traefik.yml
WorkingDirectory=/etc/traefik
Restart=on-failure
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
LimitNOFILE=1048576
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/traefik /etc/traefik

[Install]
WantedBy=multi-user.target
🔍 Explication :
  • User=traefik : exécute le service avec l'utilisateur dédié.
  • AmbientCapabilities : permet de lier les ports < 1024 (80, 443).
  • ProtectSystem=full : restreint l'accès au système de fichiers.

8 Démarrage et activation

Étape 1 – Recharger systemd et activer Traefik
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now traefik
$ sudo systemctl status traefik
✅ Le service doit être active (running).
🔥 Règles de pare-feu : Assurez-vous que les ports 80 et 443 sont ouverts dans votre pare-feu.
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

9 Test du tableau de bord

Étape 1 – Vérification DNS
Assurez-vous que votre domaine traefik.mon_domaine.fr pointe vers l'IP de votre serveur.
Étape 2 – Connexion au dashboard
Depuis un navigateur, accédez à https://traefik.mon_domaine.fr et connectez-vous avec les identifiants que vous avez configurés.
https://traefik.mon_domaine.fr
✅ Félicitations ! Traefik est opérationnel avec Let's Encrypt, le tableau de bord sécurisé et les middlewares de sécurité.

🔧 Exemple : Exposer le service Cockpit

Voici un exemple de configuration pour exposer le service Cockpit (interface d'administration) via Traefik.

ℹ️ Note : Cet exemple nécessite un sous-domaine supplémentaire (cockpit.mon_domaine.fr) pointant vers votre serveur.
Création du fichier cockpit.yml
$ sudo nano /etc/traefik/dynamic/cockpit.yml
http:
  routers:
    cockpit:
      rule: "Host(`cockpit.mon_domaine.fr`)"
      entryPoints: ["websecure"]
      service: cockpit-svc
      middlewares:
        - SecureHeaders
        - Compression
      tls:
        certResolver: le

  services:
    cockpit-svc:
      loadBalancer:
        servers:
          - url: "https://IP_MACHINE_COCKPIT:9090"
        passHostHeader: true
        serversTransport: cockpit-transport

  serversTransports:
    cockpit-transport:
      insecureSkipVerify: true
⚠️ Modifications nécessaires :
  • Remplacez cockpit.mon_domaine.fr par votre sous-domaine.
  • Remplacez IP_MACHINE_COCKPIT par l'IP du serveur hébergeant Cockpit.
💡 Rechargement automatique : Traefik surveille le dossier /etc/traefik/dynamic. Dès que vous créez ou modifiez un fichier, la configuration est rechargée automatiquement.
Il n'est pas nécessaire de redémarrer Traefik.

Test de validation

🎉 Installation réussie si :


📚 Ressources complémentaires


← Retour au portail
BTS SIO – Lycée NDLP Avranches – Tutoriel Traefik v1.0