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:
- Docker: Para contenerizar sus aplicaciones.
- Docker Compose: Para gestionar aplicaciones Docker multicontenedor.
- 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:
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.
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.
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.
Equilibrio de la carga: Traefik puede distribuir el tráfico entre múltiples instancias de un servicio, proporcionando equilibrio de carga para sus aplicaciones.
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
- API y servicios de terceros: Muchas API y servicios de terceros requieren HTTPS. Sin una configuración SSL adecuada, es posible que se produzcan errores al integrar estos servicios localmente.
- Conflictos de dominio: El uso de nombres de dominio personalizados con Traefik ayuda a evitar conflictos entre los servicios que se ejecutan en diferentes puertos.
- Advertencias de seguridad: Los navegadores suelen mostrar advertencias de seguridad para los certificados autofirmados. mkcert crea certificados de confianza para su máquina local, eliminando estas advertencias.
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.
- En macOS: Abra el
.pemcon Acceso a Llaveros y añádalo a su Llavero de Sistema o de Inicio de Sesión. Asegúrese de marcar el certificado como de confianza. - En Windows: Ejecutar
certutil -addstore -f "ROOT" example.com+1.pemen la línea de comandos como administrador. - En Linux: El método para añadir certificados de confianza puede variar según la distribución. Un método común es copiar el archivo
.pemarchivo a/usr/local/share/ca-certificates/y luego ejecutesudo update-ca-certificates.


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!