Pourquoi placer Traefik en frontal de votre VPS ?
Quand vous faites tourner plusieurs applications conteneurisées sur un même VPS, gérer manuellement les virtual hosts Nginx et renouveler chaque certificat devient vite ingérable. Traefik résout ce problème en lisant directement les labels de vos conteneurs Docker : vous déclarez une route au moment du docker run ou dans votre docker-compose.yml, et Traefik la configure à chaud, génère le certificat Let's Encrypt et l'expose en HTTPS. Aucun fichier de conf à éditer, aucun reload : tout est dynamique.
Ce que Traefik apporte concrètement sur un VPS
- Découverte automatique des conteneurs Docker via le provider Docker (les routes apparaissent sans redémarrage)
- Certificats SSL Let's Encrypt générés et renouvelés automatiquement (HTTP-01 ou DNS-01)
- Routage par domaine et par chemin, géré entièrement via les labels Docker
- Dashboard web intégré pour visualiser routers, services et middlewares en temps réel
- Middlewares prêts à l'emploi : redirection HTTPS, basic auth, rate limiting, headers de sécurité
- Load balancing automatique quand vous scalez un service à plusieurs réplicas
Prérequis
Traefik lui-même est très léger : 1 vCPU et 1 Go de RAM suffisent largement pour le proxy seul, le surcoût venant de vos applications derrière. Prévoyez un VPS avec Docker Engine et le plugin Docker Compose v2 installés, un nom de domaine dont les enregistrements A/AAAA pointent vers l'IP du VPS, et les ports 80 et 443 ouverts dans votre pare-feu (UFW). Pour les certificats wildcard, il vous faudra aussi un accès API à votre fournisseur DNS.
Déployer Traefik avec Docker Compose
Créer le réseau et l'arborescence
Créez un réseau Docker partagé que Traefik et vos applications utiliseront :
docker network create proxy. Créez un dossiertraefik/contenant un fichieracme.json(le stockage des certificats) avec les bons droits :touch acme.json && chmod 600 acme.json. Sans ces droits restreints, Traefik refusera de l'utiliser.Configurer les entrypoints et le résolveur ACME
Dans le
docker-compose.yml, déclarez deux entrypoints (websur :80,websecuresur :443) et un certificateResolver Let's Encrypt avec votre email et le challengehttpChallenge. Montez le socket Docker en lecture seule (/var/run/docker.sock:/var/run/docker.sock:ro) pour que Traefik découvre les conteneurs, et le volumeacme.json.Forcer la redirection HTTP vers HTTPS
Ajoutez un middleware global de redirection sur l'entrypoint
webvia les labels :traefik.http.routers.http-catchall.middlewares=redirect-to-https. Ainsi tout trafic en clair est automatiquement basculé en HTTPS, comportement attendu en production.Sécuriser le dashboard
Exposez le dashboard sur un sous-domaine (
traefik.votredomaine.com) protégé par un middlewarebasicauth. Générez le hash avechtpasswd -nb admin motdepasseet placez-le dans le labeltraefik.http.middlewares.auth.basicauth.users. Ne laissez jamais le flag--api.insecure=trueen production.Lancer Traefik
Démarrez la stack :
docker compose up -d. Vérifiez les logs avecdocker compose logs -f traefikpour confirmer la connexion à Let's Encrypt et l'absence d'erreur ACME (attention au rate limit Let's Encrypt en phase de tests, utilisez le serveur staging).Connecter une application
Pour exposer un service, attachez-le au réseau
proxyet ajoutez ses labels :traefik.enable=true,traefik.http.routers.app.rule=Host(\app.votredomaine.com\),traefik.http.routers.app.entrypoints=websecureettraefik.http.routers.app.tls.certresolver=letsencrypt. Traefik route et certifie l'application en quelques secondes.
Pour obtenir un certificat wildcard (*.votredomaine.com) et éviter d'exposer chaque sous-domaine, passez du httpChallenge au dnsChallenge. Configurez le provider DNS (Cloudflare, OVH, etc.) via les variables d'environnement (ex : CF_API_EMAIL, CF_DNS_API_TOKEN) : Traefik prouve la propriété du domaine par un enregistrement TXT, ce qui fonctionne même pour des services non exposés publiquement.