Traefik es un proxy inverso dinámico pensado para contenedores. A diferencia de los servidores clásicos, Traefik puede conectarse a la API de Docker para detectar cuándo se encienden o apagan tus contenedores, creando las reglas de enrutamiento de forma automática y sin reiniciar el proxy.
En el artículo anterior aprendimos a usar Nginx como Proxy Inverso. Fue un gran paso: logramos alojar múltiples aplicaciones en un mismo servidor eliminando la colisión de puertos.
Pero si lo has puesto en práctica, te habrás dado cuenta de un problema bastante molesto: el mantenimiento. Cada vez que quieres añadir un nuevo servicio (una API, un panel de control, un blog), tienes que abrir el archivo nginx.conf, escribir un nuevo bloque server a mano, guardar el archivo y ejecutar un comando para que Nginx recargue la configuración.
En un entorno moderno donde los contenedores suben, bajan y se escalan constantemente, editar archivos a mano se vuelve bastante incómodo.
Necesitamos algo que reaccione al instante. Ese papel lo cumple Traefik 👇.
El fin de los archivos de configuración
El secreto de Traefik radica en su capacidad de “Auto-descubrimiento”.
En lugar de darle a Traefik un archivo de texto con las rutas, le vamos a dar acceso al socket de Docker (el canal de comunicación interno del motor de Docker). Al hacer esto, Traefik se queda observando en silencio.
Cuando ejecutas un docker compose up para lanzar una nueva aplicación, Traefik se da cuenta inmediatamente e inspecciona ese nuevo contenedor. Si el contenedor tiene las instrucciones adecuadas, Traefik le abre la puerta hacia internet en milisegundos.
El poder de las etiquetas
Si no hay archivo de configuración, ¿cómo sabe Traefik a qué dominio debe responder un contenedor? La respuesta está en los Labels.
Las etiquetas son simples metadatos que podemos añadir a cualquier contenedor en nuestro docker-compose.yml. En lugar de centralizar la configuración en el proxy, la descentralizamos. Cada aplicación declara sus propias reglas de enrutamiento de forma independiente.
Vamos a ver cómo se monta esta arquitectura:
services:
# 1. Nuestro Portero Dinámico (Traefik)
traefik:
image: traefik:v3.5
command:
- "--api.insecure=true" # Habilita el panel de control web
- "--providers.docker=true" # Le decimos que escuche a Docker
- "--providers.docker.exposedbydefault=false" # Por seguridad, no expongas todo
- "--entrypoints.web.address=:80" # Escucha tráfico HTTP normal
ports:
- "80:80" # Tráfico web
- "8080:8080" # Panel de control de Traefik (solo para desarrollo)
volumes:
# Le damos acceso de solo lectura al motor de Docker
- /var/run/docker.sock:/var/run/docker.sock:ro
# 2. Nuestra Aplicación Web
mi_web:
image: nginx:alpine
# No exponemos puertos, usamos Labels
labels:
- "traefik.enable=true" # Autorizamos a Traefik a enrutar este contenedor
- "traefik.http.routers.miweb.rule=Host(`web.midominio.com`)" # La regla de dominio
- "traefik.http.services.miweb.loadbalancer.server.port=80" # Puerto interno del servicio
Montar /var/run/docker.sock en un contenedor da mucha visibilidad sobre Docker. Aunque lo montemos como solo lectura, Traefik podrá inspeccionar contenedores y etiquetas. Usadlo con imágenes de confianza y no expongáis el dashboard alegremente en internet.
Analizando el funcionamiento
Si levantas el archivo anterior con docker compose up -d, ocurrirá la siguiente secuencia:
Traefik arranca y se engancha al socket de Docker (/var/run/docker.sock).
El contenedor mi_web arranca.
Traefik ve a mi_web y lee sus labels.
Traefik procesa la etiqueta Host(`web.midominio.com`) y crea una regla interna: “cualquier petición a web.midominio.com debe ir al contenedor mi_web”.
Todo en tiempo real. Cero interrupciones.
Si dentro de 5 minutos decides añadir otro servicio en ese mismo archivo (por ejemplo, una API), solo tienes que agregarle dos líneas de etiquetas con el host api.midominio.com. Al levantarla, Traefik la enrutará sin que el proxy se entere de que nada ha cambiado y sin tirar abajo tu web principal.
El Dashboard integrado
Traefik viene con un panel de control visual integrado de fábrica. En el ejemplo de arriba lo hemos expuesto en el puerto 8080.
Si entras a la IP de tu servidor en el puerto 8080, verás una interfaz gráfica que te mostrará en tiempo real qué contenedores ha descubierto Traefik, qué dominios tienen asignados y cuál es el estado de la red interna. Es una herramienta muy útil para depurar cuando algo no enruta correctamente.
