Saltar al contenido principal
VPS

Cómo instalar N8N en un VPS paso a paso (Ubuntu + Docker)

Tutorial completo para instalar N8N self-hosted en un VPS Ubuntu con Docker, Nginx y SSL gratuito. Guía probada de 30 minutos.

Equipo Moshipp30 de abril de 202612 min de lectura
Servidor con líneas de código representando instalación de software self-hosted
Foto: Unsplash

Tener N8N corriendo en tu propio VPS te ahorra cientos de dólares al año frente a SaaS de automatización, te da control total sobre tus datos y ejecuciones ilimitadas. La parte complicada: la instalación tiene que quedar estable, segura y con SSL desde el primer día.

En esta guía te mostramos el proceso completo paso a paso usando Ubuntu 22.04, Docker Compose, Nginx como proxy inverso y Let’s Encrypt para HTTPS. Probado y funcional en menos de 30 minutos.

¿Por qué N8N en un VPS y no en N8N Cloud?

Antes de empezar, asegúrate de que self-hosted te conviene:

  • Ahorras dinero si ejecutas más de 10.000 workflows/mes.
  • Datos bajo tu control: credenciales de Gmail, Stripe, base de datos no salen de tu servidor.
  • Ejecuciones ilimitadas sin tiers ni overage.
  • Personalizable: puedes modificar variables de entorno, integrar nodos custom, conectar bases de datos externas.

Si nunca usaste N8N, mira primero la guía qué es N8N y cómo automatizar tu negocio.

Requisitos previos

Hardware mínimo (VPS)

  • 2 vCPU, 2 GB RAM (para arrancar y pruebas).
  • 4 GB RAM o más recomendado si planeas correr 20+ workflows concurrentes.
  • 20 GB SSD/NVMe mínimo (logs y ejecuciones crecen rápido).
  • Ubuntu 22.04 LTS o 24.04 LTS.

Acceso y dominio

  • Acceso root o sudo al VPS por SSH.
  • Un subdominio apuntando a tu VPS por DNS (n8n.tudominio.com con un registro A → IP del VPS).
  • Puertos 80 y 443 abiertos.

¿No tienes VPS aún?

En Moshipp tenemos VPS Cloud desde $35.000/mes con NVMe y datacenter en Beauharnois (Canadá). O nuestro VPS N8N pre-configurado si quieres saltarte esta guía y arrancar con N8N listo en 5 minutos.

Paso 1: Preparar el VPS

Conéctate por SSH:

ssh root@tu-ip-vps

Actualiza el sistema y crea un usuario no-root para mayor seguridad:

apt update && apt upgrade -y
adduser n8n
usermod -aG sudo n8n

Habilita el firewall básico:

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

A partir de aquí, todo se hace con el usuario n8n:

su - n8n

Paso 2: Instalar Docker y Docker Compose

Docker es el método más estable para correr N8N. Evita conflictos con dependencias del sistema y facilita actualizaciones.

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

Cierra sesión y vuelve a entrar para que el grupo docker surta efecto. Verifica:

docker --version
docker compose version

Si ambos comandos devuelven versiones, estás listo.

Paso 3: Crear la estructura de directorios

mkdir -p ~/n8n && cd ~/n8n
mkdir -p ./n8n_data

El directorio n8n_data guardará tu base de datos SQLite, workflows y credenciales cifradas. No lo borres nunca y respáldalo con regularidad.

Paso 4: Configurar docker-compose.yml

Crea el archivo:

nano docker-compose.yml

Pega el siguiente contenido (cambia n8n.tudominio.com y la contraseña):

version: '3.8'

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=n8n.tudominio.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.tudominio.com/
      - GENERIC_TIMEZONE=America/Bogota
      - N8N_DEFAULT_LOCALE=es
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=CambiaEstaPasswordSegura123!
    volumes:
      - ./n8n_data:/home/node/.n8n

