Un servidor cloud te da libertad para desplegar aplicaciones, automatizaciones y bases de datos. Pero esa libertad también exige criterio operativo: publicar servicios de forma ordenada, proteger el tráfico con HTTPS y evitar configuraciones difíciles de mantener.
En esta guía vas a ver una implementación práctica para publicar contenedores con Traefik, Docker labels y certificados Let's Encrypt, con comandos orientados a Ubuntu/Debian, puntos de verificación y advertencias para no comprometer disponibilidad ni seguridad.
La idea no es memorizar comandos sueltos, sino construir un flujo repetible: preparar el servidor, configurar Traefik, habilitar certificados automáticos, publicar una aplicación y validar que todo funcione correctamente.
¿Qué es Traefik?
Traefik es un reverse proxy dinámico que puede leer labels de Docker y crear rutas HTTP automáticamente. Con ACME, también puede solicitar y renovar certificados Let's Encrypt sin tener que gestionar cada certificado de forma manual.
¿Cuándo conviene usarlo?
Traefik resulta útil cuando necesitas publicar varias aplicaciones Docker desde un mismo servidor y quieres evitar una configuración manual de proxy por cada servicio.
Conviene especialmente si:
- Tienes varias apps Docker con dominios separados.
- Quieres reducir configuraciones manuales de NGINX por aplicación.
- Necesitas certificados automáticos y despliegues repetibles.
- Buscas una forma más clara de administrar rutas, servicios y TLS desde Docker Compose.
Requisitos previos
Antes de empezar, asegúrate de contar con:
- Un Cloud Server con Docker y Docker Compose.
- Dominios apuntando a la IP pública del servidor.
- Puertos 80 y 443 disponibles.
- Conocimiento básico de redes Docker.
Puertos necesarios
80/tcp443/tcp8080/tcp, solo interno si usas dashboard
Paso 1: Preparar la red proxy
Primero, crea una red Docker compartida entre Traefik y las aplicaciones que vas a publicar.
docker network create proxydocker network lsEsta red permite que Traefik pueda comunicarse con los contenedores que expongan servicios web.
Advertencia: no conectes bases de datos a la red pública del proxy si no lo necesitan.

Paso 2: Crear el compose de Traefik

Luego, prepara el directorio de trabajo y crea el archivo docker-compose.yml de Traefik.
mkdir -p /opt/traefiknano docker-compose.ymldocker compose configEn esta etapa, Traefik debe quedar configurado con Docker provider y los entrypoints web y websecure.
Advertencia: montar el socket de Docker le da mucho poder al contenedor de Traefik. Limita el acceso al host y evita exponer servicios innecesarios.
Paso 3: Configurar ACME para Let's Encrypt
Traefik puede gestionar certificados automáticamente mediante ACME. Para eso, necesita un archivo donde guardar la información de los certificados.
touch acme.jsonchmod 600 acme.jsondocker compose up -dEl permiso 600 evita que otros usuarios del sistema puedan leer el contenido del archivo.
Advertencia: acme.json contiene material sensible. Respalda el archivo y protege sus permisos.

Paso 4: Agregar labels a una aplicación
Una vez que Traefik está funcionando, puedes publicar una aplicación por dominio usando routers y services definidos mediante Docker labels.
nano app/docker-compose.ymldocker compose up -ddocker compose logs traefik --tail=100Las labels permiten que Traefik detecte el contenedor, cree la ruta correspondiente y lo asocie al dominio configurado.

Advertencia: el dominio debe apuntar al servidor antes de solicitar el certificado.
Paso 5: Probar rutas, HTTPS y estado de los servicios
Después de levantar la z, verifica que el dominio responda por HTTPS y revisa los logs de Traefik.
curl -I https://app.example.comdocker logs traefik --tail=100docker compose psTambién conviene comprobar que el dashboard, si está habilitado, no quede expuesto públicamente.
Advertencia: no publiques el dashboard de Traefik sin autenticación o restricción por IP/VPN.

Reforzar seguridad
Antes de dar por terminado el despliegue, revisa tres puntos:
- Que el servicio público sea realmente el que querías publicar.
- Que los puertos internos no hayan quedado expuestos.
- Que los secretos no estén en archivos versionados o historiales de shell.
Si el procedimiento toca bases de datos, runners, automatizaciones o certificados, prueba primero en un entorno secundario.
También conviene documentar cómo se reinicia el servicio, cómo se actualiza, dónde están los logs y cuál es el comando de verificación rápida. Esa información vale mucho cuando otra persona del equipo tiene que intervenir.
Problemas frecuentes
No emite certificado
Revisa DNS, puertos 80/443 y logs del resolver ACME.
El router no aparece
Confirma las labels, la red compartida y que traefik.enable=true esté definido
Error 502 Bad Gateway
Revisa que Traefik pueda llegar al puerto interno correcto del contenedor.