¿Cómo preparar el entorno para poner nuestro Bot de Telegram en NodeJS en producción?

¿Cómo preparar el entorno para poner nuestro Bot de Telegram en NodeJS en producción?

Muchos de vosotros seguro que tenéis dudas sobre como ejecutar el bot de Telegram en NodeJS en un servidor (VPS) para poder tenerlo funcionando en todo momento, no os preocupéis en este tutorial os vamos a enseñar como tener todo funcionando correctamente.

¿Qué tipo de servidor VPS necesito?

Los requisitos mínimos es que el VPS tenga 512mb de ram, sobre el espacio de disco depende del bot, pero seguro que muchos no pasan de los 50mb asi que con cualquier VPS que os ofrezca algo más de 1gb de espacio de disco es más que suficiente.

📌 Crédito gratuito de 50 dólares en Digital Oceans durante 30 días

En nuestro caso vamos a usar el servidor VPS más básico de Time4VPS, nos sirve cualquier plan (Linux VPS, Container VPS o Storage VPS) para este tutorial usamos el Container VPS plan C2 que nos ofrece 2GB de ram y 20GB de disco duro. En este VPS claramente instalamos una distridución linux desde el panel de administración que nos ofrece Time4VPS, en nuestro caso Ubuntu 16.04 y para controlar nuestro servidor nos tenemos que conectar por SSH.

¿Cómo conectarse por SSH?

  • En Windows: En Windows para realizar la conexión necesitamos un cliente para poder realizar la conexión por ssh, los clientes más usados son Putty y MobaXterm, personalmente os recomiendo MobaXterm es más moderno y visual.
  • En Linux: Solo tenemos que abrir una terminal y escribir "ssh nombre_usuario@ip_servidor", el nombre de usuario en la gran mayoria de los vps suele ser "root" Ej: ssh [email protected]

Nota: Los usuarios de Windows 10 desde principios del 2018 pueden directamente usar cmd o powershell y escribir "ssh nombre_usuario@ip_servidor" para conectarse por ssh sin la necesidad de usar ningún cliente externo.

Actualización de nuestro sistema y instalación curl

Cuando entramos al sistema por primera vez por ssh lo más recomendable es actualizar la lista de paquetes disponibles y sus versiones usando "apt-get update" y con el comando "apt-get upgrade" actualizamos los paquetes que tengamos desactualizados de nuestro sistema. Además necesitamos instalar el paquete "curl" que es una herramienta de línea de comandos para transferir datos.

Lista de comandos:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install curl

Actualizar lista de repositorios y instalar curl

Instalación de NodeJS en nuestro servidor

Una vez tenemos completado el paso anterior procedemos a realizar una configuración previa para añadir un PPA (archivo de paquete personal) mantenido por NodeSource, esto nos asegura que instalamos la versión más reciente de NodeJS en nuestro servidor, usando el comando "cd ~" para situarnos en nuestro directorio personal y usamos curl para obtener el script de instalación de la versión que elegimos. En este caso "setup_10.x" nos indica que estamos bajando la versión 10 de Nodejs que es la que se encuentra actualmente como LTS.

Instalación repositorio NodeJS 10

Lista comandos:

cd ~
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -

El PPA se añadirá, el caché de paquetes locales se actualizará y se ejecutará el script de configuración de NodeSource todo ello automáticamente. Después para completar el proceso de instalación solo debemos ejecutar el siguiente comando:

sudo apt-get install -y nodejs

Instalación NodeJS y comprobación instalación

Subir el Bot y instalar las dependencias

Ahora llega el momento de subir nuestros bots/proyectos en NodeJS al servidor, no es subir la carpeta "node_modules" y el archivo "package-lock.json" debido a que realizaremos la instalación de las dependencias una vez subido el proyecto. En este ejemplo subimos un bot simple que consta de un único archivo llamado "gleam.js" y el archivo "package.json" que generamos en el momento de hacer empezar el proyecto usando "npm init", este archivo se fue actualizando a medida que instalamos paquetes de npm en la carpeta del proyecto de nuestro bot.

En el caso de este bot usamos dos dependencias: "cheerio" una librería que nos permite obtener información de archivos html/xml y la librería de la api de bots en NodeJS.

{
  "dependencies": {
    "cheerio": "^1.0.0-rc.3",
    "node-telegram-bot-api": "^0.40.0"
  }
}

La forma más simple y segura de subir archivos a nuestro servidor es usar "sftp", para usar podemos usar Filezilla para conectarnos al server para subir las carpetas y archivos de nuestro proyecto. En Filezilla usamos las mismas credenciales que usamos para conectarnos por SSH, es importante que pongamos el puerto "22" para que Filezilla reconozca que queremos realizar una conexión sftp.

SFTP Filezilla conexión

Si usáis MobaXterm tenemos la ventaja que al estar conectados al servidor por ssh además de la terminal en el lateral izquierdo tenemos el sftp disponible para usar sin realizar ninguna configuración o paso extra.

Es importante que busquéis un lugar/carpeta en el servidor donde poner los proyectos, la más simple que podéis usar es la carpeta "www" que se encuentra en la ruta "/var/www". En caso de no existir esta carpeta, os situáis en el directoria "var" usando el comando cd /var y creas la carpeta manualmente usando el comando mkdir www.

Subir bot server y instalar dependencias

Como podéis ver en la imagen superior me situé con la terminal en "/var/www" y cree la carpeta "gleam" usando el comando "mkdir", desde el explorador de archivos del lado izquierdo me puse en esa carpeta escribiendo la ruta y subí los archivos "gleam.js" y "package.json" para posteriormente usar el comando "npm install" que descarga todas las dependencias y crea la carpeta "node_modules".

Lista comandos:

cd /var/www
mkdir gleam
cd gleam
npm install

Podeís comprobar el funcionamiento del bot con el comando "node <nombre_archivo_bot>.js"

PM2 el gestor de procesos para Nodejs: ¿Qué es pm2? ¿Cómo funciona?
Qué es pm2?Pm2 es un gestor de procesos en producción para las aplicaciones Node.js quetiene un balanceador de carga incorporado. PM2 permite mantener siempre activaslas aplicaciones y volver a cargarlas evitando los tiempos de inactividad, a lavez que facilita tareas comunes de administrador de…

Instalación de PM2 y puesta en marcha

Con el fin de tener nuestro bot simpre funcionando en vez de usar el comando "node <nombre_archivo>.js" vamos a usar el gestor de procesos pm2, para ello primero lo tenemos que instalar usando el siguiente comando:

npm install -g pm2

Una vez instalado solo nos queda iniciar nuestro bot/proyecto usando el siguiente comando:

pm2 start <nombre_fichero_bot>.js --name "nombre"

instalacion-pm2-y-puesta-en-marcha-bot

En nuestro caso al llamarse el archivo del bot "gleam.js" el comando que pusimos fue:

pm2 start gleam.js --name "gleam"

Para aprender más sobre pm2 y todas sus funciones os recomiendo leer el artículo que os dejamos al final del paso anterior, espero que este tutorial os fuera muy útil para realizar el despliegue del bot en un servidor vps.