Guía Definitiva: Cómo instalar n8n en un VPS con Docker (Paso a Paso)
Guía Definitiva: Cómo instalar n8n en un VPS con Docker (Guía 2025)
Bienvenido a la guía más completa para desplegar n8n en tu propio servidor. Tener tu propia instancia de n8n no solo te ahorra cientos de euros en suscripciones, sino que te da el control absoluto sobre tus datos y los de tus clientes.
Esta guía está diseñada para que cualquier persona, incluso sin experiencia previa en servidores, pueda tener un sistema profesional funcionando en menos de 20 minutos.
Faes 1: La Fundación - El Servidor (VPS)
Un VPS (Servidor Privado Virtual) es un ordenador encendido 24/7 en la nube.
¿Qué proveedor elegir?
- Recomendados: Hetzner (gran relación calidad/precio), DigitalOcean o AWS.
- Sistema Operativo: Elige siempre Ubuntu 24.04 LTS. Es el estándar de la industria y el más sencillo de documentar.
Requisitos de Hardware
- Mínimo: 1 vCPU / 2GB RAM (Solo para flujos muy simples).
- Recomendado (Producción): 2 vCPU / 4GB RAM. n8n utiliza Node.js, y PostgreSQL consume recursos; no racanees aquí si quieres estabilidad.
Fase 2: Preparación del Terreno (SSH y Docker)
Una vez comprado tu VPS, conéctate vía terminal (SSH):
# Conéctate (reemplaza 'tu_ip' por la IP de tu servidor) ssh root@tu_ip
Instalación de Docker (El estándar de 2025)
Ya no instalamos Docker como un paquete suelto. Instalamos el motor y el plugin de Compose moderno:
sudo apt update && sudo apt upgrade -y sudo apt install docker.io docker-compose-v2 -y # Verifica la instalación docker compose version
Fase 3: Despliegue con Docker Compose
Docker Compose nos permite definir toda nuestra infraestructura en un solo archivo. Crearemos una carpeta dedicada para mantener todo limpio.
mkdir n8n-docker && cd n8n-docker nano docker-compose.yml
Copia y pega el siguiente código. Nota importante: Hemos eliminado el tag
version porque la especificación moderna de Docker ya no lo requiere.
services: postgres: image: postgres:15 restart: unless-stopped environment: POSTGRES_USER: n8n_prod POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # Se lee del archivo .env POSTGRES_DB: n8n_production volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U n8n_prod -d n8n_production'] interval: 10s timeout: 5s retries: 5 n8n: image: n8nio/n8n:latest restart: unless-stopped security_opt: - no-new-privileges:true cap_drop: - ALL environment: # --- Base de Datos --- DB_TYPE: postgresdb DB_POSTGRESDB_HOST: postgres DB_POSTGRESDB_DATABASE: n8n_production DB_POSTGRESDB_USER: n8n_prod DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD} # --- Seguridad y Cifrado --- N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY} N8N_BASIC_AUTH_ACTIVE: "true" N8N_BASIC_AUTH_USER: ${N8N_USER} N8N_BASIC_AUTH_PASSWORD: ${N8N_PASSWORD} N8N_SECURE_COOKIE: "true" N8N_BLOCK_ENV_ACCESS_IN_NODE: "true" # Evita escape de credenciales # --- Automatización de Mantenimiento --- EXECUTIONS_DATA_PRUNE: "true" EXECUTIONS_DATA_MAX_AGE: "720" # Purga cada 30 días automáticamente EXECUTIONS_DATA_PRUNE_TIMEOUT: "3600" # --- Rendimiento y Estabilidad Pro --- N8N_EXECUTION_PROCESS: "own" # Aísla cada flujo en su propio proceso N8N_LOG_LEVEL: "info" N8N_RECURSION_LIMIT: "100" # Evita bucles infinitos N8N_PERSONAL_DATA_EXPOSE_LEVEL: "error" # Privacidad GDPR N8N_METRICS: "true" ports: - "127.0.0.1:5678:5678" # Solo accesible via Proxy Local (Seguridad) depends_on: postgres: condition: service_healthy volumes: - n8n_data:/home/node/.n8n volumes: postgres_data: n8n_data:
Fase 4: Configuración de Variables (.env)
No metas tus contraseñas directamente en el archivo anterior. Crea un archivo
.env en la misma carpeta:
nano .env
Añade esto y personalízalo:
POSTGRES_PASSWORD=una_password_muy_fuerte_aqui N8N_ENCRYPTION_KEY=genera_una_con_openssl_rand_hex_32 N8N_USER=tu_usuario_admin N8N_PASSWORD=tu_password_acceso_web
Fase 5: ¡A Volar! (Comandos de Gestión)
Para levantar el sistema por primera vez y dejarlo en segundo plano:
docker compose up -d
Comandos útiles:
: Ver qué está pasando en tiempo real.docker compose logs -f n8n
: Ver si los contenedores están vivos.docker compose ps
: Reiniciar el servicio.docker compose restart n8n
Fase 6: Nginx Reverse Proxy y SSL (El Candadito Verde)
Como hemos configurado n8n para escuchar solo en
127.0.0.1, nadie podrá entrar desde fuera. Necesitamos un proxy inverso (Nginx) para gestionar el HTTPS.
- Instala Nginx:
.sudo apt install nginx -y - Configura el Sitio: Crea un archivo en
:/etc/nginx/sites-available/n8n.confserver { server_name n8n.tu-dominio.com; location / { proxy_pass http://127.0.0.1:5678; proxy_set_header Connection ''; proxy_http_version 1.1; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; } } - Activa SSL con Certbot:
sudo apt install python3-certbot-nginx -y sudo certbot --nginx -d n8n.tu-dominio.com
Enciclopedia de Variables: ¿Por qué esto es importante?
- N8N_ENCRYPTION_KEY: Es el corazón de tu n8n. Cifra tus credenciales API. Si la pierdes, todas tus integraciones dejarán de funcionar. Guárdala fuera del servidor.
- N8N_EXECUTION_PROCESS (own): Por defecto n8n corre todo en el mismo proceso. Si un flujo se vuelve loco, tira el servidor. Con
, cada flujo tiene su propia "celda" aislada.own - EXECUTIONS_DATA_MAX_AGE: n8n guarda un registro de cada vez que se ejecuta algo. En un servidor con mucho tráfico, esto llenará el disco en semanas. Configurar esto a 30 días (720h) es salud pura para tu VPS.
- N8N_BLOCK_ENV_ACCESS_IN_NODE: Regla de oro de seguridad. Impide que un nodo de código pueda "leer" las variables de tu servidor Linux.
Conclusión
Ya no eres un principiante. Tienes una instalación de n8n preparada para el mundo real: segura, aislada, autolimpia y bajo tu total control. ¡Feliz automatización!