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:
- Entra en n8n y haz clic en "New Workflow".
- Añade un nodo "Schedule Trigger" con intervalo de 1 minuto.
- Añade un nodo "Set" que cree un campo
timestampcon el valor{{ $now.toISO() }}. - Activa el workflow con el toggle de arriba a la derecha.
- 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.
Fundador de Flexum. Lleva más de ocho años ayudando a pymes a implementar automatizaciones con n8n, bots conversacionales y desarrollo a medida.
¿Quieres que lo implementemos para ti?
También te puede interesar
Seguimiento automático de leads con email e IA: cómo lo hacemos sin parecer un robot
Los emails de seguimiento automático acaban en spam porque parecen automáticos. El truco n…
Agentes con LLM en n8n: cómo funcionan y qué hemos conseguido con ellos
Un agente no es un chatbot que responde preguntas. Es un proceso que toma decisiones, llam…
Diagnóstico de automatización: las 8 preguntas que hacemos antes de proponer nada
Antes de hablar de n8n, bots o IA, preguntamos cuántas veces se hace eso a la semana. Si l…