9 min de lectura

Instalar n8n en tu propio servidor: la guía que no asume que ya sabes todo

n8n autoalojado significa que tus flujos, tus credenciales y tus datos están en tu servidor. No en una nube que puede cambiar precios mañana.

Instalar n8n en tu propio servidor: la guía que no asume que ya sabes todo

Cuando dices "n8n autoalojado" hay gente que asiente como si supiera exactamente qué significa y luego busca en Google cómo instalar Docker. Esta guía es para esa gente. Y para quien sí sabe algo de servidores pero quiere una referencia concreta sin saltar entre cinco tutoriales desactualizados.

Al final de esta guía tendrás n8n funcionando con HTTPS en tu propio servidor. Con backup automático. Sin depender de ninguna plataforma SaaS.


Por qué autoalojar en lugar de usar n8n Cloud

n8n ofrece una versión cloud. Funciona bien. Pero tiene dos limitaciones que importan.

La primera es el coste. El plan Starter de n8n Cloud son 20€/mes para 2.500 ejecuciones. A 5.000 ejecuciones son 50€/mes. Con un VPS de 6,49€/mes y la versión autoalojada, no hay límite de ejecuciones.

La segunda es la privacidad. Cuando usas n8n Cloud, tus flujos y credenciales están en sus servidores. Si procesas datos de clientes, eso tiene implicaciones con el RGPD. Con la versión autoalojada, todo está en tu servidor. Tú controlas dónde está y quién tiene acceso.


Qué necesitas antes de empezar

El servidor

Un VPS (servidor privado virtual) es un servidor en la nube que alquilas por meses. No tienes que comprar hardware. Los proveedores más usados para este tipo de instalación son Hetzner, DigitalOcean y Contabo.

Para n8n en un proyecto con uso moderado (menos de 20 workflows activos, menos de 10.000 ejecuciones/mes), las especificaciones mínimas son:

  • CPU: 2 vCPU
  • RAM: 4 GB
  • Disco: 20 GB SSD
  • Sistema operativo: Ubuntu 22.04 LTS

En Hetzner, el plan CX21 cumple estos requisitos y cuesta 6,49€/mes. Es lo que recomendamos para empezar.

Un dominio

Necesitas un dominio o subdominio apuntando a la IP del servidor. Por ejemplo: n8n.tuempresa.com. Puedes usar cualquier registrador de dominios. El cambio de DNS puede tardar entre 15 minutos y 48 horas en propagarse, así que configura esto primero.

Acceso SSH

Para trabajar en el servidor necesitas conectarte por SSH. En Windows, usa PuTTY o el terminal de Windows 11 (que ya incluye cliente SSH). En Mac o Linux, abre el Terminal directamente.


Paso 1: Acceder al servidor y actualizarlo

Cuando el proveedor te da el servidor, te da una IP y una contraseña de root. La primera conexión:

ssh root@IP_DEL_SERVIDOR

Una vez dentro, actualiza el sistema:

apt update && apt upgrade -y

Esto puede tardar unos minutos. No hagas nada más mientras termina.


Paso 2: Instalar Docker y Docker Compose

Docker es lo que va a ejecutar n8n en un contenedor aislado. Es la forma más limpia de instalarlo porque no ensucia el sistema operativo con dependencias.

apt install -y curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

Verifica que se instaló correctamente:

docker --version

Docker Compose viene incluido desde Docker 20.10 como plugin. Verifica:

docker compose version

Si ves un número de versión, todo está bien.


Paso 3: Crear la estructura de directorios y el archivo de configuración

Vamos a organizar los archivos de n8n en una carpeta dedicada:

mkdir -p /opt/n8n
cd /opt/n8n

Ahora crea el archivo .env que contiene la configuración:

nano .env

Pega esto dentro del archivo, sustituyendo los valores indicados:

# Dominio donde va a vivir n8n
N8N_HOST=n8n.tuempresa.com
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.tuempresa.com/

# Seguridad básica
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=una_contraseña_segura_aqui

# Base de datos (SQLite por defecto, suficiente para empezar)
DB_TYPE=sqlite

# Zona horaria
GENERIC_TIMEZONE=Europe/Madrid

# Encriptación de credenciales
N8N_ENCRYPTION_KEY=una_clave_aleatoria_de_al_menos_32_caracteres

Para salir de nano: Ctrl+X, luego Y, luego Enter.

Genera la clave de encriptación con este comando (cópiala y pégala en el .env):

openssl rand -hex 24

Paso 4: El archivo docker-compose.yml

En la misma carpeta /opt/n8n, crea el archivo docker-compose:

nano docker-compose.yml

Contenido:

version: '3.8'

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    env_file:
      - .env
    volumes:
      - n8n_data:/home/node/.n8n
    environment:
      - NODE_ENV=production

volumes:
  n8n_data:
    driver: local

El parámetro 127.0.0.1:5678:5678 es importante: hace que n8n solo sea accesible desde el propio servidor, no desde internet directamente. Nginx va a ser la puerta de entrada pública.


