Instalación de n8n en un VPS mediante Docker

En este tutorial vamos a ver cómo podemos instalar la herramienta no-code n8n en un servidor VPS con Linux mediante Docker.

n8n es una herramienta de código abierto para la automatización de tareas y procesos mediante la creación de flujos de trabajo personalizados utilizando nodos.

Por ejemplo, si quieres enviar un mensaje de texto a un amigo cada vez que subes una foto a Instagram, puedes usar n8n para crear un flujo de trabajo que automáticamente envíe ese mensaje de texto cada vez que se produce esa acción en Instagram. Esto te permite crear soluciones de automatización más complejas sin tener que escribir código desde cero.

En el tutorial vamos a ver dos métodos diferentes para instalar n8n en el servidor y asignarle un dominio propio para acceder a su interfaz.

Antes de comenzar con el tutorial, deberás apuntar al servidor VPS el domino o subdominio que hayas escogido para acceder a n8n. En mi caso será n8n.devseo.xyz.

Esto lo puedes hacer añadiendo a las DNS un registro A que apunte a tu servidor.

Si no tienes un VPS, puedes crear uno ahora en minutos: Cómo instalar un VPS paso a paso.

Método 1: Docker compose + Nginx Proxy Manager

Te recomiendo este método porque es más sencillo y creo que es más robusto y profesional.

Instalar Docker

El primer paso será instalar Docker.

sudo apt install curl
sudo /bin/bash -c "$(curl -fsSL https://get.docker.com)"

Instalar Docker Compose

Ahora instalamos Docker Compose. Esta herramienta nos simplifica la forma de trabajar con Docker.

mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

Hacemos ejecutable el archivo descargado para Docker Compose.

chmod +x ~/.docker/cli-plugins/docker-compose

Y comprobamos si se ha instalado correctamente. Deberá aparecer un mensaje con la versión de Docker Compose instalada.

sudo docker compose version

Instalar Nginx Proxy Manger

Ahora necesitamos crear un proxy inverso. Para ello nos ayudaremos de Nginx Proxy Manager, una imagen de Docker ya preparada para ello.

👉  Conectar n8n con WordPress

Creamos una carpeta donde almacenaremos la configuración de Nginx Proxy Manager.

mkdir nginx-proxy-manager && cd nginx-proxy-manager

Creamos el archivo de configuración de Docker Compose.

nano docker-compose.yml

Y pegamos la configuración:

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

No necesitas modificar nada en este archivo, por lo que no voy a explicar lo que hace para no alargar el tutorial. Si tienes alguna duda puedes dejarla abajo en los comentarios.

Ya tenemos el proxy montado, lo iniciamos con el siguiente comando:

sudo docker compose up -d

Puedes acceder al panel de administración a través del puerto 81. Es decir, pon en el navegador la IP del VPS seguida del puerto 81. Ejemplo: 293.34.45.343:81.

Si todo está correcto, deberías ver la pantalla de login:

Utiliza las siguientes credenciales por defecto para entrar (al acceder te pedirá que las cambies):

Email: admin@example.com
Password: changeme

Instalar n8n

En este paso instalaremos n8n utilizando la imagen de Docker oficial.

Creamos una carpeta para guardar la configuración.

mkdir ~/n8n
cd  ~/n8n

Creamos el archivo docker-compose.yml.

nano docker-compose.yml

Y añadimos lo siguiente:

version: "3"

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER
      - N8N_BASIC_AUTH_PASSWORD
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
    volumes:
      - ./data:/home/node/.n8n

No necesitas modificar nada de este archivo.

Ahora crearemos un archivo .env donde definiremos las variables que n8n necesita para funcionar.

Creamos el archivo para las variables de entorno.

nano .env

Y añadimos lo siguiente (reemplaza por tus datos donde corresponda):

DOMAIN_NAME=devseo.xyz
SUBDOMAIN=n8n
N8N_BASIC_AUTH_USER=usuario
N8N_BASIC_AUTH_PASSWORD=contraseña
GENERIC_TIMEZONE=Europe/Madrid
SSL_EMAIL=email@email.com

