Ce guide suit la documentation officielle de Traefik, relue le 14 octobre 2026 : Exposer des services avec Docker, sa suite avancée avec Let's Encrypt et la référence des résolveurs ACME. La dernière version publiée est la 3.7.14 ; les fichiers ci-dessous utilisent l'étiquette traefik:v3.7. Il faut Docker Engine et son extension Compose.
Ce qu'il faut avant de commencer
- Un nom de domaine dont l'enregistrement A pointe vers l'adresse du serveur : voir Pointer un nom de domaine vers son VPS.
- Les ports 80 et 443 joignables depuis Internet, et libres sur le serveur. Let's Encrypt valide le domaine en passant par le port 80.
- Aucun autre proxy inverse en service. Un seul programme peut écouter sur 80 et 443 : si Nginx Proxy Manager ou Dokploy tourne déjà, il occupe la place.
Installer Traefik
- Créez un dossier pour Traefik et placez-vous dedans :
mkdir -p ~/traefik/letsencrypt && cd ~/traefik - Créez le fichier
compose.yamlavec le contenu ci-dessous, en remplaçant l'adresse e-mail par la vôtre. Let's Encrypt s'en sert pour vous prévenir d'un problème de certificat. - Lancez Traefik :
docker compose up -d - Suivez son démarrage :
docker compose logs -f traefik, puis Ctrl+C pour quitter l'affichage.
services:
traefik:
image: traefik:v3.7
restart: unless-stopped
security_opt:
- no-new-privileges:true
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=proxy"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--entryPoints.websecure.http.tls=true"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entryPoints.web.http.redirections.entryPoint.scheme=https"
- "[email protected]"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
networks:
- proxy
networks:
proxy:
name: proxy
Ce que font les lignes importantes :
| Réglage | Rôle |
|---|---|
exposedbydefault=false | aucun conteneur n'est publié sans l'étiquette traefik.enable=true |
network=proxy | Traefik joint les applications par le réseau Docker nommé proxy |
web et websecure | les points d'entrée sur les ports 80 et 443 |
redirections | toute visite en HTTP part vers le HTTPS |
certificatesresolvers.le | le résolveur Let's Encrypt, nommé le, et le fichier où il garde les certificats |
Le dossier letsencrypt conserve les certificats obtenus. Gardez-le : sans lui, Traefik redemande tous les certificats à chaque recréation du conteneur.
Publier une application
Chaque application rejoint le réseau proxy et porte quatre étiquettes. L'exemple utilise traefik/whoami, la petite application de test de Traefik, en version 1.12, la dernière publiée sur Docker Hub au 14 octobre 2026, qui affiche les en-têtes de la requête reçue.
- Dans un autre dossier, créez le
compose.yamlde l'application, en remplaçanttest.votre-domaine.frpar votre sous-domaine. - Lancez-la :
docker compose up -d - Ouvrez
https://test.votre-domaine.frdans le navigateur : la page de whoami s'affiche, en HTTPS.
services:
whoami:
image: traefik/whoami:v1.12
restart: unless-stopped
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`test.votre-domaine.fr`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=le"
networks:
proxy:
external: true
external: true indique à Compose que le réseau proxy existe déjà, créé par le fichier de Traefik. Le mot whoami dans les étiquettes est le nom du routeur : donnez à chaque application un nom différent.
Quand le conteneur écoute sur plusieurs ports, ou que Traefik ne devine pas le bon, précisez-le par une cinquième étiquette, ici pour une application sur le port 3001 comme Uptime Kuma :
- "traefik.http.services.monapp.loadbalancer.server.port=3001"
Points de vigilance
- Le socket Docker. Le fichier donne à Traefik l'accès en lecture à
/var/run/docker.sock, comme le fait la documentation. Ce socket permet de piloter Docker : un conteneur qui y accède a beaucoup de pouvoir sur le serveur. Gardez l'image de Traefik à jour, voir Mettre à jour un conteneur Docker. - Ne publiez plus les ports des applications. Une application servie par Traefik n'a pas besoin de section
ports:: le trafic arrive par le réseauproxy. - Le tableau de bord de Traefik n'est pas activé dans ce fichier. Il ne sert qu'à lire les routes ; s'il vous manque, ne l'ouvrez jamais sans protection sur Internet. Une interface d'administration peut aussi n'être joignable que par un VPN, voir WireGuard.
Sur un VPS Hubspace
Docker et Compose sont installés à la livraison, et le compte admin les utilise sans sudo. Le pare-feu réseau placé devant le serveur ouvre déjà 80 et 443, ceux dont Traefik a besoin, et garde fermés tous les autres ports, y compris ceux que Docker publie : un port d'application oublié dans un fichier compose n'est donc pas exposé. La sauvegarde quotidienne du serveur comprend le dossier letsencrypt tant qu'il est sur le disque du serveur, et non sur un disque supplémentaire monté sur /mnt/data, qui n'est pas sauvegardé. Les serveurs VPS décrivent ce qui est livré.
Questions fréquentes
Traefik ou Nginx Proxy Manager ?
Les deux font le même travail. Nginx Proxy Manager se règle dans une interface web, Traefik dans les fichiers compose de vos applications. Si vous décrivez déjà tout en Compose, Traefik évite d'aller cliquer à chaque nouvelle application. Un seul des deux peut tourner sur le serveur.
Le certificat ne s'obtient pas, que vérifier ?
Lisez les journaux avec docker compose logs traefik. Les causes habituelles : le domaine ne pointe pas encore vers le serveur (dig +short test.votre-domaine.fr), le port 80 n'est pas joignable depuis Internet, ou l'application n'est pas sur le réseau proxy.
Faut-il un routeur par sous-domaine ?
Non. Une même règle accepte plusieurs noms reliés par ||, comme ci-dessous. Un routeur à part ne se justifie que si un sous-domaine doit mener à une autre application.
`` - "traefik.http.routers.whoami.rule=Host(a.votre-domaine.fr) || Host(b.votre-domaine.fr)" ``
Articles liés
- Installer Docker sur Ubuntu ou Debian, pas à pasInstaller Docker Engine et Docker Compose sur Ubuntu 24.04, 26.04 ou Debian 13 depuis le dépôt officiel, l'utiliser sans sudo et vérifier que tout fonctionne.
- Docker Compose : décrire et lancer vos conteneursDocker Compose expliqué : écrire un fichier compose.yaml, lancer et arrêter vos services, lire les journaux et mettre à jour une application sur un serveur.
- Commandes Docker : les essentielles à connaîtreLes commandes Docker essentielles : lister les conteneurs, lire leurs journaux, entrer dans un conteneur, gérer les images et libérer de la place sans risque.