Paso 5: Instalar Nginx

Nginx va a actuar como proxy inverso: recibe las peticiones en el puerto 443 (HTTPS) y las redirige a n8n en el puerto 5678.

apt install -y nginx
systemctl enable nginx
systemctl start nginx

Crea el archivo de configuración del sitio para n8n:

nano /etc/nginx/sites-available/n8n

Pega esto (sustituye n8n.tuempresa.com por tu dominio real):

server {
    listen 80;
    server_name n8n.tuempresa.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

Activa el sitio:

ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

El comando nginx -t verifica que la configuración no tiene errores. Si dice syntax is ok y test is successful, todo está bien.


Paso 6: HTTPS con Certbot

Certbot es la herramienta que obtiene y renueva certificados SSL de Let's Encrypt de forma automática. Gratuito.

apt install -y certbot python3-certbot-nginx
certbot --nginx -d n8n.tuempresa.com

Certbot te va a pedir un email para notificaciones de renovación. Introduce uno real. Luego pregunta si quieres redirigir HTTP a HTTPS automáticamente. Di que sí (opción 2).

Certbot modifica el archivo de configuración de Nginx automáticamente para añadir SSL. Verifica que funciona:

systemctl status certbot.timer

Deberías ver que el timer está activo. Certbot renueva el certificado automáticamente cada 90 días.


Paso 7: Arrancar n8n

cd /opt/n8n
docker compose up -d

El flag -d lo ejecuta en segundo plano (detached). La primera vez tarda un par de minutos mientras descarga la imagen de n8n.

Verifica que está corriendo:

docker compose ps

Deberías ver el servicio n8n con estado Up.

Ahora ve a https://n8n.tuempresa.com en el navegador. Debería aparecer la pantalla de login de n8n. Entra con las credenciales que definiste en el .env.


Paso 8: Backup automático con cron

Los datos de n8n están en un volumen Docker llamado n8n_data. El backup más simple es copiar ese directorio a otro lugar periódicamente.

Primero, identifica dónde está el volumen en disco:

docker volume inspect n8n_n8n_data

Busca el campo Mountpoint. Suele ser algo como /var/lib/docker/volumes/n8n_n8n_data/_data.

Crea un script de backup:

nano /opt/n8n/backup.sh

Contenido:

#!/bin/bash
FECHA=$(date +%Y%m%d_%H%M)
ORIGEN="/var/lib/docker/volumes/n8n_n8n_data/_data"
DESTINO="/opt/n8n/backups"

mkdir -p $DESTINO
tar -czf "$DESTINO/n8n_backup_$FECHA.tar.gz" -C "$ORIGEN" .

# Borrar backups de más de 30 días
find $DESTINO -name "*.tar.gz" -mtime +30 -delete

echo "Backup completado: n8n_backup_$FECHA.tar.gz"

Dale permisos de ejecución:

chmod +x /opt/n8n/backup.sh

Añade la tarea al cron para que se ejecute cada día a las 3:00:

crontab -e

Añade esta línea:

0 3 * * * /opt/n8n/backup.sh >> /var/log/n8n_backup.log 2>&1

Primer workflow de prueba

Para verificar que todo funciona, crea un workflow simple:

  1. Entra en n8n y haz clic en "New Workflow".
  2. Añade un nodo "Schedule Trigger" con intervalo de 1 minuto.
  3. Añade un nodo "Set" que cree un campo timestamp con el valor {{ $now.toISO() }}.
  4. Activa el workflow con el toggle de arriba a la derecha.
  5. Espera un minuto y ve a "Executions" en el menú de la izquierda.

Si ves una ejecución completada, el sistema funciona de principio a fin.


Problemas habituales y cómo resolverlos

n8n no arranca: revisa los logs con docker compose logs n8n. El 90% de las veces es un error en el archivo .env (un carácter especial en la contraseña que hay que escapar, o el dominio mal escrito).

HTTPS no funciona: verifica que el DNS del dominio apunta a la IP del servidor. Usa ping n8n.tuempresa.com para confirmar. Si el DNS no ha propagado todavía, espera.

Los webhooks no reciben datos: comprueba que WEBHOOK_URL en el .env coincide exactamente con la URL pública del servidor, con el protocolo https:// al inicio.

El servidor se queda sin memoria: n8n puede consumir más RAM con workflows complejos o con muchas ejecuciones simultáneas. Monitoriza con free -h. Si la RAM disponible cae por debajo de 500MB de forma habitual, actualiza el plan del VPS.


Actualizaciones

Para actualizar n8n a la última versión:

cd /opt/n8n
docker compose pull
docker compose up -d

Haz siempre un backup antes de actualizar.

Solicitar diagnóstico gratuito →
N
Escrito por
Nicasio Martínez

Fundador de Flexum. Lleva más de ocho años ayudando a pymes a implementar automatizaciones con n8n, bots conversacionales y desarrollo a medida.