Traefik
Traefik es el reverse proxy que Dokploy usa internamente para enrutar el trafico HTTP/HTTPS a cada aplicacion. Entiende Docker de forma nativa: detecta contenedores automaticamente y configura las rutas sin intervencion manual.
Que es Traefik y su rol en Dokploy
Cuando despliegas una aplicacion en Dokploy y le asignas un dominio, Traefik es el componente que:
- Recibe todas las peticiones HTTP/HTTPS en los puertos 80 y 443
- Identifica a que aplicacion pertenece cada peticion por el header
Host - Reenvía la peticion al contenedor correcto en el puerto interno
- Gestiona los certificados SSL con Let’s Encrypt
Arquitectura
Internet
|
v
[Traefik :80/:443]
|
+---> app-frontend:3000
+---> app-api:8080
+---> app-admin:4000
Traefik corre como un contenedor Docker gestionado por Dokploy. Puedes ver su estado:
docker ps | grep traefik
Acceder a la configuracion
En el panel de Dokploy: Settings > Traefik
Desde ahi puedes ver y editar la configuracion del servidor Traefik y la configuracion especifica por aplicacion.
Configurar redirects
HTTP a HTTPS
Por defecto, Dokploy configura Traefik para redirigir HTTP a HTTPS cuando activas HTTPS en un dominio. Si necesitas forzarlo globalmente, edita la configuracion de Traefik en Settings > Traefik > Server Config:
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
www a non-www
Para redirigir www.tudominio.com a tudominio.com, configura un middleware en la aplicacion.
En la pestana Advanced > Traefik de la aplicacion, agrega la configuracion del middleware:
http:
middlewares:
redirect-www:
redirectRegex:
regex: "^https?://www\\.tudominio\\.com/(.*)"
replacement: "https://tudominio.com/${1}"
permanent: true
Luego asocia el middleware al router de la aplicacion en la misma seccion.
non-www a www
Si prefieres la version con www:
http:
middlewares:
redirect-to-www:
redirectRegex:
regex: "^https?://tudominio\\.com/(.*)"
replacement: "https://www.tudominio.com/${1}"
permanent: true
Headers de seguridad
Traefik permite inyectar headers HTTP de seguridad a todas las respuestas sin modificar el codigo de la aplicacion.
Middleware de headers seguros
En Settings > Traefik > Server Config, o en la configuracion por aplicacion:
http:
middlewares:
security-headers:
headers:
# Forzar HTTPS durante 1 año
stsSeconds: 31536000
stsIncludeSubdomains: true
stsPreload: true
# Prevenir clickjacking
frameDeny: true
# Prevenir MIME type sniffing
contentTypeNosniff: true
# Bloquear si detecta XSS
browserXssFilter: true
# Controlar de donde se cargan recursos
contentSecurityPolicy: "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"
# Controlar informacion del referrer
referrerPolicy: "strict-origin-when-cross-origin"
# Controlar que APIs del navegador puede usar la pagina
permissionsPolicy: "camera=(), microphone=(), geolocation=()"
Que hace cada header
| Header | Funcion |
|---|---|
HSTS (stsSeconds) | Obliga al navegador a usar HTTPS siempre |
X-Frame-Options (frameDeny) | Bloquea la carga del sitio en iframes (anti-clickjacking) |
X-Content-Type-Options (contentTypeNosniff) | Previene que el navegador interprete archivos con MIME incorrecto |
X-XSS-Protection (browserXssFilter) | Activa el filtro XSS del navegador |
CSP (contentSecurityPolicy) | Define origenes permitidos para scripts, estilos e imagenes |
Referrer-Policy (referrerPolicy) | Controla que informacion se envia en el header Referer |
Permissions-Policy (permissionsPolicy) | Restringe acceso a APIs del dispositivo |
Verificar headers
curl -I https://app.tudominio.com
Busca en la respuesta:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Rate limiting
Protege tus aplicaciones de abuso limitando el numero de peticiones por cliente.
Configurar rate limit
http:
middlewares:
rate-limit:
rateLimit:
average: 100
period: 1m
burst: 50
| Parametro | Descripcion |
|---|---|
average | Peticiones permitidas por periodo |
period | Ventana de tiempo (1s, 1m, 1h) |
burst | Peticiones extra permitidas en rafagas |
La configuracion anterior permite 100 peticiones por minuto con rafagas de hasta 50 peticiones adicionales.
Rate limit por IP
Para limitar por direccion IP del cliente:
http:
middlewares:
rate-limit-ip:
rateLimit:
average: 50
period: 1m
burst: 20
sourceCriterion:
ipStrategy:
depth: 1
El parametro depth indica cuantos niveles de proxies hay delante. Con depth: 1, Traefik extrae la IP del header X-Forwarded-For.
Probar el rate limit
# Enviar 200 peticiones rapidas
for i in $(seq 1 200); do
curl -s -o /dev/null -w "%{http_code}\n" https://app.tudominio.com
done | sort | uniq -c
Resultado esperado: las primeras peticiones retornan 200, las que exceden el limite retornan 429.
Middleware custom
Traefik permite encadenar multiples middlewares en un mismo router.
Combinar middlewares
http:
middlewares:
security-headers:
headers:
stsSeconds: 31536000
frameDeny: true
contentTypeNosniff: true
rate-limit:
rateLimit:
average: 100
period: 1m
burst: 50
compress:
compress:
excludedContentTypes:
- "text/event-stream"
Middleware de compresion
Reduce el tamano de las respuestas automaticamente:
http:
middlewares:
compress:
compress: {}
Traefik comprime las respuestas con gzip o brotli si el cliente lo soporta (header Accept-Encoding).
Middleware de autenticacion basica
Protege una aplicacion con usuario y contrasena a nivel de proxy:
# Generar el hash de la contrasena
htpasswd -nb admin tu-contrasena-segura
# Resultado: admin:$apr1$xxx...
http:
middlewares:
basic-auth:
basicAuth:
users:
- "admin:$apr1$xxx..."
Middleware de IP allowlist
Restringe el acceso a ciertas IPs:
http:
middlewares:
ip-allowlist:
ipAllowList:
sourceRange:
- "10.0.0.0/8"
- "192.168.1.0/24"
- "203.0.113.50/32"
Configuracion avanzada por aplicacion
Cada aplicacion en Dokploy puede tener su propia configuracion de Traefik.
Editar configuracion por aplicacion
- Selecciona la aplicacion
- Ve a Advanced > Traefik
- Edita la configuracion YAML
La configuracion de la aplicacion tiene prioridad sobre la configuracion global.
Ejemplo: API con rate limit y compresion
http:
routers:
api-router:
rule: "Host(`api.tudominio.com`)"
middlewares:
- rate-limit
- compress
- security-headers
service: api-service
tls:
certResolver: letsencrypt
middlewares:
rate-limit:
rateLimit:
average: 200
period: 1m
burst: 100
compress:
compress: {}
security-headers:
headers:
stsSeconds: 31536000
contentTypeNosniff: true
Ejemplo: aplicacion con path prefix
Si quieres servir una aplicacion en tudominio.com/api:
http:
routers:
api-router:
rule: "Host(`tudominio.com`) && PathPrefix(`/api`)"
middlewares:
- strip-api-prefix
service: api-service
middlewares:
strip-api-prefix:
stripPrefix:
prefixes:
- "/api"
El middleware stripPrefix elimina /api antes de reenviar la peticion al contenedor. La aplicacion recibe /users en lugar de /api/users.
Skip YAML validation para Go templating (v0.27+)
Desde la version 0.27, Dokploy permite desactivar la validacion YAML en la configuracion de Traefik. Esto es util cuando usas Go templates en la configuracion de Traefik.
Cuando usar esta opcion
Los archivos de configuracion de Traefik soportan Go templates:
http:
routers:
app:
rule: "Host(`{{ env "APP_DOMAIN" }}`)"
La sintaxis {{ }} no es YAML valido, por lo que el validador de Dokploy lo rechaza. Para permitirlo:
- En la configuracion de Traefik de la aplicacion
- Activa la opcion Skip YAML Validation
Precauciones
- Sin validacion, un error de sintaxis en el YAML puede romper la configuracion de Traefik
- Verifica manualmente que la configuracion es correcta antes de guardar
- Revisa los logs de Traefik despues de guardar cambios:
docker logs dokploy-traefik --tail 50
Siguiente: Capitulo 15: Redes y Puertos —>