Ambiente de Desarrollo

Requerimientos

Instalación del ambiente

si le falta cumplir alguno de los requerimientos, seguir a la siguiente sección

Instalación de los componentes necesarios utilizando yarn:

$ yarn
$ yarn build:dev

Con esto, se crea la carpeta node-modules, y algunos archivos extra de configuración.

Generación de las imágenes docker

Nota: Se recomienda agregar su usuario al grupo de docker para evitar la necesidad de ejecutar docker con sudo. Esto se puede hacer ejecutando:

$ sudo usermod -a -G docker $USER

Posteriormente, podemos seguir 2 diferentes caminos, usando docker y docker-compose, o usando simplemente docker, llegando siempre al mismo resultado.

Docker + Docker-compose (recomendable)

Se utilizan los archvios Dockerfile y docker-compose.yml (para producción) o Dockerfile-development y docker-compose-development.yml (para desarrollo).

Ambiente Desarrollo

$ docker-compose -f docker/docker-compose-development.yml build
$ docker-compose -f docker/docker-compose-development.yml up

Con esto se genera la imagen docker, y corre tanto el servidor node, como mongodb.

Ambiente Producción

$ docker-compose -f docker/docker-compose.yml build
$ docker-compose -f docker/docker-compose.yml up

Usando yarn start

Para esta opción, vamos a necesitar tener todos los servicios (mongo por ejemplo), corriendo en nuestra maquina al momento de iniciar la aplicación, ademas de contar con las variables de ambiente seteadas correctamente con la dirección de host, puerto, y las credenciales necesarias para acceder al servicio.

La idea es ejecutar la siguiente instrucción en la terminal,

$ yarn start

Parametrización del ambiente

Para evitar futuros problemas, se evita en todo momento escribir las credenciales utilizadas para los diferentes servicios en los archivos de configuración. En su lugar, utilizan variables de ambiente.

Para facilitar el uso de las mismas, se recomienda utilizar direnv exportando todas las variables necesarias en el archivo .envrc.

Eso se hace de la siguiente manera:

export TU_CREDENCIAL=CREDENCIAL

Recordar nunca quitar el archivo .envrc del gitignore

Para el correcto funcionamiento del archivo .envrc es necesario contar con direnv_

Notar que se debe agregar la linea eval en el archivo de configuracion de su shell

En bash por ejemplo, se agrega la siguiente linea en el .bashrc

eval "$(direnv hook bash)"

Para conocer más sobre que línea agregar y como configurarlo en las diferentes shell, se recomienda leer el repositorio_ en github

Ademas, cada vez que se modifique se debe ejecutar:_

$ direnv allow

Visualización de los datos

Para visualizar los datos de una manera más cómoda, se recomienda la utilización de Mongodb Compass, una app de los creadores de mongo, que permite visualización de datos, estadísticas, entre otras funcionalidades interesantes.

Dependiendo como se haya levantado el ambiente, las configuraciones que se van a tener que ingresar en Mongodb Compass.

Si el ambiente se levantó completamente local (es decir, instalando los programas directamente en el SO), no va a ser necesario cambios, a menos que se hayan cambiados las configuraciones por defecto de Mongodb. Por defecto, son las siguientes:

  • Hostname: localhost
  • Port: 27017
  • Authentication: None
  • SSL: off
  • SSH Tunel: off

De utilizar el ambiente dockerizado, va a ser necesario especificar el hostname y puerto especificado al momento de levantar el ambiente. En los archivos docker-compose se utiliza la siguiente configuración:

  • Hostname: 172.17.0.1
  • Port: 27017
  • Authentication: none
  • SSL: off
  • SSH Tunel: off

Manejo del repositorio en desarrollo

Para el manejo del repositorio en etapas de desarrollo, se recomienda la utilización de git-flow, para una mayor organización en el desarrollo.

Además se recomienda también utilizar los git-flow-hooks, para una mayor comodidad. Además de agregar la versión actual del código al archivo «VERSION», de no utilizar git-flow-hooks, mantener en todo momento actualizado dicho archivo para poder mostrar dicha versión en la app funcionando en producción.

Extra

Para que las consultas a las apis sean más amigables, se propone utilizar el gist api_request, el cual es un wrapper de curl, agregando un beautifier para las respuestas en JSON.

Levantar ambiente de desarrollo

Para levantar el ambiente de desarrollo completamente local, hace falta contar con un programa extra llamado ngrok, o algún programa similar para completar el funcionamiento del bot de telegram.

En primera instancia es necesario compilar los js, utilizando npm o yarn.

# con yarn
$ yarn build:dev
# o con npm
$ npm run build:dev

Luego es necesario abrir un túnel al localhost para que el webhook del bot de telegram se pueda comunicar con nuestra app localmente, para esto corremos el siguiente comando:

$ ngrok http localhost:8000

En este caso se utilizó el puerto utilizado por la app, tener en cuenta cambiarlo en el comando si se utiliza otro.

Luego es necesario definir la variable URL_BASE en la misma terminal que se va a correr el servidor localmente, con la url asignada por ngrok, de la siguiente manera:

$ export URL_BASE=<url https de ngrok>

Tener en cuenta que se debe utilizar la versión https provista por ngrok.

Luego solo hace falta correr el docker-compose de la siguiente manera:

$ docker-compose -f docker/docker-compose-development.yml up --build

Con esto se debería contar con todo el ambiente levantado, listo para atender consultas en el bot de telegram.