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 logo

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.

n8n interfaz

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.

n8n putty ssh

Lo primero es que, al conectarnos, debemos actualizar el sistema operativo:

actualizar debian 10

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 -

instalar nodejs debian

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

instalar nodejs n8n

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

comprobar version nodejs

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

instalar sqlite n8n

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

instalar n8n npm

Al terminar, podríamos arrancar directamente n8n utilizando el siguiente comando:
n8n start

arrancar n8n linux

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:

instalar pm2 debian

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:

pm2 n8n

Ahora vamos a hacer que PM2 inicie siempre al arrancar el sistema operativo. Para esto utilizamos el siguiente comando:
pm2 startup

pm2 start

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

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

variables entorno n8n

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

variables entorno pm2

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":

editor nano

Debería quedar algo así:

ecosystem.config.js

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

instalar nginx

Debemos esperar a que finalice la instalación:

instalacion nginx debian

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

desinstalar apache debian

Si se te bloquea el gestor de paquetes APT, reinicia el servidor VPS y prueba a desinstalar HTTPD y posteriormente instala Nginx.

instalar 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

arrancar nginx al iniciar

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

editar nginx.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;
}
}

nginx.conf n8n

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

instalar ssl debian

Y ahora ejecutamos el siguiente comando para añadir el repositorio PPA correspondiente:
sudo add-apt-repository ppa:certbot/certbot

añadir PPA debian

Nos aparecerá algo similar a esto:

añadir PPA debian

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

install 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

generar certificado ssl lets encrypt

Debemos aceptar todo lo que nos pida:

generar certificado ssl gratuito

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:

redirigir HTTP HTTPS Nginx

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"
}
}]
}

variables pm2 n8n

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

reiniciar nginx debian

reiniciar pm2 debian

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

renovar cetbot nginx

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:

Video de Youtube sobre: n8n: Instalar y automatizar



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":

interfaz n8n

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:

nodos n8n

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:

javascript n8n

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:

template 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.
Álvaro Fontela
Álvaro Fontela

Alvaro Fontela es consultor WordPress especializado en WPO y rendimiento web, además de co-fundador y CEO de Raiola Networks.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 1 comentario en n8n: Instalar y automatizar
Avatar del autor del comentario

javier

30/07/2022 a las 10:08
Hola Álvaro,
No sé si me podrás ayudar... No consigo que se vea en mi dominio.
La aplicación carga correctamente en miip:5678, pero el problema que tengo es que no consigo que se vea en mi dominio. No hice la parte de let's encrypt, porque CONSIDERÉ que como cualquiera de los dominios que tengo en raiola ya tienen https, simplemente me fuí a la zona dns y creé un registro A n8n.midominio.com. A miip
Pero no ha funcionado. Tengo que hacer lo de let's encript igualmente?
Gracias Álvaro
Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *