diff --git a/README.md b/README.md index add07cb..94c6cee 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,52 @@ # Router Traefik para entorno Docker local -Traefik es un front-end que permite hacer _routing_ HTTP de los -servicios que tenemos corriendo localmente en contenedores -Docker. Según el dominio solicitado, Traefik determina a qué container -pasar la petición. +Traefik es un front-end que publica los servicios que tenemos +corriendo localmente en Docker. Según el dominio solicitado, Traefik +determina a qué container pasar la petición. ## Ejemplo Supongamos que tenemos corriendo en la máquina de desarrollo los contenedores: -* `kimkelen` (servicio HTTP en puerto 80) -* `peruvia` (servicio HTTP en puerto 8080) -* `wordpress` (servicio HTTP en puerto 80) + * `kimkelen` (servicio HTTP en puerto 80) + * `wordpress` (servicio HTTP en puerto 80) Traefik permite acceder a los contenedores locales en las direcciones -* http://kimkelen.lndo.site (80) -> container kimkelen (80) -* http://peruvia.lndo.site (80) -> container peruvia (8080) -* http://wordpress.lndo.site (80) -> container wordpress (80) + * http://kimkelen.lndo.site (80) -> container kimkelen (80) + * http://wordpress.lndo.site (80) -> container wordpress (80) Cualquier dominio `*.lndo.site` siempre apunta a localhost (127.0.0.1), por lo que no hay que configurar nada en `/etc/hosts`. ## Uso -Requerimiento: tener Docker y Docker Compose instalados. En +**Requerimiento**: tener Docker y Docker Compose instalados. En https://servicios.unl.edu.ar/gitlab/recursos/docker se encuentra una -receta Ansible para configurar estas herramientas en la PC de -desarrollo. +receta Ansible para configurar estas herramientas fácilmente en la PC +de desarrollo. -1. Clonar este repo: + 1. Clonar este repo: git clone https://servicios.unl.edu.ar/gitlab/recursos/traefik.git -2. Ejecutar Traefik: + 2. Ejecutar Traefik: cd traefik docker-compose up -d -3. Listo! Ahora puedo acceder a los containers locales en - http://NOMBRE-CONTAINER.lndo.site + 3. Listo! Ahora puedo acceder a los containers locales en + http://NOMBRE-SERVICIO.lndo.site -La selección de `NOMBRE_CONTAINER` sigue una serie de reglas. Para +La selección de `NOMBRE-SERVICIO` sigue una serie de reglas. Para encontrar la URL asignada a un container, ingresar a http://traefik.lndo.site y revisar el listado que aparece. -## Gotchas +## Particularidades + +A la hora de configurar un nuevo servicio hay que tener en cuenta las +siguientes particularidades. ### Conexión a la red de Traefik @@ -79,10 +79,17 @@ routear el tráfico interno. ### Puerto a publicar -Traefik usa el primer puerto expuesto por el contenedor. De ser -necesario, se puede setear en dicho contenedor la _label_ -`traefik.http.services.CONTAINER.loadbalancer.server.port=PUERTO"` -para cambiar este comportamiento. +Traefik usa el primer puerto expuesto por el contenedor (la primera +instrucción EXPOSE dentro del Dockerfile). De ser necesario, se puede +personalizar este valor configurando el servicio de la siguiente +manera: + + services: + app: + image: ... + # ... + labels: + traefik.http.services.CONTAINER.loadbalancer.server.port=PUERTO * `CONTAINER` es un nombre único para el servicio del contenedor, se recomienda usar el mismo nombre que el container. @@ -90,9 +97,9 @@ para cambiar este comportamiento. * `PUERTO` es el puerto en el que el contenedor escucha peticiones HTTP. -### Cambiar dominio de un container +### Dominio de un container -Para cambiar el dominio donde atiende un servicio, editar el servicio +Para setear el dominio donde atiende un servicio, editar el servicio correspondiente en `docker-compose.yml`: services: @@ -102,14 +109,14 @@ correspondiente en `docker-compose.yml`: labels: traefik.http.routers.CONTAINER.rule=Host(`miservicio.lndo.tite`) -### Routear según dominio + path +### Path donde atiende un servicio -Si deseo que API1 atienda todas las peticiones `/api/v1/` y WEBAPP -atienda en cualquier otro path, ambas para un mismo dominio -`miservicio.lndo.site`, setear en API1 la _label_: +Si quiero que mi aplicación atienda en un path diferente de / debo +agregar la opción PathPrefix a la regla de ruteo: - traefik.http.routers.API1.rule=Host(`miservicio.lndo.site`) && PathPrefix(`/api/v2`) - -y en WEBAPP: - - traefik.http.routers.API1.rule=Host(`miservicio.lndo.site`) + services: + app: + image: ... + # ... + labels: + traefik.http.routers.CONTAINER.rule=Host(`miservicio.lndo.tite`) && PathPrefix(`/path/app`)