Habilitar configuración dinámica: provider file + directorio dynamic con middlewares

This commit is contained in:
2025-12-01 11:15:15 +01:00
parent 2d23c45c6c
commit 21d7a347da
4 changed files with 88 additions and 3 deletions

View File

@@ -11,6 +11,7 @@ services:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
- ./dynamic:/etc/traefik/dynamic:ro
environment:
TZ: "Europe/Madrid"
networks:

41
dynamic/README.md Normal file
View File

@@ -0,0 +1,41 @@
# Configuración Dinámica de Traefik
Este directorio contiene configuración que Traefik recarga automáticamente sin reiniciar el contenedor.
## Archivos
- **middlewares.yml**: Middlewares reutilizables (headers seguridad, rate limit, auth, etc.)
## Uso
### Aplicar middleware a un servicio
En el `docker-compose.yaml` de tu servicio:
```yaml
services:
mi-servicio:
labels:
- "traefik.enable=true"
- "traefik.http.routers.mi-servicio.rule=Host(`app.tudominio.com`)"
- "traefik.http.routers.mi-servicio.entrypoints=websecure"
- "traefik.http.routers.mi-servicio.tls.certresolver=letsencrypt"
- "traefik.http.routers.mi-servicio.middlewares=security-headers@file,rate-limit@file"
```
**Nota:** El sufijo `@file` indica que el middleware viene de configuración dinámica.
### Cadena de middlewares
Puedes combinar varios:
```yaml
- "traefik.http.routers.app.middlewares=security-headers@file,rate-limit@file,ip-whitelist@file"
```
## Recarga automática
Traefik detecta cambios en este directorio y recarga sin reiniciar. Espera ~10 segundos tras editar.
## Ejemplos adicionales
Consulta la wiki: https://git.ictiberia.com/groales/traefik/wiki/Middlewares-Seguridad

43
dynamic/middlewares.yml Normal file
View File

@@ -0,0 +1,43 @@
http:
middlewares:
# Headers de seguridad
security-headers:
headers:
stsSeconds: 63072000
forceSTSHeader: true
stsIncludeSubdomains: true
stsPreload: true
frameDeny: true
contentTypeNosniff: true
browserXssFilter: true
referrerPolicy: "strict-origin-when-cross-origin"
customResponseHeaders:
X-Robots-Tag: "none,noarchive,nosnippet,notranslate,noimageindex"
# Rate limiting
rate-limit:
rateLimit:
average: 100
burst: 200
period: 1m
# IP Whitelist (ejemplo - ajusta tus IPs)
ip-whitelist:
ipWhiteList:
sourceRange:
- "127.0.0.1/32"
- "10.0.0.0/8"
- "192.168.0.0/16"
# Autenticación básica (genera hash con: htpasswd -nb usuario password)
# auth-basic:
# basicAuth:
# users:
# - "admin:$apr1$..."
# Redirect www a root
redirect-www:
redirectRegex:
regex: "^https?://www\\.(.+)"
replacement: "https://${1}"
permanent: true

View File

@@ -19,9 +19,9 @@ providers:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: proxy
# file:
# directory: /etc/traefik/dynamic
# watch: true
file:
directory: /etc/traefik/dynamic
watch: true
# Certificates from an ACME server
certificatesResolvers:
letsencrypt: