Traefik — Reverse Proxy
C’est quoi Traefik ?
Section intitulée « C’est quoi Traefik ? »Traefik est le portier du serveur. Il reçoit toutes les requêtes entrantes (ports 80 et 443) et les redirige vers le bon container Docker selon le domaine demandé.
Visiteur → docs.levell.cloud → Traefik → container docsVisiteur → n8n.levell.cloud → Traefik → container n8nVisiteur → kam.levell.cloud → Traefik → container kamAvantages : un seul service qui gère tout le routage, les redirections HTTP→HTTPS, et les certificats SSL automatiques via Let’s Encrypt.
Emplacement
Section intitulée « Emplacement »/docker/traefik-lr9j/└── docker-compose.ymlConfiguration active
Section intitulée « Configuration active »Traefik est configuré entièrement via des flags de ligne de commande dans le docker-compose.yml (pas de fichier traefik.toml) :
| Flag | Rôle |
|---|---|
--providers.docker=true | Lit les labels Docker pour la config |
--providers.docker.exposedbydefault=false | Un container n’est routé que s’il a traefik.enable=true |
--entrypoints.web.address=:80 | Écoute sur le port 80 |
--entrypoints.websecure.address=:443 | Écoute sur le port 443 |
--certificatesresolvers.letsencrypt... | Génère les certificats SSL automatiquement |
--entrypoints.web.http.redirections... | Redirige tout HTTP vers HTTPS |
Certificats SSL
Section intitulée « Certificats SSL »Les certificats sont générés automatiquement par Let’s Encrypt (gratuits, renouvelés automatiquement tous les 90 jours). Ils sont stockés dans le volume traefik-letsencrypt (/letsencrypt/acme.json).
# Vérifier que les certificats sont validescurl -sI https://docs.levell.cloud | head -3
# Voir les erreurs de certificat dans les logsdocker logs traefik-lr9j-traefik-1 --since 30m 2>&1 | grep -i "cert\|renew\|error"Ajouter un nouveau domaine
Section intitulée « Ajouter un nouveau domaine »Étape 1 — Pointer le DNS vers l’IP du VPS (dans le panneau DNS de ton hébergeur).
Étape 2 — Ajouter les labels dans le docker-compose.yml du nouveau service :
labels: - "traefik.enable=true" - "traefik.http.routers.NOMSERVICE.rule=Host(`DOMAINE.levell.cloud`)" - "traefik.http.routers.NOMSERVICE.entrypoints=websecure" - "traefik.http.routers.NOMSERVICE.tls.certresolver=letsencrypt" - "traefik.http.services.NOMSERVICE.loadbalancer.server.port=PORT_INTERNE" - "traefik.docker.network=traefik-public"Remplace NOMSERVICE par un nom unique (ex: docs), DOMAINE par le sous-domaine, et PORT_INTERNE par le port sur lequel écoute le container.
Étape 3 — Démarrer le container. Traefik détecte automatiquement les nouveaux labels et génère le certificat.
cd /docker/<nouveau-projet>docker compose up -dDépannage courant
Section intitulée « Dépannage courant »Le site répond en HTTP au lieu de HTTPS
Section intitulée « Le site répond en HTTP au lieu de HTTPS »Vérifier que le DNS pointe bien vers le VPS :
dig +short mondomaine.levell.cloudErreur 502 Bad Gateway
Section intitulée « Erreur 502 Bad Gateway »Le container cible ne répond pas. Vérifier qu’il tourne :
docker ps | grep <nom>docker logs <container> --tail 20Traefik derrière un proxy (ex: Cloudflare)
Section intitulée « Traefik derrière un proxy (ex: Cloudflare) »Si Cloudflare est activé, les requêtes arrivent avec les headers X-Forwarded-For, X-Forwarded-Proto, etc. Les applications Laravel/Next.js doivent être configurées pour faire confiance à ces headers (voir les pages kamctrl et kam).