Aller au contenu

Traefik — Reverse Proxy

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 docs
Visiteur → n8n.levell.cloud → Traefik → container n8n
Visiteur → kam.levell.cloud → Traefik → container kam

Avantages : un seul service qui gère tout le routage, les redirections HTTP→HTTPS, et les certificats SSL automatiques via Let’s Encrypt.

/docker/traefik-lr9j/
└── docker-compose.yml

Traefik est configuré entièrement via des flags de ligne de commande dans le docker-compose.yml (pas de fichier traefik.toml) :

FlagRôle
--providers.docker=trueLit les labels Docker pour la config
--providers.docker.exposedbydefault=falseUn 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

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).

Fenêtre de terminal
# Vérifier que les certificats sont valides
curl -sI https://docs.levell.cloud | head -3
# Voir les erreurs de certificat dans les logs
docker logs traefik-lr9j-traefik-1 --since 30m 2>&1 | grep -i "cert\|renew\|error"

É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.

Fenêtre de terminal
cd /docker/<nouveau-projet>
docker compose up -d

Vérifier que le DNS pointe bien vers le VPS :

Fenêtre de terminal
dig +short mondomaine.levell.cloud

Le container cible ne répond pas. Vérifier qu’il tourne :

Fenêtre de terminal
docker ps | grep <nom>
docker logs <container> --tail 20

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).