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.
Contenidos
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.
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.

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:
- https://raiolanetworks.es/blog/n8n-instalar-automatizar/
- https://comunidad-n8n.com/instalacion-con-docker/
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í.