Menú Cerrar

[Rancher Server 3] — Agregando un stack para alojar un App

Imaginemos que en nuestro ambiente vamos a colocar una aplicación que usa el siguiente stack

  • Loopback como backend
  • React como Frontend
  • Mongo como DB

Cada uno de estos componentes están separados y escalan independiente, cada uno tiene su imagen de docker y queremos publicar la version de pruebas o staging en nuestro servidor Rancher.

Para lograr esto vamos a crear algo llamado un Stack, veamos esto como una forma de agrupar servicios de una misma aplicación donde el backend, el frontend y la base de datos son servicios independientes. Para esto vamos a ingresar a el UI de nuestro servidor Rancher y vamos a ir a stacks

Hacemos click en Add Stack y eso nos a pedir los siguiente datos:

Vamos a darle el nombre y la descripción a nuestro stack, como vamos a usar un proyecto que vimos en uno de los live coding y era un API de libros, vamos a llamar a nuestro stack booksApp

Al hacer click en create quedaremos dentro del Stack listos para agregar los servicios.

Agregando MongoDB

Lo primero que vamos a crear es nuestra base de datos, como el ejemplo usa Mongo vamos a crear un servicio para agregar la DB de mongo. Para esto vamos a hacer click en Add Service y vamos a llenar los datos así:

Vemos que le estamos dando el nombre y la descripción al servicio y estamos indicando que use la imagen mongo:3.6. Pare que los datos se persistan y se guarden en el server debemos compartir un volumen, en la parte de abajo podemos hacer eso de la siguiente forma

Vemos que estamos montando el volumen del host /booksapi/data/db en el contenedor /data/db. Esto quiere decir que todos los archivos que se guarden en esa locación estarán guardados también en el host por si debemos volver a crear el contenedor o si queremos usar mas de uno, los datos guardados no se pierdan.

Hacemos click en create y el contenedor será creado en ese host aunque no será accesible aun.

Creando el servicio del API

Ahora que ya tenemos la DB, vamos a agregar el API. Tomando el Books api de nuestro live coding (https://medium.com/dockerizando/live-coding-dockerizando-un-api-de-node-js-1-5c0c630d415) vamos a crear el servicio. Como la imagen está alojada en docker hub (https://hub.docker.com/r/joselfonsecadt/booksapi/) solo debemos repetir los pasos anteriores pero usando la imagen del API así:

Noten que estamos agregando también un service link a mongo. Como nuestro API necesita conectarse a mongo eso creará la conexión entre los 2 servicios así que podemos poner la variable de ambiente DB_URL requerida por el API mongodb://admin@database:61426/booksapi. Usamos admin como usuario por ahora ya que mongo por defecto no tiene autenticación. Para el ejemplo nos funciona aunque mas adelante podemos agregarle un usuario.

Una vez se inicia el servicio quedará corriendo aunque no es accesible aun.

Ahora usando el mismo dominio que tenia para el Rancher server voy a agregar un registro A que sea books.ditecnologia.com y lo voy a apuntar a la IP del host donde creamos estos servicios.

Agregando un Load Balancer

Ahora debemos agregar un Load balancer que se encargue de recibir y redireccionar el trafico a el contenedor, esto es posible ya sea con Nginx o usando un HaProxy que Rancher nos da muy sencillo.

Hacemos click en Add Service pero en la flecha derecha y escogemos la opción Load Balancer

Luego le damos el nombre y agregamos las siguientes reglas

Noten que las reglas dicen internal, eso va a hacer que este LB sea propio para books API, ya que en un futuro cuando agreguemos el frontend vamos a tener que agregar reglas para eso, por ahora le estamos diciendo que el tráfico por el puerto 80 (HTTP) al host books.ditecnologia.com y que tengo el URI /api se redireccione al servicio booksAPI en el puerto 3000. Lo mismo para el path /explorer.

Al crear este LB internamente ya el trafico se redirecciona, ahora debemos agregar uno general para el servidor que nos sirva para balancear entre diferentes apps.

Creando el último Load Balancer

Para esto vamos a crear un nuevo Stack y lo vamos a llamar EntryPoint. por que será el Punto de entrada a nuestro host.

Ahora vamos a crear un load balancer de la misma forma que lo hicimos en el paso anterior solo que esta vez vamos a una configuración distinta.

En este caso estamos redireccionando el trafico que requiera el host books.ditecnologia.com en cualquier path o URI al load balancer de books API en el puerto 80. Si abrimos eso en el navegador veremos lo siguiente

Aunque es un 503, sabemos que funciona por que el dominio response solo que no hay nada que funcione en ese dominio con ese path aun. Si hacemos un request a /explorer obtenemos:

Nuestro API está funcionando!

A partir de este mismo set up podemos agregar mas Stacks que vendrían a ser nuestras diferentes apps alojadas en diferentes contenedores.

Disclaimer: Este exacto set up que acabamos de hacer requiere mas cosas para ser bueno en producción, así como lo configuramos podría ser un ambiente de Staging o development. La DB podría estar alojada en un servicio como mlab o AWS. Por favor no usar esto como una guía a ciegas en un app de producción que maneje datos sensibles.

Gracias por leernos y esperamos que les halla gustado esta MUY simple introducción a Rancher Server. Esperamos publicar mas artículos sore rancher pronto! Saludos!

Relacionados