Volver al inicio
DevOps•

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: web

Para 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:

  1. Estar conectada a la red Docker web.
  2. Tener habilitada la integración con Traefik mediante etiquetas.
  3. Definir un router con la regla de dominio correspondiente.
  4. Indicar el punto de entrada y el mecanismo TLS.
  5. 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: true

5. 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 3

6. 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