Configuración de Traefik v3.6 (Desarrollo local y producción)
Este repositorio contiene la configuración base para desplegar Traefik v3.6 como proxy inverso mediante Docker. Está diseñado para funcionar tanto en un entorno de desarrollo local como en un servidor VPS de producción, permitiendo gestionar el acceso a diferentes aplicaciones y habilitar conexiones HTTPS mediante certificados de Let's Encrypt.
1. Requisitos previos
Antes de iniciar, asegúrate de tener instalados los siguientes componentes:
- Docker: para ejecutar los contenedores.
- Docker Compose: para definir y administrar los servicios.
- Traefik v3.6: configurado mediante el archivo
docker-compose.yml.
Además, es necesario crear una red externa de Docker que permita la comunicación entre Traefik y las aplicaciones que se publicarán a través del proxy.
Ejecuta el siguiente comando:
docker network create web
Esta red se utilizará para conectar Traefik con los contenedores de las aplicaciones.
2. Preparación del archivo de certificados SSL/TLS
Traefik utiliza Let's Encrypt para obtener y renovar automáticamente los certificados SSL/TLS. Para almacenar la información de estos certificados, se utiliza el archivo acme.json.
Crear el archivo
Desde la raíz del proyecto, ejecuta:
touch acme.json
Configurar los permisos
Por motivos de seguridad, Traefik requiere que este archivo tenga permisos restrictivos. Configúralos con el siguiente comando:
chmod 600 acme.json
Estos permisos permiten que únicamente el propietario del archivo pueda leerlo y modificarlo.
Importante: El archivo acme.json contiene información sensible relacionada con los certificados y las claves privadas. Nunca lo subas a un repositorio público ni lo compartas con terceros.
Para evitar que Git lo incluya en los commits, agrega lo siguiente a tu archivo .gitignore:
acme.json
Si el archivo ya estaba siendo rastreado por Git, tendrás que dejar de rastrearlo antes de que esta regla tenga efecto:
git rm --cached acme.json
Este comando elimina el archivo del seguimiento de Git, pero conserva el archivo local.
3. Configuración de los entornos
El proyecto está preparado para utilizarse en dos escenarios: desarrollo local y producción.
3.1. Entorno local
En el entorno local, Traefik permite probar la configuración y verificar el funcionamiento del proxy sin necesidad de publicar las aplicaciones en Internet.
Los accesos configurados son:
- Dashboard de Traefik: http://localhost:8081
- Puerto web: http://localhost:8002
Estas direcciones corresponden a los puertos publicados en el archivo docker-compose.yml. Si modificas la configuración, las direcciones también pueden cambiar.
Recomendación: utiliza el dashboard únicamente en entornos de confianza. No lo expongas públicamente sin configurar los mecanismos de autenticación y protección adecuados.
3.2. Entorno de producción (VPS)
Para desplegar Traefik en un servidor VPS y habilitar HTTPS, es necesario adaptar el archivo docker-compose.yml a las condiciones del entorno de producción.
Paso 1. Configurar la redirección HTTP a HTTPS
En la configuración del punto de entrada web, habilita la redirección hacia websecure. Esto permite que las solicitudes recibidas mediante HTTP se redirijan a HTTPS.
Paso 2. Configurar Let's Encrypt
Habilita la sección certificatesresolvers y configura el proveedor ACME para obtener certificados automáticamente. Sustituye el correo de ejemplo por una dirección válida:
certificatesResolvers:
myresolver:
acme:
email: tu-email@correo.com
storage: /acme.json
httpChallenge:
entryPoint: webPara que el desafío HTTP-01 funcione, el dominio debe apuntar al servidor y el puerto 80 debe ser accesible desde Internet.
Paso 3. Verificar los puertos
Comprueba que los puertos 80 y 443 estén disponibles en el VPS y que el firewall permita el tráfico correspondiente:
- Puerto 80: recepción de solicitudes HTTP y validación HTTP-01.
- Puerto 443: recepción de conexiones HTTPS.
Paso 4. Configurar los DNS
Crea un registro de tipo A que apunte el dominio a la dirección IPv4 pública del VPS (o AAAA para IPv6).
4. Publicación de nuevas aplicaciones
Traefik puede detectar automáticamente los contenedores Docker y dirigir el tráfico hacia ellos mediante routers y servicios. Cada aplicación debe cumplir con:
- Estar conectada a la red Docker
web. - Tener habilitada la integración con Traefik mediante etiquetas.
- Definir un router con la regla de dominio correspondiente.
- Indicar el punto de entrada y el mecanismo TLS.
- Especificar el puerto interno si no es detectado automáticamente.
Ejemplo de configuración
services:
mi-app:
image: nginx:alpine
container_name: mi-app
restart: unless-stopped
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.mi-app.rule=Host(`tudominio.com`)"
- "traefik.http.routers.mi-app.entrypoints=websecure"
- "traefik.http.routers.mi-app.tls=true"
- "traefik.http.routers.mi-app.tls.certresolver=myresolver"
- "traefik.http.services.mi-app.loadbalancer.server.port=80"
networks:
web:
external: true5. Arquitectura del sistema
El flujo de comunicación en producción funciona de la siguiente manera:
INTERNET
|
v
Dominio y DNS
|
v
Servidor VPS
|
v
Puertos 80/443
|
v
+--------------+
| Traefik |
| Proxy inverso|
+--------------+
|
Red Docker "web"
/ | \
v v v
App 1 App 2 App 36. Supervisión y depuración
Logs en tiempo real
docker logs -f traefik
Estado de contenedores
docker compose ps
Revisar Compose
docker compose config
Comprobar red Docker
docker network inspect web
7. Consideraciones de seguridad
- 🔒 Proteger acme.json: no subir a GitHub ni en Docker images.
- 🚫 Restringir Dashboard: no exponer sin autenticación.
- 🌐 Utilizar HTTPS: siempre con certificados válidos.
- 🧱 Proteger puertos: limitar tráfico vía firewall VPS.
8. Puesta en marcha
Para iniciar los servicios en segundo plano:
docker compose up -d