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.
sudo.curlcurl pour télécharger les fichiers nécessaires.traefik--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./etc/traefik : configuration statique et fichiers dynamiques./var/lib/traefik : données persistantes (certificats ACME)./usr/local/bin.traefik version doit afficher 3.7.10.
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
VOTRE_MAIL@ik.me par votre adresse email réelle, utilisée pour les notifications Let's Encrypt.
acme.json contient les clés privées des certificats. Les droits 600 garantissent que seul l'utilisateur Traefik peut y accéder.
apache2-utils et générez un mot de passe chiffré pour l'authentification.admin:$2y$05$...
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
traefik.mon_domaine.fr par votre domaine réel.admin:COLLER_ICI_LE_HASH_GÉNÉRÉ par le hash généré à l'étape précédente.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
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
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
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.active (running).
traefik.mon_domaine.fr pointe vers l'IP de votre serveur.https://traefik.mon_domaine.fr et connectez-vous avec les identifiants que vous avez configurés.
https://traefik.mon_domaine.fr
Voici un exemple de configuration pour exposer le service Cockpit (interface d'administration) via Traefik.
cockpit.mon_domaine.fr) pointant vers votre serveur.
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
cockpit.mon_domaine.fr par votre sous-domaine.IP_MACHINE_COCKPIT par l'IP du serveur hébergeant Cockpit./etc/traefik/dynamic.
Dès que vous créez ou modifiez un fichier, la configuration est rechargée automatiquement.🎉 Installation réussie si :
systemctl status traefik affiche active (running).https://traefik.mon_domaine.fr.SecureHeaders et Compression sont actifs.