n8n
n8n en modo cola sobre Docker, con workers, task runners, PostgreSQL y Redis propios, HTTPS y actualizaciones con respaldo.
- Categoría: Servidores e infraestructura
- Estado: Disponible
- Requisitos: Un VPS activo con al menos 4 GB de RAM libre real (no la nominal del plan); Docker posible en el VPS (los VPS nuevos ya traen los permisos); Ningún n8n instalado por npm en ese VPS
- Herramientas MCP (Solo leen):
ver_preflight_app,ver_app,ver_operacion_app - Herramientas MCP (Escriben o modifican):
instalar_app,controlar_app,reintentar_operacion_app - Herramientas MCP (Destructivas):
desinstalar_app
¿Qué permite hacer?
ArduMaker instala n8n como un stack de Docker listo para producción: un proceso principal, workers en modo cola, un task runner por proceso, su propio PostgreSQL y su propio Redis. Es una instalación por VPS.
- Instalar sin preguntas: las credenciales internas se generan solas.
- Publicar el editor con HTTPS; la URL de webhooks y del editor se configura sola.
- Reiniciar, actualizar de versión (con copia de la base antes) y escalar workers.
- Editar variables de entorno desde el panel, con las críticas protegidas.
- Desinstalar conservando los datos, o borrándolos con confirmación.
¿Cuándo conviene usarlo?
- Automatizaciones y webhooks propios, sin límites de ejecuciones de un servicio alojado.
- Flujos con nodos Code que necesitan aislamiento real (task runners externos).
- Mucho volumen de ejecuciones que conviene repartir entre workers.
¿Cómo funciona en ArduMaker?
- Validar: VPS activo, función
n8ndel sistema, Docker posible y RAM libre real (MemAvailable) de al menos 4 GB. Si ya hay un n8n (Docker o npm), se adopta tal cual, sin reinstalar ni migrar. - Preparar credenciales (o reutilizar las del
.envde un intento anterior: un PostgreSQL ya inicializado no acepta otra contraseña). - Generar el Compose desde código según la RAM libre, bajar las imágenes como paso largo y levantar el stack.
- Publicar el editor (puerto 5678) con HTTPS y escribir en el
.envWEBHOOK_URLyN8N_EDITOR_BASE_URLcon la dirección publicada, yN8N_PROXY_HOPS=1. - Verificar:
runningsolo con el proceso principal activo,/healthzy/healthz/readinessen 200 y todos los workers activos.
Si un worker se cae a mitad, quien retoma la operación espera la misma instalación: nunca lanza un segundo stack.
¿Qué cambia realmente?
| Archivo o recurso | Contenido |
|---|---|
/opt/n8n/docker-compose.yml | Compose generado por la plataforma (644 root) |
/opt/n8n/.env | Variables de todos los contenedores (600 root) |
/opt/n8n/stack.json | Versión, topología, límites y volúmenes (600 root) |
/opt/n8n/backups/ | Volcados diarios de la base con 7 días de retención (timer n8n-db-backup) |
n8n-stack.service | Unidad que controla el stack con docker compose |
| Volúmenes | n8n_data, n8n_pg_data, n8n_redis_data |
RAM, workers y topología
La cantidad de workers sale de la RAM libre real, no del plan. Además se reservan 896 MB fijos para PostgreSQL y Redis y 512 MB de holgura antes de conceder workers extra; el máximo es 8.
| RAM libre | Workers | Runner del principal |
|---|---|---|
| Menos de 4 GB | Se rechaza | — |
| 4 – 5,9 GB | 2 | No |
| 6 – 7,9 GB | 3 | No |
| 8 GB o más | 4 o más (hasta 8) | Sí |
Cada contenedor lleva su límite de memoria y n8n recibe --max-old-space-size en torno al 75 % de ese límite, para que el recolector trabaje antes de que el sistema mate el proceso. Los logs rotan (10 MB, 3 archivos) y el historial de ejecuciones se poda a los 14 días.
Variables de entorno
- Protegidas (no se editan):
N8N_ENCRYPTION_KEY,N8N_RUNNERS_AUTH_TOKEN,DB_POSTGRESDB_*,POSTGRES_*,REDIS_PASSWORD,QUEUE_BULL_REDIS_*. - Gestionadas por la plataforma:
N8N_WORKERS(escalado),WEBHOOK_URLyN8N_EDITOR_BASE_URL(dominio),EXECUTIONS_MODE,N8N_RUNNERS_MODE,N8N_PORT. - Secretas (se muestran enmascaradas): las protegidas y cualquiera que termine en
PASSWORD,SECRET,TOKEN,KEYo_PWD. Revelarlas exige admin y queda registrado. - Los valores no pueden tener comillas,
#,$, acento grave, barra invertida ni saltos de línea: un valor así no falla, vale otra cosa.
Actualizar, escalar y respaldar
- Actualizar baja las imágenes de n8n y de los runners (mismo tag), hace un volcado de la base, regenera el Compose y levanta; si la verificación falla, vuelve a la versión anterior.
- Subir workers no corta nada; bajarlos detiene primero los de índice alto con un tiempo de gracia para terminar las ejecuciones en curso.
- La copia semanal del VPS incluye los volúmenes, pero se toma en caliente; el volcado diario de
/opt/n8n/backups/es la copia consistente de la base.
Esquema
- Internet: HTTPS en la dirección publicada
- nginx del VPS: reparte a
127.0.0.1:5678 - `n8n-main`: editor y webhooks; encola ejecuciones
- `n8n-redis`: cola de ejecuciones
- `n8n-worker-N`: ejecuta, cada uno con su runner
- `n8n-postgres`: base de workflows, credenciales y ejecuciones
Resultado esperado
La app n8n figura en Apps como una sola app (sus contenedores son componentes) con la URL HTTPS del editor cuando el enlace está verificado.
docker compose -p n8n ps
docker logs n8n-main --tail 50Errores y resolución
| Error o síntoma | Causa y qué hacer |
|---|---|
recursos_insuficientes | Menos de 4 GB de RAM libre real. Liberar memoria o subir de plan. |
requiere_reinicio_vps | VPS viejo sin permisos de Docker: hay que reiniciarlo. |
n8n_npm_instalado | Hay un n8n por npm: no se instala Docker encima. |
app_ya_existe / limite_de_tipo | Ya hay un n8n en ese VPS (o una instalación en curso). |
n8n_instalandose / n8n_instalacion_fallida | Sigue instalándose o terminó con error. Reintentable: relanza con las credenciales del .env. |
n8n_webhook_no_configurado | Quedó publicado pero el .env no tomó la URL. Reintentable, sin reinstalar. |
| Ejecuciones con nodo Code encoladas para siempre | Un runner no encontró su worker o tiene otra versión de imagen. |
| Se cambió una variable y no pasó nada | compose restart no relee el .env: hay que reiniciar recreando los contenedores. |
Relación con MCP
n8n se instala y opera por MCP con las herramientas de Apps (/mcp/docs, /mcp/servicios).
- Lectura:
ver_preflight_app(conapp_type: n8ndice si entra por RAM y Docker),ver_app,ver_operacion_app. - Modifican:
instalar_appconapp_type: n8nyconfigopcionalworkers(1–8),concurrency(1–50) yversion;controlar_appconrestartoupdate;reintentar_operacion_app. - Destructiva:
desinstalar_app(solo admin). Conserva volúmenes salvodelete_data=trueconconfirm_delete_data=true, que borra la base de n8n.
Cualquier otro campo en config (usuarios, contraseñas) responde config_invalida. Las variables de entorno y el escalado se manejan desde el panel; las acciones solo existen para el runtime Docker (un n8n por npm responde runtime_no_soportado).