Traefik
Le Gardien qui expose les services web derrière un reverse proxy sécurisé avec TLS Let’s Encrypt et protection WAF.
Configuration
Section intitulée « Configuration »- Config statique :
traefik.ymlgénéré par Nix (symlinkL+vers le store) - Config dynamique :
traefik_dynamic.ymldéchiffrée par sops vers/srv/docker/traefik/conf/ - Certificats :
acme.json(permissions0600obligatoires) - Logs d’accès :
/srv/docker/traefik/logs/traefik.log(JSON, rotatés quotidiennement 14j)
Entrypoints
Section intitulée « Entrypoints »| Entrypoint | Port | Rôle |
|---|---|---|
web | 80 | Redirect HTTPS |
websecure | 443 | TLS, timeout 600s |
traefik | 127.0.0.1:8080 | API/dashboard/ping (local uniquement) |
Health Check
Section intitulée « Health Check »docker exec traefik traefik healthcheck# oucurl -s http://127.0.0.1:8080/pingAjouter un Nouveau Service derrière Traefik
Section intitulée « Ajouter un Nouveau Service derrière Traefik »Dans le fichier docker-*.nix du service, ajouter les labels :
labels = { "traefik.enable" = "true"; "traefik.http.routers.<nom>.rule" = "Host(`monservice.friloux.me`)"; "traefik.http.routers.<nom>.tls" = "true"; "traefik.http.routers.<nom>.tls.certresolver" = "lets-encrypt"; "traefik.docker.network" = "web"; "traefik.http.services.<nom>.loadbalancer.server.port" = "PORT"; "traefik.http.routers.<nom>.middlewares" = "crowdsec@file,rate-limit@file,security-headers@file"; "friloux.me/health-watch" = "true"; # toujours en dernier};networks = ["web"];Dépendance CrowdSec
Section intitulée « Dépendance CrowdSec »Traefik ne démarre qu’après CrowdSec (after = ["crowdsec.service"]).
Si CrowdSec est en erreur, Traefik ne démarrera pas.
Renouvellement des Certificats
Section intitulée « Renouvellement des Certificats »Let’s Encrypt renouvelle automatiquement via TLS challenge. En cas de problème :
# Voir les logs de renouvellementdocker logs traefik 2>&1 | grep -i "acme\|cert\|renew"
# Forcer un renouvellement (supprimer le cert existant)# Attention : Let's Encrypt limite à 5 tentatives/domaine/heuredocker stop traefikrm /srv/docker/traefik/acme.jsontouch /srv/docker/traefik/acme.json && chmod 600 /srv/docker/traefik/acme.jsondocker start traefik