Habilitar configuración dinámica: provider file + directorio dynamic con middlewares
This commit is contained in:
@@ -11,6 +11,7 @@ services:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- ./traefik.yml:/traefik.yml:ro
|
- ./traefik.yml:/traefik.yml:ro
|
||||||
- ./letsencrypt:/letsencrypt
|
- ./letsencrypt:/letsencrypt
|
||||||
|
- ./dynamic:/etc/traefik/dynamic:ro
|
||||||
environment:
|
environment:
|
||||||
TZ: "Europe/Madrid"
|
TZ: "Europe/Madrid"
|
||||||
networks:
|
networks:
|
||||||
|
|||||||
41
dynamic/README.md
Normal file
41
dynamic/README.md
Normal 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
43
dynamic/middlewares.yml
Normal 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
|
||||||
@@ -19,9 +19,9 @@ providers:
|
|||||||
endpoint: "unix:///var/run/docker.sock"
|
endpoint: "unix:///var/run/docker.sock"
|
||||||
exposedByDefault: false
|
exposedByDefault: false
|
||||||
network: proxy
|
network: proxy
|
||||||
# file:
|
file:
|
||||||
# directory: /etc/traefik/dynamic
|
directory: /etc/traefik/dynamic
|
||||||
# watch: true
|
watch: true
|
||||||
# Certificates from an ACME server
|
# Certificates from an ACME server
|
||||||
certificatesResolvers:
|
certificatesResolvers:
|
||||||
letsencrypt:
|
letsencrypt:
|
||||||
|
|||||||
Reference in New Issue
Block a user