Introduction#
Après des mois d’utilisation manuelle de nginx, j’ai décidé de passer à Traefik. La raison est simple : gérer les certificats SSL pour chaque nouveau service est fastidieux. Traefik automatise tout avec Let’s Encrypt intégré. Voici ma configuration réelle.
Pourquoi Traefik#
Avec Traefik, tu n’as pas besoin de recharger nginx chaque fois que tu ajoutes un conteneur. Il détecte automatiquement les services Docker, génère les certificats SSL à la demande et redirige le trafic. Tout est déclaratif.
Structure de base#
Je crée un dossier pour Traefik :
mkdir -p /home/usuario/docker/traefik
cd /home/usuario/docker/traefikJ’ai besoin de trois fichiers : docker-compose.yml, traefik.yml et acme.json.
Fichier acme.json#
Ce fichier stocke les certificats. Il doit avoir des permissions restrictives :
touch acme.json
chmod 600 acme.jsonConfiguration de Traefik (traefik.yml)#
api:
insecure: true
dashboard: true
entryPoints:
web:
address: ":80"
http:
redirections:
entrypoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
filename: /traefik/traefik.yml
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: mi-email@example.com
storage: acme.json
httpChallenge:
entryPoint: webJe remplace mi-email@example.com par mon vrai email. Let’s Encrypt l’utilise pour les notifications.
Docker Compose#
C’est le fichier qui lance tout :
version: '3.8'
services:
traefik:
image: traefik:v2.11
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
ports:
- "80:80"
- "443:443"
environment:
- TZ=Europe/Madrid
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik/traefik.yml:ro
- ./acme.json:/acme.json
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.midominio.com`)"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
networks:
proxy:
driver: bridgeJe remplace traefik.midominio.com par mon vrai domaine. Le port 8080 est celui du tableau de bord de Traefik.
Lancer Traefik#
docker-compose up -dJe vérifie les logs :
docker-compose logs -fSi tout va bien, le tableau de bord sera sur https://traefik.midominio.com.
Ajouter des services#
Voilà le meilleur. Pour ajouter un nouveau service, j’ai juste besoin de labels Docker. Exemple avec un conteneur simple :
services:
mi-app:
image: mi-imagen:latest
container_name: mi-app
restart: unless-stopped
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.mi-app.rule=Host(`app.midominio.com`)"
- "traefik.http.routers.mi-app.entrypoints=websecure"
- "traefik.http.routers.mi-app.tls.certresolver=letsencrypt"
- "traefik.http.services.mi-app.loadbalancer.server.port=3000"
networks:
proxy:
external: trueJe n’ai pas besoin de toucher à Traefik. Le certificat se génère automatiquement.
Problèmes courants#
Le domaine ne résout pas : Assure-toi que ton DNS pointe vers la bonne IP.
ACME challenge échoue : Vérifie que le port 80 est ouvert et accessible depuis internet. Let’s Encrypt en a besoin.
Tableau de bord lent : C’est normal avec beaucoup de services. Ce n’est pas un problème.
Conclusion#
Traefik m’a fait gagner des heures de configuration manuelle. Chaque nouveau conteneur n’a besoin que de quatre labels. Les certificats se renouvellent automatiquement 30 jours avant leur expiration.
Si tu as un serveur domestique avec plusieurs services, ça vaut le coup de migrer. La courbe d’apprentissage est courte et les bénéfices sont réels.
Équipement recommandé#
- Raspberry Pi 3 B+ — Serveur léger à faible consommation pour démarrer ton homelab
- Raspberry Pi 4 (4GB) — La base parfaite pour homelab, Docker et monitoring
Liens d’affiliation. Pas de coût supplémentaire pour toi.