Respuesta rápida: Traefik lee las labels de cada contenedor y publica la app por dominio con un certificado de Let’s Encrypt. Todo empieza por una red compartida y un acme.json protegido:
docker network create proxy
docker network ls
touch acme.json
chmod 600 acme.json
docker compose up -dComprueba el HTTPS con curl -I https://app.example.com y, si el certificado no llega, revisa docker logs traefik --tail=100.
Nivel: intermedio · Requiere: servidor con Docker y Docker Compose, un dominio apuntando a su IP y los puertos 80 y 443 abiertos
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 proxy
docker 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/traefik
nano docker-compose.yml
docker 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.json
chmod 600 acme.json
docker 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.yml
docker compose up -d
docker 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.com
docker logs traefik --tail=100
docker 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.