Ahora levantamos el contenedor y ya tenemos n8n corriendo en el servidor.

sudo docker compose -d up

El siguiente paso será vincular el dominio, en mi caso n8n.devseo.xyz, con el contenedor Docker de n8n que acabamos de crear. Para ello necesitamos abrir el panel de Nginx Proxy Manager. Recuerda que se accede por el puerto 81 (XXX.XX.XX.XXX:81).

Una vez dentro del panel de control, accedemos a Hosts -> Proxy hosts -> Add Proxy Host.

Rellenamos los datos como en la siguiente imagen. Cambia el nombre del dominio y la IP del VPS por los tuyos.

👉  Instalar WordPress en un VPS: MySQL + Nginx
Pop up para configurar un nuevo Proxy Host en Nginx Proxy Manager

Ahora nos vamos a la pestaña SSL para generar un certificado (añade un email válido).

Y listo. Con esto ya tendríamos configurado n8n y accesible desde el navegador a través del dominio que hemos configurado. En mi caso n8n.devseo.xyz.

Método 2: Docker + Nginx

Este segundo método de instalación es una mezcla de los tutoriales de Alvaro Fontela (Raiola Networks) y Aitor Roma:

Instalar Node.js

Creamos el usuario n8n y establecemos una contraseña.

adduser --shell /bin/bash n8n
passwd n8n

Instalamos Node.js.

curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo apt-get install -y nodejs

Instalar Docker

Ejecutamos los siguientes comandos para instalar Docker.

sudo apt install curl
sudo /bin/bash -c "$(curl -fsSL https://get.docker.com)"

Asignamos permisos al usuario «n8n» para que utilice Docker.

gpasswd -a n8n  docker 

Activamos las actualizaciones automáticas de n8n (script de Aitor Roma).

sudo /bin/bash -c "$(curl -fsSL https://update.aitorroma.com)"

Instalar Nginx

Instalamos un proxy inverso Nginx. Esto es necesario para poder acceder a n8n con dominio propio.

sudo apt install nginx

Indicamos que Nginx arranque al iniciar el sistema operativo.

sudo systemctl start nginx
sudo systemctl enable nginx

Configuramos Nginx para que funcione como proxy inverso para nuestro n8n.

sudo nano /etc/nginx/conf.d/n8n.conf

Copia y pega en el archivo la siguiente información (cambiar n8n.devseo.xyz por tu dominio o subdominio).

server {
    server_name n8n.devseo.xyz;
    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;
    }
}

Instalar certificado

Instalamos el certificado SSL.

sudo apt install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt install python3-certbot-nginx

Generamos el certificado SSL para nuestro dominio/subdominio. Previamente debemos haber creado en las DNS un registro A apuntando a la IP de nuestro VPS.

sudo certbot --nginx -d n8n.devseo.xyz

Editamos la configuración de n8n.

su n8n
nano /home/n8n/.env-n8n

Añade al archivo los siguientes datos. Cambia password por una contraseña segura y modifica las referencias a n8n.devseo.xyz por las tuyas.

N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=password
N8N_PROTOCOL=https
WEBHOOK_TUNNEL_URL=https://n8n.devseo.xyz/
N8N_HOST=n8n.devseo.xyz
GENERIC_TIMEZONE=Europe/Madrid

Reiniciamos el servidor Nginx para que coja los cambios.

exit
sudo systemctl restart nginx

Nos aseguramos que el certificado SSL está generado.

sudo certbot renew

Iniciar contendor Docker con n8n

Finalmente, levantamos el contenedor Docker que ejecutará n8n.

su n8n
docker run -d -p 5678:5678 --env-file ~/.env-n8n --restart unless-stopped --name n8n -v ~/.n8n:/home/node/.n8n  n8nio/n8n:latest  n8n start 

Después de que se inicie el contendor, ya podrías acceder a n8n desde el navegador a través del dominio/subdominio que configuraste.

Más comandos de Docker aquí.

👇Tu comentario