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.comcon un registro A → IP del VPS). - Puertos
80y443abiertos.
¿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(no0.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.
- El navegador pedirá usuario/contraseña (basic auth). Usa los del
docker-compose.yml. - Luego N8N pedirá crear tu cuenta de propietario (correo, contraseña). Esta es la cuenta principal de N8N.
- ¡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).
-
ufwactivo 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

Cómo conectar un dominio a un VPS (DNS, Nginx y SSL)
Tutorial completo para conectar un dominio a un VPS: configurar DNS, Nginx como servidor web e instalar SSL Let's Encrypt en menos de 30 minutos.
Leer más
Cómo proteger un VPS Linux: hardening básico paso a paso
Guía para endurecer la seguridad de un VPS Linux: SSH, firewall, fail2ban, actualizaciones automáticas y monitoreo. 12 medidas esenciales.
Leer más
Cómo instalar Docker en un VPS Ubuntu (con ejemplos prácticos)
Tutorial completo para instalar Docker y Docker Compose en un VPS Ubuntu. Incluye casos de uso reales: WordPress, N8N, PostgreSQL y más.
Leer más
