¿Por qué poner Traefik al frente de su VPS?
Cuando ejecuta varias aplicaciones en contenedores sobre un mismo VPS, gestionar manualmente los virtual hosts de Nginx y renovar cada certificado se vuelve rápidamente inmanejable. Traefik resuelve ese problema leyendo directamente los labels de sus contenedores Docker: usted declara una ruta en el momento del docker run o en su docker-compose.yml, y Traefik la configura en caliente, genera el certificado Let's Encrypt y la expone por HTTPS. Ningún archivo de configuración que editar, ningún reload: todo es dinámico.
Lo que Traefik aporta en concreto en un VPS
- Descubrimiento automático de los contenedores Docker mediante el provider Docker (las rutas aparecen sin reiniciar)
- Certificados SSL Let's Encrypt generados y renovados automáticamente (HTTP-01 o DNS-01)
- Enrutamiento por dominio y por ruta, gestionado íntegramente mediante los labels Docker
- Dashboard web integrado para visualizar routers, servicios y middlewares en tiempo real
- Middlewares listos para usar: redirección HTTPS, basic auth, rate limiting, cabeceras de seguridad
- Balanceo de carga automático cuando escala un servicio a varias réplicas
Requisitos previos
Traefik en sí es muy ligero: 1 vCPU y 1 GB de RAM bastan de sobra para el proxy solo, ya que el sobrecoste viene de sus aplicaciones que están detrás. Prevea un VPS con Docker Engine y el plugin Docker Compose v2 instalados, un nombre de dominio cuyos registros A/AAAA apunten a la IP del VPS, y los puertos 80 y 443 abiertos en su cortafuegos (UFW). Para los certificados wildcard, también necesitará un acceso a la API de su proveedor de DNS.
Desplegar Traefik con Docker Compose
Crear la red y la estructura de carpetas
Cree una red Docker compartida que usarán Traefik y sus aplicaciones:
docker network create proxy. Cree una carpetatraefik/que contenga un archivoacme.json(el almacén de los certificados) con los permisos correctos:touch acme.json && chmod 600 acme.json. Sin esos permisos restringidos, Traefik se negará a utilizarlo.Configurar los entrypoints y el resolutor ACME
En el
docker-compose.yml, declare dos entrypoints (weben :80,websecureen :443) y un certificateResolver de Let's Encrypt con su correo y el challengehttpChallenge. Monte el socket de Docker en solo lectura (/var/run/docker.sock:/var/run/docker.sock:ro) para que Traefik descubra los contenedores, y también el volumenacme.json.Forzar la redirección de HTTP a HTTPS
Añada un middleware global de redirección en el entrypoint
webmediante los labels:traefik.http.routers.http-catchall.middlewares=redirect-to-https. Así todo el tráfico en claro pasa automáticamente a HTTPS, el comportamiento esperado en producción.Asegurar el dashboard
Exponga el dashboard en un subdominio (
traefik.sudominio.com) protegido por un middlewarebasicauth. Genere el hash conhtpasswd -nb admin contrasenay colóquelo en el labeltraefik.http.middlewares.auth.basicauth.users. No deje nunca el flag--api.insecure=trueen producción.Lanzar Traefik
Arranque el stack:
docker compose up -d. Compruebe los logs condocker compose logs -f traefikpara confirmar la conexión con Let's Encrypt y la ausencia de errores ACME (cuidado con el rate limit de Let's Encrypt en fase de pruebas: utilice el servidor de staging).Conectar una aplicación
Para exponer un servicio, conéctelo a la red
proxyy añada sus labels:traefik.enable=true,traefik.http.routers.app.rule=Host(\app.sudominio.com\),traefik.http.routers.app.entrypoints=websecureytraefik.http.routers.app.tls.certresolver=letsencrypt. Traefik enruta y certifica la aplicación en unos segundos.
Para obtener un certificado wildcard (*.sudominio.com) y evitar exponer cada subdominio, pase del httpChallenge al dnsChallenge. Configure el provider DNS (Cloudflare, OVH, etc.) mediante las variables de entorno (por ejemplo CF_API_EMAIL, CF_DNS_API_TOKEN): Traefik demuestra la propiedad del dominio con un registro TXT, lo que funciona incluso para servicios que no están expuestos públicamente.