Variables críticas

  • N8N_HOST: tu subdominio real. Sin esto, los webhooks fallan.
  • WEBHOOK_URL: imprescindible para integraciones tipo formularios o WhatsApp.
  • N8N_BASIC_AUTH_PASSWORD: usa una contraseña fuerte (mínimo 16 caracteres, letras + números + símbolos).
  • Bindear 127.0.0.1:5678 (no 0.0.0.0) hace que solo Nginx local pueda acceder. Más seguro.

Levanta el contenedor:

docker compose up -d

Verifica que esté corriendo:

docker ps
docker logs n8n --tail 50

Debería mostrar líneas tipo Editor is now accessible via: http://localhost:5678.

Paso 5: Instalar Nginx como proxy inverso

sudo apt install -y nginx

Crea la configuración del sitio:

sudo nano /etc/nginx/sites-available/n8n

Pega:

server {
    listen 80;
    server_name n8n.tudominio.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_read_timeout 86400;
        client_max_body_size 50M;
    }
}

Activa el sitio:

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

nginx -t debe responder syntax is ok. Si falla, revisa typos en el archivo.

Paso 6: Instalar SSL gratuito con Let’s Encrypt

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.tudominio.com --redirect --agree-tos -m tu-email@dominio.com -n

Certbot detecta la configuración de Nginx, obtiene el certificado y lo instala automáticamente con redirección de HTTP a HTTPS.

Renovación automática: Certbot ya instala un cron job. Verifícalo:

sudo systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Tutorial detallado de SSL

Si quieres entender Let’s Encrypt en profundidad, mira nuestra guía para instalar SSL gratis con Let’s Encrypt.

Paso 7: Primera entrada y configuración inicial

Abre https://n8n.tudominio.com en tu navegador.

  1. El navegador pedirá usuario/contraseña (basic auth). Usa los del docker-compose.yml.
  2. Luego N8N pedirá crear tu cuenta de propietario (correo, contraseña). Esta es la cuenta principal de N8N.
  3. ¡Listo! Ya puedes crear tu primer workflow.

Paso 8: Backups automáticos

Esto es obligatorio. Si pierdes n8n_data/, pierdes todos tus workflows y credenciales.

Crea un script simple:

nano ~/backup-n8n.sh
#!/bin/bash
TS=$(date +%Y%m%d-%H%M%S)
BACKUP_DIR="/home/n8n/backups"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/n8n-$TS.tar.gz" -C /home/n8n n8n_data
# Conservar solo los últimos 14 días
find "$BACKUP_DIR" -name "n8n-*.tar.gz" -mtime +14 -delete
chmod +x ~/backup-n8n.sh
crontab -e

Añade al cron (backup diario a las 3 AM hora Colombia):

0 3 * * * /home/n8n/backup-n8n.sh

Recomendación adicional: copia los backups a un almacenamiento externo (S3, Google Drive, o un VPS secundario). Si el VPS principal se cae, no perderás todo.

Paso 9: Actualizar N8N

N8N lanza versiones cada 1-2 semanas. Actualizar es trivial con Docker:

cd ~/n8n
docker compose pull
docker compose down
docker compose up -d

Antes de actualizar, siempre haz un backup del directorio n8n_data. Si algo rompe, vuelves a la versión anterior cambiando image: docker.n8n.io/n8nio/n8n:latest por una versión específica (ej: :1.65.2).

Optimizaciones recomendadas

Cambiar SQLite por PostgreSQL (producción)

Si esperas un volumen alto de ejecuciones, SQLite se queda corto. Migra a PostgreSQL agregando un servicio al docker-compose.yml:

  postgres:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: passwordSegura
      POSTGRES_DB: n8n
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

Y en el servicio n8n añade:

      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=passwordSegura

Limitar logs

Sin límites, los logs de Docker pueden llenar el disco. Edita /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Y reinicia Docker:

sudo systemctl restart docker

Errores comunes y soluciones

”Webhooks no funcionan / 404”

Casi siempre es por WEBHOOK_URL mal configurada o un certificado SSL expirado. Verifica:

docker logs n8n | grep -i webhook
sudo certbot certificates

