n8n: Instalar y automatizar
Categoría:
Sysadmin, Marketing digital
Fecha:
27/07/2022
En este post vamos a hablar sobre n8n, un sistema de automatización opensource desconocido que puede ser útil en el 90% de proyectos.
Podemos decir que n8n es una alternativa gratuita a sistemas de automatización e integración como Integromat (ahora Make.com) y Zapier.
La parte buena es que es gratis, es decir, no vas a tener que pagar por uso ni por operaciones; la parte mala es que tienes que instalarlo en un servidor VPS o dedicado y eso requiere ciertos conocimientos técnicos, aunque lo vamos a intentar solucionar en este artículo.
n8n funciona sobre NodeJS y suele usar base de datos SQLite, aunque también se puede realizar la configuración utilizando MySQL y otros motores de base de datos.
En cuanto al funcionamiento, n8n es como Integromat (ahora Make.com). Funciona mediante elementos que ellos llaman "nodos" y que se pueden enlazar entre sí creando automatizaciones (workflows) con condicionales y permitiendo la conexión con otros servicios externos, ya sea mediante conexión "oficial" o mediante webhook o REST API.
A nivel de instalación, podemos instalar n8n utilizando "npm" o "npx" (instalando NodeJS, evidentemente) o directamente hacerlo sobre Docker.
En este manual vamos a instalar n8n en un servidor VPS con Debian 10 y a utilizar el gestor de paquetes "npm" de NodeJS.
Vamos a instalar n8n sobre NodeJS utilizando un proxy inverso Nginx y PM2.
Los requisitos de funcionamiento de n8n son simples, ya que no es una aplicación que consuma muchos recursos, aunque todo depende de la cantidad de automatizaciones (workflows) y de su complejidad.
n8n no hace un consumo intensivo de CPU y tampoco suele consumir mucha memoria RAM, aunque debes tener en cuenta que la base de datos rendirá mejor, aunque se consumirá más memoria, si usas MySQL, MariaDB o PostgreSQL en lugar de SQLite.
Para empezar, n8n funciona perfectamente en un servidor VPS con discos SSD. Así es precisamente como lo vamos a instalar en este tutorial, en un servidor VPS de Raiola Networks.
Lo primero es contratar un servidor VPS con Linux. En este caso, vamos a utilizar nuestro servidor VPS 1 SSD.
Al contratarlo, elegimos instalar Debian 10, aunque también podríamos hacerlo sobre Debian 11 y funcionaría de la misma forma.
Empezamos conectándonos por SSH con los datos proporcionados al contratar el VPS. Yo normalmente utilizo Putty para conectarme por SSH.
Lo primero es que, al conectarnos, debemos actualizar el sistema operativo:
Una vez que tenemos nuestro Debian actualizado, podemos empezar con la instalación de NodeJS para que n8n funcione sobre él.
En primer lugar, vamos a ejecutar este script:
He ejecutado el script para la versión 16.16, ya que en el momento de escribir este post n8n requiere al menos la versión 14 de NodeJS para funcionar.
Cuando finalice la ejecución del script, ya podremos instalar NodeJS usando el siguiente comando:
Cuando acabe la instalación de NodeJS, si todo va correctamente y no sale ningún error, podemos comprobar la versión de NodeJS instalada con este comando:
Con esto ya tendremos NodeJS instalado, pero aún no hemos acabado de preparar el servidor VPS para n8n.
Ahora vamos a instalar SQLite, ya que en este caso vamos a utilizar este pequeño motor de base de datos para no configurar MySQL o MariaDB.
Las instalaciones pequeñas pueden funcionar perfectamente con SQLite, aunque si tienes pensado ejecutar cientos de operaciones por segundo es mejor que uses MySQL o MariaDB.
Instalamos SQLite en el servidor VPS utilizando el siguiente comando:
Y ahora sí, ya podemos instalar n8n en nuestro servidor VPS.
Para instalar n8n simplemente debemos ejecutar el siguiente comando e instalaremos n8n usando el gestor de paquetes "npm":
Al terminar, podríamos arrancar directamente n8n utilizando el siguiente comando:
Pero vamos a hacer un par de cosas más, ya que si arrancamos n8n directamente no tendremos configurado nuestro subdominio para acceder a nuestro n8n y tampoco seguirá funcionando n8n al cerrar la consola SSH de nuestro servidor.
Lo que vamos a hacer ahora es que n8n se ejecute como servicio con PM2 y, por otro lado, configuraremos Nginx como proxy inverso para n8n. De esta forma, podremos configurar nuestro propio dominio o subdominio con SSL de Let's Encrypt.
Si hemos arrancado n8n, vamos a pararlo antes de instalar PM2:
Y después instalamos PM2 utilizando el siguiente comando:
Ahora vamos a ejecutar n8n como servicio con PM2 usando el siguiente comando:
El resultado es este:
Ahora vamos a hacer que PM2 inicie siempre al arrancar el sistema operativo. Para esto utilizamos el siguiente comando:
Ahora te pedirá que ejecutes otro comando, es este:
Ahora, utilizando el siguiente comando podemos ver el status de los servicios ejecutados con PM2. En este caso solo está n8n:
Y ahora vamos a establecer ciertas variables del entorno de n8n en PM2.
Para esto debemos ejecutar este comando, pero personalizando el usuario y la contraseña. Pon el que quieras, pero apúntalo.
Otra alternativa que me gusta más es declarar las variables en PM2, en el archivo de configuración de variables del entorno.
Para esto debemos ejecutar el siguiente comando:
Esto nos genera el archivo de configuración en /root/ecosystem.config.js.
Lo editamos con nuestro editor de texto favorito. En mi caso, con "nano":
Debería quedar algo así:
Por el momento no vamos a tocar nada más en este archivo, pero aún no hemos acabado con él.
Cuando digo que prefiero este modo de hacerlo es porque un poco más adelante tendremos que modificar este archivo para añadirle unas cuantas cosas para que nuestro n8n sea accesible con el dominio o subdominio configurado.
Ahora que ya tenemos n8n listo para funcionar, vamos a instalar el proxy inverso Nginx que nos va a ayudar a configurarle nuestro propio dominio o subdominio a nuestro sistema de workflows n8n.
Ejecutamos el siguiente comando para instalar Nginx en Debian:
Debemos esperar a que finalice la instalación:
Puede que te encuentres un problema, y es que antes debes desinstalar el Apache que trae Debian por defecto. Para esto debemos ejecutar este comando:
Si se te bloquea el gestor de paquetes APT, reinicia el servidor VPS y prueba a desinstalar HTTPD y posteriormente instala Nginx.
Cuando ya tengamos instalado Nginx, vamos a hacer que se inicie siempre al arrancar el servidor. Esto podemos hacerlo con los siguientes comandos:
Como he dicho, yo siempre edito los archivos con "nano", pero tú puedes utilizar el editor que quieras.
Vamos a editar el archivo de configuración de Nginx para añadir unas cuantas cosas para que funcione como proxy inverso para el NodeJS de n8n:
Debemos poner esto dentro del archivo de configuración:
Evidentemente, debemos personalizar el dominio o subdominio, como hice en mi archivo de configuración. Es el único cambio o personalización que tienes que hacer.
Guardamos el archivo y lo cerramos.
Antes de probar si funciona Nginx, vamos a poner a funcionar "certbot" para que funcione el certificado SSL gratuito Let's Encrypt.
Empezamos ejecutando el siguiente comando:
Y ahora ejecutamos el siguiente comando para añadir el repositorio PPA correspondiente:
Nos aparecerá algo similar a esto:
Aún nos falta la instalación de unas librerías para que funcione, por eso ejecutamos lo siguiente:
Esto ya casi está, ya podemos generar el certificado SSL gratuito.
Generar el certificado Let's Encrypt es fácil y gratis, aunque requiere un email y hay que tener en cuenta que debemos renovarlo cada cierto tiempo.
Vamos a generar el certificado SSL Let's Encrypt con el siguiente comando, personalizándolo para tu caso evidentemente:
Debemos aceptar todo lo que nos pida:
Antes de terminar, el generador nos pide que hagamos una elección.
Debemos elegir si queremos redirigir o no todo el tráfico HTTP. Lo normal es redirigir marcando 2 para evitar problemas:
Ya hemos acabado con Nginx, pero no hemos acabado de poner a funcionar nuestro sistema de automatización n8n.
Volvemos a editar el archivo /root/ecosystem.config.js con "nano" y vamos a añadirle esto:
Evidentemente, debes adaptarlo a tus datos: tu usuario y contraseña (los que quieras, pero guárdalos) y tu subdominio o dominio de acceso a n8n.
Guardamos el archivo y reiniciamos tanto Nginx como PM2 utilizando los siguientes comandos:
Si por casualidad PM2 o Nginx no reiniciaran bien, posiblemente el problema se encuentre en la sintaxis del archivo o en que se ha colado algún carácter raro que está impidiendo la interpretación correcta del archivo de configuración.
Por último, si necesitas renovar tu certificado SSL gratuito Let's Encrypt o ver cuánto tiempo falta para su renovación, puedes utilizar el siguiente comando:
Teóricamente con esto ya está.
Ya podemos probar si nos deja entrar a nuestra nueva instalación n8n desde el navegador web.
En caso de que no nos deje entrar es que la hemos liado en algún paso.
Si prefieres verlo en video, te lo dejo aquí en nuestro canal de Youtube:
Como hemos dicho antes, n8n es una herramienta que permite automatizar (mediante lo que ellos llaman workflows) y también integrar, es decir, conectar servicios.
Como consultor WordPress, suelo utilizar n8n y Make.com para realizar integraciones entre instalaciones e integraciones de WordPress con distintos servicios, trabajando mucho con webhooks.
En cada "workflow" podemos configurar elementos (nodos) y cada nodo tiene su propia configuración específica.
Enlazar nodos entre sí es tan simple como seleccionarlos e insertarlos en la "cuadrícula":
Y cada nodo tiene su propia configuración que nos permite utilizar nuestros propios orígenes de datos o simplemente definir cómo se va a comportar:
Existen dos tipos de nodos: regular y trigger.
Los "regular" son nodos normales que se pueden ejecutar durante un workflow, mientras que los "trigger" son nodos que pueden desencadenar workflows o acciones mediante señales externas o mediante programación interna.
Un ejemplo de "regular" sería el nodo que nos permite convertir JSON a spreadsheets, mientras que un ejemplo de "trigger" sería el nodo de CRON o el de Webhook.
Si comparamos n8n con Make.com (antes conocido como Integromat) veremos que n8n tiene una curva de aprendizaje más complicada, pero es más flexible para realizar ciertas automatizaciones.
La conexión a servicios externos por Oauth o API suele ser más compleja en n8n, aunque es el precio que hay que pagar por ser un sistema gratuito. Make.com es más asistido, pero nos cobra por número de operaciones realizadas.
Quizás la peor parte que veo en n8n es que sigue siendo muy necesario tener conocimientos de Javascript para darle salida a algunas automatizaciones:
Mientras que en Make.com no es necesario en ningún momento hacer esto, ya que podemos decir que es todo más automático.
Realmente no existen límites en n8n. Los límites en la mayor parte de los casos se encuentran en nuestros conocimientos, ya que siempre podemos obtener datos por webhook o por REST API y devolverlos mediante webhook o REST API.
En el repositorio de plantillas oficial encontramos ejemplos muy "bestias" que nos pueden ayudar a entender la potencia de n8n:
n8n no es la herramienta perfecta, pero es flexible y nos puede ayudar bastante a realizar ciertos procesos de automatización, de integración o de ejecución en background en nuestros proyectos web.
Podemos decir que n8n es una alternativa gratuita a sistemas de automatización e integración como Integromat (ahora Make.com) y Zapier.
La parte buena es que es gratis, es decir, no vas a tener que pagar por uso ni por operaciones; la parte mala es que tienes que instalarlo en un servidor VPS o dedicado y eso requiere ciertos conocimientos técnicos, aunque lo vamos a intentar solucionar en este artículo.
n8n funciona sobre NodeJS y suele usar base de datos SQLite, aunque también se puede realizar la configuración utilizando MySQL y otros motores de base de datos.
En cuanto al funcionamiento, n8n es como Integromat (ahora Make.com). Funciona mediante elementos que ellos llaman "nodos" y que se pueden enlazar entre sí creando automatizaciones (workflows) con condicionales y permitiendo la conexión con otros servicios externos, ya sea mediante conexión "oficial" o mediante webhook o REST API.
A nivel de instalación, podemos instalar n8n utilizando "npm" o "npx" (instalando NodeJS, evidentemente) o directamente hacerlo sobre Docker.
En este manual vamos a instalar n8n en un servidor VPS con Debian 10 y a utilizar el gestor de paquetes "npm" de NodeJS.
Vamos a instalar n8n sobre NodeJS utilizando un proxy inverso Nginx y PM2.
Los requisitos de funcionamiento de n8n son simples, ya que no es una aplicación que consuma muchos recursos, aunque todo depende de la cantidad de automatizaciones (workflows) y de su complejidad.
n8n no hace un consumo intensivo de CPU y tampoco suele consumir mucha memoria RAM, aunque debes tener en cuenta que la base de datos rendirá mejor, aunque se consumirá más memoria, si usas MySQL, MariaDB o PostgreSQL en lugar de SQLite.
Para empezar, n8n funciona perfectamente en un servidor VPS con discos SSD. Así es precisamente como lo vamos a instalar en este tutorial, en un servidor VPS de Raiola Networks.
Índice del artículo
- Instalar n8n en un servidor VPS
- n8n para automatizar
Instalar n8n en un servidor VPS
Lo primero es contratar un servidor VPS con Linux. En este caso, vamos a utilizar nuestro servidor VPS 1 SSD.
Al contratarlo, elegimos instalar Debian 10, aunque también podríamos hacerlo sobre Debian 11 y funcionaría de la misma forma.
Empezamos conectándonos por SSH con los datos proporcionados al contratar el VPS. Yo normalmente utilizo Putty para conectarme por SSH.
Lo primero es que, al conectarnos, debemos actualizar el sistema operativo:
Una vez que tenemos nuestro Debian actualizado, podemos empezar con la instalación de NodeJS para que n8n funcione sobre él.
En primer lugar, vamos a ejecutar este script:
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
He ejecutado el script para la versión 16.16, ya que en el momento de escribir este post n8n requiere al menos la versión 14 de NodeJS para funcionar.
Cuando finalice la ejecución del script, ya podremos instalar NodeJS usando el siguiente comando:
sudo apt-get install -y nodejs
Cuando acabe la instalación de NodeJS, si todo va correctamente y no sale ningún error, podemos comprobar la versión de NodeJS instalada con este comando:
node --version
Con esto ya tendremos NodeJS instalado, pero aún no hemos acabado de preparar el servidor VPS para n8n.
Ahora vamos a instalar SQLite, ya que en este caso vamos a utilizar este pequeño motor de base de datos para no configurar MySQL o MariaDB.
Las instalaciones pequeñas pueden funcionar perfectamente con SQLite, aunque si tienes pensado ejecutar cientos de operaciones por segundo es mejor que uses MySQL o MariaDB.
Instalamos SQLite en el servidor VPS utilizando el siguiente comando:
npm install sqlite3 --save
Y ahora sí, ya podemos instalar n8n en nuestro servidor VPS.
Para instalar n8n simplemente debemos ejecutar el siguiente comando e instalaremos n8n usando el gestor de paquetes "npm":
npm install n8n -g
Al terminar, podríamos arrancar directamente n8n utilizando el siguiente comando:
n8n start
Pero vamos a hacer un par de cosas más, ya que si arrancamos n8n directamente no tendremos configurado nuestro subdominio para acceder a nuestro n8n y tampoco seguirá funcionando n8n al cerrar la consola SSH de nuestro servidor.
Lo que vamos a hacer ahora es que n8n se ejecute como servicio con PM2 y, por otro lado, configuraremos Nginx como proxy inverso para n8n. De esta forma, podremos configurar nuestro propio dominio o subdominio con SSL de Let's Encrypt.
Si hemos arrancado n8n, vamos a pararlo antes de instalar PM2:
Y después instalamos PM2 utilizando el siguiente comando:
npm install pm2 -g
Ahora vamos a ejecutar n8n como servicio con PM2 usando el siguiente comando:
pm2 start n8n
El resultado es este:
Ahora vamos a hacer que PM2 inicie siempre al arrancar el sistema operativo. Para esto utilizamos el siguiente comando:
pm2 startup
Ahora te pedirá que ejecutes otro comando, es este:
sudo "env PATH=$PATH:/user/home/.nvm/versions/node/v14.3/bin pm2 startup <distribution> -u <user> --hp <home-path>
Ahora, utilizando el siguiente comando podemos ver el status de los servicios ejecutados con PM2. En este caso solo está n8n:
pm2 status
Y ahora vamos a establecer ciertas variables del entorno de n8n en PM2.
Para esto debemos ejecutar este comando, pero personalizando el usuario y la contraseña. Pon el que quieras, pero apúntalo.
N8N_BASIC_AUTH_ACTIVE=true N8N_BASIC_AUTH_USER=usuario N8N_BASIC_AUTH_PASSWORD=password pm2 restart n8n --update-env
Otra alternativa que me gusta más es declarar las variables en PM2, en el archivo de configuración de variables del entorno.
Para esto debemos ejecutar el siguiente comando:
pm2 init simple
Esto nos genera el archivo de configuración en /root/ecosystem.config.js.
Ahora vamos a tener que editar algunos archivos. Personalmente, siempre instalo el editor "nano" por comodidad, pero tú puedes utilizar el editor que quieras.
Lo editamos con nuestro editor de texto favorito. En mi caso, con "nano":
Debería quedar algo así:
Por el momento no vamos a tocar nada más en este archivo, pero aún no hemos acabado con él.
Cuando digo que prefiero este modo de hacerlo es porque un poco más adelante tendremos que modificar este archivo para añadirle unas cuantas cosas para que nuestro n8n sea accesible con el dominio o subdominio configurado.
Ahora que ya tenemos n8n listo para funcionar, vamos a instalar el proxy inverso Nginx que nos va a ayudar a configurarle nuestro propio dominio o subdominio a nuestro sistema de workflows n8n.
Ejecutamos el siguiente comando para instalar Nginx en Debian:
apt install nginx
Debemos esperar a que finalice la instalación:
Puede que te encuentres un problema, y es que antes debes desinstalar el Apache que trae Debian por defecto. Para esto debemos ejecutar este comando:
apt remove httpd
Si se te bloquea el gestor de paquetes APT, reinicia el servidor VPS y prueba a desinstalar HTTPD y posteriormente instala Nginx.
Cuando ya tengamos instalado Nginx, vamos a hacer que se inicie siempre al arrancar el servidor. Esto podemos hacerlo con los siguientes comandos:
sudo systemctl start nginx
sudo systemctl enable nginx
Como he dicho, yo siempre edito los archivos con "nano", pero tú puedes utilizar el editor que quieras.
Vamos a editar el archivo de configuración de Nginx para añadir unas cuantas cosas para que funcione como proxy inverso para el NodeJS de n8n:
nano /etc/nginx/conf.d/n8n.conf
Debemos poner esto dentro del archivo de configuración:
server {
server_name subdominio.tudominio.com;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_set_header Host $host;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
}
Evidentemente, debemos personalizar el dominio o subdominio, como hice en mi archivo de configuración. Es el único cambio o personalización que tienes que hacer.
Guardamos el archivo y lo cerramos.
Antes de probar si funciona Nginx, vamos a poner a funcionar "certbot" para que funcione el certificado SSL gratuito Let's Encrypt.
Empezamos ejecutando el siguiente comando:
sudo apt install software-properties-common
Y ahora ejecutamos el siguiente comando para añadir el repositorio PPA correspondiente:
sudo add-apt-repository ppa:certbot/certbot
Nos aparecerá algo similar a esto:
Aún nos falta la instalación de unas librerías para que funcione, por eso ejecutamos lo siguiente:
sudo apt install python3-certbot-nginx
Esto ya casi está, ya podemos generar el certificado SSL gratuito.
Generar el certificado Let's Encrypt es fácil y gratis, aunque requiere un email y hay que tener en cuenta que debemos renovarlo cada cierto tiempo.
Vamos a generar el certificado SSL Let's Encrypt con el siguiente comando, personalizándolo para tu caso evidentemente:
sudo certbot --nginx -d subdominio.tudominio.com
Debemos aceptar todo lo que nos pida:
Antes de terminar, el generador nos pide que hagamos una elección.
Debemos elegir si queremos redirigir o no todo el tráfico HTTP. Lo normal es redirigir marcando 2 para evitar problemas:
Ya hemos acabado con Nginx, pero no hemos acabado de poner a funcionar nuestro sistema de automatización n8n.
Volvemos a editar el archivo /root/ecosystem.config.js con "nano" y vamos a añadirle esto:
module.exports = {
apps : [{
name : "n8n",
env: {
N8N_BASIC_AUTH_ACTIVE:true,
N8N_BASIC_AUTH_USER:"usuario",
N8N_BASIC_AUTH_PASSWORD:"password",
N8N_PROTOCOL: "https",
WEBHOOK_TUNNEL_URL: "https://subdominio.tudominio.com/",
N8N_HOST: "subdominio.tudominio.com"
}
}]
}
Evidentemente, debes adaptarlo a tus datos: tu usuario y contraseña (los que quieras, pero guárdalos) y tu subdominio o dominio de acceso a n8n.
Guardamos el archivo y reiniciamos tanto Nginx como PM2 utilizando los siguientes comandos:
sudo systemctl restart nginx
pm2 restart ecosystem.config.js
Si por casualidad PM2 o Nginx no reiniciaran bien, posiblemente el problema se encuentre en la sintaxis del archivo o en que se ha colado algún carácter raro que está impidiendo la interpretación correcta del archivo de configuración.
Por último, si necesitas renovar tu certificado SSL gratuito Let's Encrypt o ver cuánto tiempo falta para su renovación, puedes utilizar el siguiente comando:
sudo certbot renew
Teóricamente con esto ya está.
Ya podemos probar si nos deja entrar a nuestra nueva instalación n8n desde el navegador web.
En caso de que no nos deje entrar es que la hemos liado en algún paso.
Si prefieres verlo en video, te lo dejo aquí en nuestro canal de Youtube:
n8n para automatizar
Como hemos dicho antes, n8n es una herramienta que permite automatizar (mediante lo que ellos llaman workflows) y también integrar, es decir, conectar servicios.
Como consultor WordPress, suelo utilizar n8n y Make.com para realizar integraciones entre instalaciones e integraciones de WordPress con distintos servicios, trabajando mucho con webhooks.
En cada "workflow" podemos configurar elementos (nodos) y cada nodo tiene su propia configuración específica.
Enlazar nodos entre sí es tan simple como seleccionarlos e insertarlos en la "cuadrícula":
Y cada nodo tiene su propia configuración que nos permite utilizar nuestros propios orígenes de datos o simplemente definir cómo se va a comportar:
Existen dos tipos de nodos: regular y trigger.
Los "regular" son nodos normales que se pueden ejecutar durante un workflow, mientras que los "trigger" son nodos que pueden desencadenar workflows o acciones mediante señales externas o mediante programación interna.
Un ejemplo de "regular" sería el nodo que nos permite convertir JSON a spreadsheets, mientras que un ejemplo de "trigger" sería el nodo de CRON o el de Webhook.
Si comparamos n8n con Make.com (antes conocido como Integromat) veremos que n8n tiene una curva de aprendizaje más complicada, pero es más flexible para realizar ciertas automatizaciones.
La conexión a servicios externos por Oauth o API suele ser más compleja en n8n, aunque es el precio que hay que pagar por ser un sistema gratuito. Make.com es más asistido, pero nos cobra por número de operaciones realizadas.
Quizás la peor parte que veo en n8n es que sigue siendo muy necesario tener conocimientos de Javascript para darle salida a algunas automatizaciones:
Mientras que en Make.com no es necesario en ningún momento hacer esto, ya que podemos decir que es todo más automático.
Realmente no existen límites en n8n. Los límites en la mayor parte de los casos se encuentran en nuestros conocimientos, ya que siempre podemos obtener datos por webhook o por REST API y devolverlos mediante webhook o REST API.
En el repositorio de plantillas oficial encontramos ejemplos muy "bestias" que nos pueden ayudar a entender la potencia de n8n:
n8n no es la herramienta perfecta, pero es flexible y nos puede ayudar bastante a realizar ciertos procesos de automatización, de integración o de ejecución en background en nuestros proyectos web.
Deja una respuesta
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *