Cómo Instalar n8n con Docker en un VPS Linux (Guía 2026)
Esta guía explica paso a paso cómo instalar n8n con Docker en un VPS Linux (Ubuntu 24.04 LTS recomendado), publicarlo con tu dominio, activar SSL con Let’s Encrypt y dejarlo funcionando en producción de forma estable. Sin rodeos, sin pasos innecesarios.
n8n es una herramienta de automatización de workflows open-source. Con un VPS puedes tener n8n self-hosted: tus datos en tu servidor, sin límites por ejecución y sin pagar por cada workflow activo. Exactamente lo que necesitas si usas n8n en serio.
Requisitos previos
Antes de empezar necesitas:
- Un VPS con Ubuntu 24.04 LTS (también funciona con Debian 12). Mínimo 1 vCPU y 2 GB RAM para uso personal; 2 vCPU y 4 GB RAM para producción con varios workflows activos. Consulta los planes VPS para n8n de BlumHost con los requisitos detallados.
- Un dominio o subdominio apuntando a la IP del VPS (registro A configurado y propagado)
- Acceso SSH al servidor con usuario root o con sudo
- Conocimientos básicos de terminal Linux (no necesitas ser experto, esta guía cubre cada comando)
Paso 1: Preparar el servidor
Conéctate al VPS por SSH y actualiza el sistema:
apt update && apt upgrade -y
Instala paquetes básicos que necesitaremos:
apt install -y curl wget git ufw
Configura el firewall para permitir solo los puertos necesarios:
ufw allow ssh ufw allow 80 ufw allow 443 ufw enable
Confirma con y cuando te lo pregunte. Ahora el servidor solo acepta conexiones SSH, HTTP y HTTPS.
Paso 2: Instalar Docker y Docker Compose
N8N se despliega con Docker, que es la forma más limpia y mantenible de instalarlo. Docker Compose permite definir todos los servicios (n8n + base de datos + proxy) en un solo archivo.
Instala Docker con el script oficial:
curl -fsSL https://get.docker.com | sh
Verifica que Docker está funcionando:
docker --version docker compose version
Deberías ver algo como Docker version 26.x.x y Docker Compose version v2.x.x.
Paso 3: Instalar Nginx como reverse proxy
n8n corre en el puerto 5678. Para publicarlo en el puerto 443 (HTTPS) con tu dominio, necesitas un reverse proxy. Nginx es la opción más sencilla.
apt install -y nginx
Paso 4: Obtener el certificado SSL con Certbot
apt install -y certbot python3-certbot-nginx certbot --nginx -d tu-dominio.com
Sustituye tu-dominio.com por tu dominio real. Certbot pedirá un email para notificaciones de renovación y configurará el certificado automáticamente.
Paso 5: Crear la estructura de directorios
mkdir -p /opt/n8n cd /opt/n8n
Paso 6: Crear el archivo docker-compose.yml
Crea el archivo de configuración principal:
nano /opt/n8n/docker-compose.yml
Pega el siguiente contenido, sustituyendo los valores en MAYÚSCULAS:
version: '3.8'
services:
postgres:
image: postgres:16
restart: always
environment:
POSTGRES_DB: n8n
POSTGRES_USER: n8n
POSTGRES_PASSWORD: TU_CONTRASEÑA_POSTGRES
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=TU_CONTRASEÑA_POSTGRES
- N8N_HOST=tu-dominio.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://tu-dominio.com/
- GENERIC_TIMEZONE=Europe/Madrid
- TZ=Europe/Madrid
- N8N_ENCRYPTION_KEY=UNA_CLAVE_ALEATORIA_32_CARACTERES
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
n8n_data:
Variables que debes personalizar:
– TU_CONTRASEÑA_POSTGRES: una contraseña segura para la base de datos (usa letras, números y símbolos)
– tu-dominio.com: tu dominio o subdominio real
– UNA_CLAVE_ALEATORIA_32_CARACTERES: genera una clave con openssl rand -hex 16
Para generar la clave de cifrado:
openssl rand -hex 16
Guarda y cierra el archivo (Ctrl+X, Y, Enter).
Paso 7: Configurar Nginx como reverse proxy para n8n
Crea la configuración de Nginx para tu dominio:
nano /etc/nginx/sites-available/n8n
Pega este contenido (sustituye tu-dominio.com):
server {
server_name tu-dominio.com;
location / {
proxy_pass http://localhost: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 300s;
proxy_connect_timeout 75s;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = tu-dominio.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name tu-dominio.com;
return 404;
}
Activa la configuración:
ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/ nginx -t systemctl reload nginx
nginx -t debe devolver syntax is ok y test is successful. Si hay errores, revisa que el dominio en el archivo coincide exactamente con el del certificado SSL.
Paso 8: Arrancar N8N
cd /opt/n8n docker compose up -d
Docker descargará las imágenes (puede tardar 2-3 minutos la primera vez) y arrancará los servicios. Verifica que todo está corriendo:
docker compose ps
Deberías ver dos servicios con estado Up: postgres y n8n.
Espera 30-60 segundos y abre tu navegador en https://tu-dominio.com. Verás el wizard de configuración inicial de n8n para crear el usuario administrador.
Paso 9: Configurar autenticación básica
La primera vez que accedes a n8n, el wizard te pedirá crear una cuenta de administrador. Elige una contraseña fuerte.
Para mayor seguridad, considera también:
Limitar acceso por IP si n8n es solo para tu equipo (añadir en la configuración de Nginx o con ufw):
# Solo desde IPs específicas ufw allow from TU_IP_FIJA to any port 443
Activar autenticación de dos factores desde el panel de n8n: Settings → Personal → Two-factor authentication.
Paso 10: Configurar renovación automática del SSL
Certbot renueva el certificado automáticamente, pero hay que asegurarse de que el servicio de renovación está activo:
systemctl status certbot.timer
Si está activo, perfecto. Si no:
systemctl enable certbot.timer systemctl start certbot.timer
Comandos útiles para el mantenimiento diario
Ver logs de n8n en tiempo real:
cd /opt/n8n && docker compose logs -f n8n
Actualizar n8n a la última versión:
cd /opt/n8n docker compose pull docker compose up -d
Reiniciar n8n:
cd /opt/n8n && docker compose restart n8n
Parar todos los servicios:
cd /opt/n8n && docker compose down
Ver uso de recursos:
docker stats
Buenas prácticas para n8n en producción
Usa PostgreSQL (ya está en el docker-compose). La configuración anterior ya usa PostgreSQL en lugar de SQLite. PostgreSQL es imprescindible para producción: escala mejor, permite backups consistentes y no tiene los límites de concurrencia de SQLite.
Configura backups de la base de datos. El VPS tiene backups diarios del disco completo incluidos, pero también puedes hacer backups específicos de PostgreSQL:
docker exec -t n8n-postgres-1 pg_dump -U n8n n8n > /backup/n8n_$(date +%Y%m%d).sql
Puedes automatizarlo con un cron: crontab -e y añade:
0 3 * * * docker exec -t n8n-postgres-1 pg_dump -U n8n n8n > /opt/backups/n8n_$(date +\%Y\%m\%d).sql
Controla el historial de ejecuciones. n8n guarda el historial de todas las ejecuciones en la base de datos. Con el tiempo, esto puede crecer mucho. Configura el límite en Settings → Executions → Save data of successful executions: elige «Latest X» en lugar de «All».
Monitoriza el uso de recursos. El VPS II (2 vCPU, 4 GB RAM) es suficiente para la mayoría de instalaciones de producción con n8n. Monitoriza con htop o docker stats si notas lentitud.
Solución de problemas habituales
N8N no arranca (error de base de datos):
docker compose logs postgres
Si ves errores de permisos, prueba:
docker compose down -v docker compose up -d
Esto borra los volúmenes y los recrea. Cuidado: perderás los datos de n8n si ya tenías workflows guardados.
Los webhooks no funcionan:
Verifica que WEBHOOK_URL en el docker-compose.yml es exactamente https://tu-dominio.com/ (con la barra al final). Reinicia n8n después de cualquier cambio en las variables de entorno.
SSL caducado o error de certificado:
certbot renew --force-renewal systemctl reload nginx
N8N va lento:
Comprueba el uso de RAM con free -h. Si el sistema usa swap de forma intensiva, es señal de que necesitas más RAM. Considera el VPS II (4 GB RAM) para producción con muchos workflows.
Próximos pasos
Con n8n instalado y funcionando, puedes:
- Conectar tus primeras integraciones desde el panel de n8n
- Explorar los más de 400 nodos disponibles (Slack, Gmail, Webhook, HTTP Request, bases de datos…)
- Configurar workers para workflows intensivos si tienes colas grandes
- Añadir más instancias de n8n si necesitas escalar horizontalmente
Si tienes dudas durante la instalación o quieres que te ayudemos a configurarlo, abre un ticket de soporte tras contratar tu VPS y te guiamos paso a paso.
Esta guía cubre la instalación básica de producción. Para configuraciones avanzadas (múltiples workers, balanceo de carga, integración con Redis), consulta la documentación oficial de n8n.
