Configuración de Traefik y mkcert para el desarrollo local

Traefik es un potente proxy inverso HTTP y balanceador de carga que simplifica el despliegue de microservicios. Aunque es ampliamente utilizado en entornos de producción, Traefik también es increíblemente útil para el desarrollo local. Cuando se combina con mkcert, una herramienta para crear certificados de desarrollo de confianza a nivel local, puede crear un entorno de desarrollo seguro y sin fisuras que refleja la configuración de producción.

En esta guía, vamos a caminar a través de la configuración de Traefik y mkcert para el desarrollo local, centrándose en las características más relevantes y problemas comunes, tales como el uso de APIs o servicios de terceros que requieren HTTPS.

Requisitos previos

Antes de empezar, asegúrese de que tiene instalado lo siguiente en su máquina:

  1. Docker: Para contenerizar sus aplicaciones.
  2. Docker Compose: Para gestionar aplicaciones Docker multicontenedor.
  3. Red exterior: Crea una red Docker externa para conectar todos tus servicios. Puede crear la red externa con el siguiente comando:
docker network create web

Nota: Crear una red externa te permite conectar múltiples proyectos Docker Compose a la misma red. De esta manera, no necesita tener todos sus contenedores en un único archivo docker-compose.yml o en el mismo directorio. Le permite utilizar Traefik como un proxy a través de múltiples proyectos sin problemas.

¿Por qué utilizar Traefik y mkcert para el desarrollo local?

El uso conjunto de Traefik y mkcert tiene varias ventajas:

  1. Configuración simplificada: Traefik proporciona una forma sencilla de configurar las reglas de enrutamiento y gestionar el tráfico, utilizando archivos de configuración dinámicos que pueden actualizarse sin reiniciar el servidor.

  2. HTTPS automático con mkcert mkcert genera certificados SSL de confianza local para nombres de dominio personalizados, permitiéndole trabajar con conexiones HTTPS en su entorno local sin advertencias ni errores.

  3. Nombres de dominio personalizados: Traefik le permite definir nombres de dominio personalizados para sus servicios, lo que facilita la gestión local de varios proyectos.

  4. Equilibrio de la carga: Traefik puede distribuir el tráfico entre múltiples instancias de un servicio, proporcionando equilibrio de carga para sus aplicaciones.

  5. Soporte de middleware: Traefik soporta plugins de middleware que pueden modificar las peticiones y respuestas, añadir autenticación, limitación de velocidad y otras características.

Utilizando Traefik y mkcert, puede crear un entorno de desarrollo local que gestione múltiples servicios, garantice conexiones HTTPS seguras e imite las condiciones de producción.

Cuestiones comunes tratadas

Configuración del entorno

Esta guía describe cómo configurar su entorno para utilizar Traefik como proxy inverso con conexiones HTTPS. Asegúrese de tener docker-compose instalado para ejecutar los siguientes pasos.

Inicio rápido

Un Makefile puede simplificar el proceso de instalación. Puede ejecutar el siguiente comando desde el directorio raíz para instalar todas las dependencias e iniciar los servicios:

make install

Alternativamente, puede instalar cada componente individualmente navegando a cada directorio de servicio y ejecutando make install.

Archivos de configuración

docker-compose.yml

Para configurar Traefik y mkcert en su docker-compose.yml, incluyen la siguiente configuración:

services:
  mkcert:
    environment:
      - domain=*.home.com,*.site.com,*.local.com
    container_name: mkcert
    volumes:
      - ./certs/:/root/.local/share/mkcert
    image: vishnunair/docker-mkcert
    labels:
      - 'traefik.enable=false'
    networks:
      - web

  traefik:
    image: traefik:latest
    container_name: traefik
    ports:
      - '80:80'
      - '443:443'
      - '8080:8080'
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - './config/traefik.yml:/etc/traefik/traefik.yml:ro'
      - './config/dynamic.yml:/etc/traefik/dynamic.yml:ro'
      - './certs/:/etc/certs:ro'
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.traefik.rule=Host(`traefik.home.com`)'
      - 'traefik.http.routers.traefik.entrypoints=https'
      - 'traefik.http.routers.traefik.tls=true'
      - 'traefik.http.routers.traefik.service=traefik@docker'
      - 'traefik.http.services.traefik.loadbalancer.server.port=8080'
    networks:
      - web

networks:
  web:
    external: true

traefik.yml

El archivo de configuración principal de Traefik, traefik.yml debe incluir lo siguiente:

global:
  sendAnonymousUsage: false

api:
  dashboard: true
  insecure: true

providers:
  docker:
    endpoint: 'unix:///var/run/docker.sock'
    watch: true
    exposedByDefault: false

  file:
    filename: /etc/traefik/dynamic.yml
    watch: true

log:
  level: INFO
  format: common

entryPoints:
  http:
    address: ':80'
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https
  https:
    address: ':443'

dynamic.yml

Archivo de configuración dinámica de Traefik, dynamic.yml debe incluir la información del certificado TLS:

tls:
  certificates:
    - certFile: '/etc/certs/_wildcard.home.com.pem'
      keyFile: '/etc/certs/_wildcard.home.com-key.pem'
    - certFile: '/etc/certs/_wildcard.site.com.pem'
      keyFile: '/etc/certs/_wildcard.site.com-key.pem'
    - certFile: '/etc/certs/_wildcard.local.com.pem'
      keyFile: '/etc/certs/_wildcard.local.com-key.pem'

Modificar el archivo Hosts

Para encaminar correctamente los dominios a su entorno local, añada las siguientes entradas a su archivo hosts archivo:

127.0.0.1       traefik.home.com
127.0.0.1       whoami.home.com
127.0.0.1       laravel1.site.com
127.0.0.1       laravel2.site.com
127.0.0.1       laravel3.local.com
127.0.0.1       laravel4.local.com

Añadir certificados al almacén de certificados de confianza

Para evitar las advertencias de seguridad en su navegador, debe añadir la propiedad .pem a su almacén de certificados de confianza.

step1
step1

Conclusión

Siguiendo estos pasos y configuraciones, puede configurar de forma efectiva Traefik y mkcert para gestionar múltiples servicios y conexiones HTTPS seguras en su entorno de desarrollo local. Esta configuración no sólo imita un entorno de producción, sino que también asegura que usted puede integrar sin problemas los servicios de terceros y APIs que requieren HTTPS. Con las potentes capacidades de enrutamiento de Traefik y la generación de certificados fácil de usar de mkcert, su proceso de desarrollo local será más eficiente, seguro y organizado.

Para más detalles y la configuración completa, puede consultar el repositorio.

Siéntase libre de personalizar las configuraciones y explorar las características adicionales de Traefik para mejorar aún más su configuración de desarrollo. ¡Feliz programación!