Si buscas gestionar múltiples servicios Docker con un proxy inverso moderno, traefik docker compose es la solución perfecta para automatizar el enrutamiento de tráfico y la gestión de certificados SSL. En esta guía completa aprenderás a configurar Traefik con Docker Compose para crear una infraestructura profesional y escalable en minutos.
¿Qué es Traefik Docker Compose?
Traefik es un proxy inverso y balanceador de carga de código abierto diseñado específicamente para arquitecturas de microservicios. Con más de 59.800 estrellas en GitHub y 3.300 millones de descargas, se ha convertido en la opción preferida para gestionar servicios containerizados.
A diferencia de soluciones tradicionales como Nginx, este proxy moderno descubre automáticamente los servicios de Docker sin requerir reinicios ni interrupciones de conexión. Funciona como intermediario que recibe peticiones HTTP/HTTPS y las enruta dinámicamente al contenedor correcto.
La configuración con Docker Compose simplifica enormemente el despliegue, permitiendo definir toda la infraestructura en un único archivo YAML. Esto incluye entrypoints, routers, middlewares y la integración automática con Let’s Encrypt para certificados SSL gratuitos.
Ventajas de usar Traefik Docker Compose
La principal ventaja es la configuración automática sin reinicios. Cuando despliegas un nuevo contenedor con las etiquetas adecuadas, el sistema detecta automáticamente el servicio y actualiza las rutas en tiempo real.
Los certificados SSL se renuevan automáticamente gracias a la integración nativa con Let’s Encrypt. Soporta certificados wildcard, HTTP-01 y DNS-01 challenges, eliminando la gestión manual de certificados.
Incluye un dashboard web accesible que muestra todos los routers, servicios, middlewares y entrypoints en tiempo real. Esta interfaz facilita el monitoreo y debugging sin necesidad de revisar archivos de configuración.
Otras ventajas destacadas incluyen:
- Soporte nativo para WebSocket, HTTP/2 y gRPC
- Múltiples algoritmos de balanceo de carga
- Circuit breakers y mecanismos de retry automáticos
- Exportación de métricas a Prometheus, Datadog, InfluxDB
- Middleware para autenticación, rate limiting, compresión
- API REST completa para integración programática
Requisitos previos para Traefik Docker Compose
Antes de comenzar la instalación, asegúrate de cumplir estos requisitos básicos:
- Docker Engine versión 20.10 o superior instalado
- Docker Compose versión 2.0 o superior
- Acceso root o permisos sudo en el servidor
- Puertos 80 y 443 disponibles y accesibles desde internet
- Nombre de dominio apuntando a tu servidor (para certificados SSL)
- Al menos 512 MB de RAM disponible
Para verificar las versiones instaladas, ejecuta:
docker --version
docker compose version
Configuración básica de Traefik Docker Compose
Vamos a crear una configuración funcional paso a paso. Primero, crea un directorio para el proyecto:
mkdir -p ~/traefik
cd ~/traefik
Crea el archivo docker-compose.yml con esta configuración inicial:
version: '3.9'
services:
traefik:
image: traefik:v3.6
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
ports:
- "80:80"
- "443:443"
- "8080:8080"
environment:
- TZ=Europe/Madrid
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./acme.json:/acme.json
- ./config:/config:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http"
- "traefik.http.routers.traefik.rule=Host(`traefik.tudominio.com`)"
- "traefik.http.routers.traefik.service=api@internal"
networks:
proxy:
external: true
Ahora crea el archivo de configuración traefik.yml:
api:
dashboard: true
insecure: true
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: proxy
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: acme.json
httpChallenge:
entryPoint: http
log:
level: INFO
filePath: /var/log/traefik/traefik.log
accessLog:
filePath: /var/log/traefik/access.log
Crea el archivo para almacenar certificados SSL y configura los permisos correctos:
touch acme.json
chmod 600 acme.json
mkdir config
Crea la red de Docker que usarán los servicios:
docker network create proxy
Configuración avanzada con SSL automático
Para habilitar SSL automático con certificados wildcard, actualiza la sección certificatesResolvers en el archivo traefik.yml. Esta configuración requiere validación DNS, por lo que necesitas configurar las credenciales de tu proveedor DNS.
Ejemplo con Cloudflare:
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: acme.json
dnsChallenge:
provider: cloudflare
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
Añade las variables de entorno de Cloudflare al servicio en docker-compose.yml:
environment:
- TZ=Europe/Madrid
- [email protected]
- CF_DNS_API_TOKEN=tu_token_api
Consulta la documentación oficial de proveedores DNS para configurar otros servicios como Route53, DigitalOcean, o Google Cloud DNS.
Ejemplo práctico: Desplegar aplicación con Traefik Docker Compose
Vamos a desplegar un servicio de ejemplo para demostrar cómo funciona la integración. Crea un nuevo archivo docker-compose-whoami.yml:
version: '3.9'
services:
whoami:
image: traefik/whoami:latest
container_name: whoami
restart: unless-stopped
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.tudominio.com`)"
- "traefik.http.routers.whoami.entrypoints=https"
- "traefik.http.routers.whoami.tls=true"
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
networks:
proxy:
external: true
Las etiquetas de Docker definen cómo el proxy debe enrutar el tráfico:
traefik.enable=trueactiva el enrutamiento para este contenedorrule=Host()define el dominio que activará este routerentrypoints=httpsusa el puerto 443 configurado anteriormentetls.certresolversolicita automáticamente el certificado SSLloadbalancer.server.portindica el puerto interno del contenedor
Inicia ambos servicios:
docker compose up -d
docker compose -f docker-compose-whoami.yml up -d
Accede a https://whoami.tudominio.com y verás la aplicación funcionando con SSL automático. El certificado se solicita, valida e instala sin intervención manual.
Middlewares útiles para Traefik Docker Compose
Los middlewares son componentes que procesan las peticiones antes de enviarlas al servicio final. Permiten añadir autenticación, compresión, rate limiting y más funcionalidades.
Crea el archivo config/middlewares.yml con estas configuraciones útiles:
http:
middlewares:
# Autenticación básica
auth:
basicAuth:
users:
- "admin:$apr1$xyz$hashedpassword"
# Rate limiting
rate-limit:
rateLimit:
average: 100
burst: 50
period: 1s
# Redirección a HTTPS
redirect-https:
redirectScheme:
scheme: https
permanent: true
# Compresión
compression:
compress: {}
# Headers de seguridad
security-headers:
headers:
frameDeny: true
sslRedirect: true
browserXssFilter: true
contentTypeNosniff: true
stsIncludeSubdomains: true
stsPreload: true
stsSeconds: 31536000
Para aplicar middlewares a un servicio, añade estas etiquetas:
labels:
- "traefik.http.routers.servicio.middlewares=auth@file,compression@file,security-headers@file"
Genera el hash de contraseña para autenticación básica con:
echo $(htpasswd -nb admin tupassword) | sed -e s/\$/\$\$/g
Monitorización y dashboard
El dashboard web proporciona visibilidad completa de la infraestructura en tiempo real. Accede a http://tu-servidor:8080/dashboard/ para ver:
- Lista de todos los routers HTTP/TCP/UDP activos
- Servicios descubiertos automáticamente
- Middlewares configurados y su estado
- Entrypoints y puertos expuestos
- Certificados TLS activos y su fecha de expiración
- Métricas de salud de cada backend
Para producción, protege el dashboard con autenticación añadiendo estas etiquetas al contenedor principal:
labels:
- "traefik.http.routers.traefik.middlewares=auth@file"
Para integrar con Prometheus y obtener métricas detalladas, añade en traefik.yml:
metrics:
prometheus:
addEntryPointsLabels: true
addRoutersLabels: true
addServicesLabels: true
entryPoint: metrics
Consulta la documentación de métricas de Traefik para configuración avanzada.
Solución de problemas comunes
Si los servicios no son detectados automáticamente, verifica que el contenedor esté en la red proxy y tenga traefik.enable=true. Revisa los logs con:
docker logs traefik
Si los certificados SSL no se generan, confirma que:
- El dominio apunta correctamente a tu servidor
- Los puertos 80 y 443 están accesibles desde internet
- El archivo
acme.jsontiene permisos 600 - El email en la configuración es válido
Para errores de permisos con el socket de Docker, añade el usuario al grupo docker:
sudo usermod -aG docker $USER
newgrp docker
Si experimentas problemas con redirecciones infinitas, verifica que no haya conflictos entre middlewares de redirección y la configuración del entrypoint.
Preguntas frecuentes sobre Traefik Docker Compose
¿Traefik es mejor que Nginx Proxy Manager?
Ambas soluciones son excelentes, pero destacan en diferentes escenarios. Esta herramienta sobresale en entornos dinámicos con servicios que cambian frecuentemente, ya que detecta automáticamente contenedores nuevos sin configuración manual. Nginx Proxy Manager ofrece una interfaz gráfica más amigable para usuarios menos técnicos. Para arquitecturas de microservicios y entornos Kubernetes, Traefik es la opción más robusta.
¿Cuánta RAM consume Traefik?
El consumo base de RAM es de aproximadamente 50-80 MB sin servicios configurados. Con 10-20 servicios activos, el uso típico ronda los 100-150 MB. Este bajo consumo lo hace ideal para servidores con recursos limitados como Raspberry Pi o VPS pequeños.
¿Puedo usar Traefik con servicios que no son Docker?
Sí, el sistema soporta múltiples proveedores además de Docker. Puedes configurar servicios estáticos en archivos YAML, integrar con Kubernetes, Consul, Etcd, o definir backends HTTP/TCP manualmente. La configuración de archivos permite enrutar tráfico a cualquier servidor, independientemente de si está containerizado.
¿Cómo renuevo los certificados SSL automáticamente?
La renovación es completamente automática cuando usas el resolver de Let’s Encrypt configurado. El software verifica diariamente los certificados próximos a expirar (30 días antes) y los renueva sin intervención. No necesitas configurar cron jobs ni scripts adicionales.
¿Puedo balancear carga entre múltiples contenedores del mismo servicio?
Absolutamente. Si escalas un servicio a múltiples réplicas con docker compose up --scale servicio=3, la aplicación distribuye automáticamente las peticiones entre todas las instancias usando round-robin por defecto. Puedes configurar otros algoritmos como weighted round-robin o least connections en la configuración del servicio.
Conclusión
Configurar traefik docker compose proporciona una infraestructura moderna, automática y escalable para gestionar servicios containerizados. La integración nativa con Docker, los certificados SSL automáticos y el descubrimiento dinámico de servicios eliminan la complejidad de las configuraciones manuales tradicionales.
Con el conocimiento adquirido en esta guía, puedes desplegar un proxy inverso profesional que gestione decenas de servicios con mínimo mantenimiento. La configuración basada en etiquetas y la actualización sin reinicios hacen de esta solución la opción ideal para homelab, producción o entornos de desarrollo.
Para más tutoriales sobre Docker Compose y herramientas de automatización, visita la categoría Docker Compose donde encontrarás guías similares de servicios self-hosted.
