| Situation | M thode |
|---|---|
| Service sur cette machine (conteneur Docker) | Cas 1 |
| Service sur une autre machine (IP fixe) | Cas 2 |
proxyDans le docker-compose.yml du service, le conteneur expos doit tre sur le r seau proxy :
services:
mon-app:
image: mon-image
container_name: mon-app
networks:
- proxy # obligatoire pour que Traefik puisse l'atteindre
- internal # réseau interne si besoin (base de donn es, etc.)
networks:
proxy:
external: true # réseau existant, ne pas le recréer
internal:
driver: bridge
Pas de labels Traefik dans le docker-compose tout se gère dans le fichier de config.
Créer /srv/traefik/config/mon-service.yml :
http:
routers:
mon-service:# Ajouter un service Traefik
## Deux cas de figure
| Situation | Méthode |
|--------------------------------------------------|-----------------------------------------|
| Service sur **cette machine** (conteneur Docker) | [Cas 1](#cas-1--conteneur-docker-local) |
| Service sur une **autre machine** (IP fixe) | [Cas 2](#cas-2--service-externe) |
---
## Cas 1: Conteneur Docker local
### 1. S'assurer que le conteneur est sur le réseau `proxy`
Dans le `docker-compose.yml` du service, le conteneur exposé doit être sur le réseau `proxy` :
```yaml
services:
mon-app:
image: mon-image
container_name: mon-app
networks:
- proxy # obligatoire pour que Traefik puisse l'atteindre
- internal # réseau interne si besoin (base de données, etc.)
networks:
proxy:
external: true # réseau existant, ne pas le recréer
internal:
driver: bridge
Pas de labels Traefik dans le docker-compose tout se gère dans le fichier de config.
Créer /srv/traefik/config/mon-service.yml :
http:
routers:
mon-service:
rule: "Host(`mon-service.sloudy.xyz`)"
entryPoints:
- websecure
tls:
certResolver: letsencrypt
service: mon-service
# middlewares: # décommenter si besoin d'Authentik
# - authentik@file
services:
mon-service:
loadBalancer:
servers:
- url: "http://mon-app:PORT" # nom du container_name + port interne
Le nom dans
urlcorrespond aucontainer_namedéfini dans le docker-compose.
cd /srv/mon-service
docker compose up -d
Traefik détecte le nouveau fichier automatiquement (pas de redémarrage nécessaire).
Service hébergé sur une autre machine avec une IP fixe.
Créer /srv/traefik/config/mon-service.yml :
http:
routers:
mon-service:
rule: "Host(`mon-service.sloudy.xyz`)"
entryPoints:
- websecure
tls:
certResolver: letsencrypt
service: mon-service
# middlewares:
# - authentik@file
services:
mon-service:
loadBalancer:
servers:
- url: "http://192.168.1.XXX:PORT"
C'est tout. Traefik recharge la config immédiatement.
Ajouter middlewares au router :
mon-service:
rule: "Host(`mon-service.sloudy.xyz`)"
...
middlewares:
- authentik@file
Définir le middleware dans le même fichier :
http:
routers:
mon-service:
...
middlewares:
- mon-middleware
services:
mon-service:
...
middlewares:
mon-middleware:
headers:
customRequestHeaders:
X-Custom-Header: "valeur"
http:
routers:
mon-service:
rule: "Host(`mon-service.sloudy.xyz`)"
entryPoints:
- websecure
tls:
certResolver: letsencrypt
service: mon-service
middlewares:
- authentik@file
mon-service-public:
rule: "Host(`mon-service.sloudy.xyz`) && PathPrefix(`/webhook`)"
entryPoints:
- websecure
tls:
certResolver: letsencrypt
service: mon-service
# pas de middleware route publique
services:
mon-service:
loadBalancer:
servers:
- url: "http://mon-app:PORT"
La règle la plus spécifique (Host + PathPrefix) a automatiquement priorité dans Traefik v3.
# Voir les logs Traefik en temps réel
docker logs -f traefik
# Lister les routers actifs (depuis la machine)
curl -s http://localhost:8080/api/http/routers | jq '.[].name'
Le dashboard est aussi disponible sur https://traefik.sloudy.xyz.