“Editor carga, pero login da error”

Suele ser por N8N_BASIC_AUTH_* desincronizadas o un cookie viejo. Borra cookies del navegador, o entra en modo incógnito.

”503 Bad Gateway”

Nginx no puede conectar con el contenedor. Verifica:

docker ps  # ¿está corriendo n8n?
curl http://127.0.0.1:5678  # ¿responde localmente?

“Database is locked” en SQLite

Pasa cuando demasiadas ejecuciones concurrentes pelean por el archivo. Solución: migra a PostgreSQL (sección de optimizaciones arriba).

Seguridad: checklist final

  • Usuario no-root para administrar el VPS.
  • SSH solo con clave (deshabilita password auth).
  • ufw activo con solo 22, 80 y 443 abiertos.
  • Contraseña fuerte en N8N_BASIC_AUTH_PASSWORD.
  • N8N escuchando solo en 127.0.0.1, expuesto vía Nginx.
  • SSL activo y con renovación automática.
  • Backups diarios funcionando y verificados.
  • Logs de Docker con rotación.
  • Actualizaciones de Ubuntu cada 2 semanas (apt update && apt upgrade).

Preguntas frecuentes

¿Cuánto cuesta correr N8N en un VPS?

El VPS X11 de Moshipp cuesta $35.000 COP/mes (≈ 9 USD) y soporta cómodamente N8N para PYMEs. Si automatizas miles de ejecuciones al mes, un VPS X12 ($68.000) con 4 GB RAM da más respiro. Frente a N8N Cloud ($20 USD/mes con límites), el ahorro es directo.

¿Puedo correr N8N junto con otros servicios en el mismo VPS?

Sí, mientras el VPS tenga recursos suficientes. Es común compartir VPS con WordPress, una base de datos, o Chatwoot. Cada servicio en su contenedor Docker y Nginx redirige según subdominio.

¿Es N8N estable en producción?

Sí. Lo usan empresas grandes para procesos críticos. Las claves de estabilidad son: PostgreSQL como base de datos (no SQLite para volumen alto), backups diarios, monitoreo del VPS y mantener actualizada la versión.

¿Puedo conectarlo a WhatsApp Business?

Sí. Usa nodos de Twilio, MessageBird, Wassenger o providers locales colombianos. Para WhatsApp no oficial existe Baileys, pero no es soportado oficialmente y puede romperse.

¿Cuántos workflows puede manejar un VPS de 2 GB?

Como referencia: hasta 50-80 workflows concurrentes con baja complejidad. Si tus flujos hacen llamadas pesadas a APIs externas o procesan datos grandes, planea 4 GB RAM o más.

¿Tengo que pagar licencia de N8N?

No para uso interno en tu empresa. N8N usa la 'Sustainable Use License': puedes usarlo gratis incluso comercialmente. Solo necesitas licencia comercial si planeas revender N8N como servicio gestionado a terceros.

¿Cómo migro de N8N Cloud a self-hosted?

Exporta tus workflows desde el panel de N8N Cloud (cada workflow tiene un botón 'Download'). En tu instancia self-hosted, importa los archivos JSON. Las credenciales hay que recrearlas manualmente por seguridad.

Conclusión

Instalar N8N en un VPS toma 30 minutos si sigues los pasos al pie de la letra. El resultado: automatizaciones ilimitadas, datos bajo tu control, costo fijo y la libertad de personalizar el sistema según las necesidades de tu negocio.

Si no quieres lidiar con el setup, el mantenimiento de SSL, los backups y las actualizaciones, nuestro VPS N8N pre-configurado te entrega todo listo en 5 minutos, con soporte técnico en español y backups automáticos incluidos.

Sigue aprendiendo

Migración sin complicaciones

¿Migrar desde otro proveedor de hosting?

¿Estás cansado de la falta de rapidez y seguridad en tu sitio web? ¡Migra a Moshipp y obtén un servicio de hosting de calidad superior!

Más de 10,000 sitios web migrados con éxito