[{"data":1,"prerenderedAt":171},["ShallowReactive",2],{"seo-verification":3,"blog-instalar-n8n-en-vps-con-docker-ma-es":6,"promo-bar-likely":170},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-instalar-n8n-en-vps-con-docker-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":144,"ctaBody":145,"ctaButton":146,"ctaUrl":147,"relatedPosts":148},3,"instalar-n8n-en-vps-con-docker",{"fr":12,"en":13,"ar":14,"es":10},"installer-n8n-vps","install-n8n-on-vps-with-docker-complete-2026-guide","تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026","Instalar n8n en un VPS con Docker: guía completa 2026","Despliegue n8n en VPS con Docker, reverse proxy y HTTPS. Crash V8, 502 nginx, migración de npm a Docker y seguridad de ejecuciones persistidas (advisory agosto 2026).",19,4,false,"2026-06-05T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},2,"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":33,"appSlug":34},"automatizacion","n8n","n8n es un orquestador de automatizaciones de código abierto: conecta sus APIs, dispara workflows por evento y, autoalojado, funciona sin límite de ejecuciones ni suscripción cloud. Esta guía cubre la instalación completa en VPS con Docker, la configuración del reverse proxy, las variables de entorno críticas, dos errores de producción críticos — crash V8 con más de 30 workflows simultáneos y 502 Bad Gateway nginx — la migración desde el modo npm, y la seguridad de los datos de ejecución persistidos que puso de relieve el advisory GHSA-vrv8-j27g-g7cr de agosto de 2026. En un VPS ServOrbit, n8n puede instalarse desde la creación del servidor: la primera parte de esta guía indica dónde encontrar su dirección y cómo abrirlo, y la instalación a mano se mantiene al final del artículo, como alternativa.",[37,41,57,60,71,74,89,92,95,98,101,104,107,110,113,116,140],{"type":38,"title":39,"body":40},"h2","n8n instalado al crear su VPS","Si eligió n8n al contratar su VPS ServOrbit, no hay nada que instalar. Al crear el VPS, ServOrbit instala Docker si falta y arranca n8n con su base de datos PostgreSQL 16 mediante Docker Compose. La interfaz escucha en `127.0.0.1:5678`, el bucle local del servidor: no se publica nada en su dirección IP y todavía no hay ningún dominio asociado. Los cuatro pasos siguientes bastan para abrirlo. La instalación a mano, para otro servidor o para rehacerlo todo usted mismo, se describe al final del artículo.",{"type":42,"title":43,"steps":44},"steps","Abrir el n8n instalado por ServOrbit",[45,48,51,54],{"title":46,"body":47},"Encontrar la dirección y los accesos","El correo «n8n ya está instalada» y la ficha de su VPS en el área de cliente, sección «Aplicaciones instaladas», le indican cómo abrir la aplicación: su dirección si hay un dominio configurado y, si no, el comando del túnel SSH y el puerto. Allí encontrará también el enlace a esta guía y el botón «Soporte».",{"title":49,"body":50},"Abrir n8n sin dominio","Desde su ordenador, ejecute `ssh -L 5678:127.0.0.1:5678 root@\u003Cip-del-vps>`, mantenga la sesión abierta y abra `http:\u002F\u002Flocalhost:5678`. El puerto puede haberse reasignado durante la instalación: utilice el que muestra su área de cliente, ya que 5678 es solo el valor del catálogo.",{"title":52,"body":53},"Conectarse por primera vez","Hágalo sin esperar: la primera pantalla crea la cuenta de propietario (correo electrónico, nombre, contraseña de al menos 8 caracteres con una mayúscula y una cifra) y el primer visitante se convierte en propietario de la instancia. Después cree su primer flujo de trabajo: un disparador (Webhook, Cron, correo electrónico…) y luego las aplicaciones que desee conectar.",{"title":55,"body":56},"Publicar en HTTPS en un dominio","Cuando n8n se instala desde su área de cliente con una dirección elegida —su propio dominio o un subdominio gratuito de ServOrbit—, la plataforma configura el vhost nginx y el certificado Let's Encrypt. Una instalación hecha al crear el VPS, o sin dirección, se publica desde la ficha del VPS: botón «Asociar un dominio» del bloque de la aplicación (un dominio de su cuenta, el subdominio gratuito o un nombre que usted apunte al servidor). Con el dominio ya configurado, añada `N8N_HOST=\u003Cdominio>`, `N8N_PROTOCOL=https` y `N8N_WEBHOOK_URL=https:\u002F\u002F\u003Cdominio>\u002F` (`WEBHOOK_URL` antes de n8n 2.35.0) al bloque `environment` del servicio `n8n`, en el archivo Compose de la aplicación (`docker compose ls` muestra su carpeta), y ejecute `docker compose up -d`. Sin estas variables, las URL de webhook que genera n8n siguen apuntando a `localhost` y son inaccesibles.",{"type":38,"title":58,"body":59},"Por qué alojar n8n en su VPS","La versión cloud de n8n factura por ejecución más allá del plan y limita el número de workflows activos. En su VPS, el único coste es el del servidor, con independencia del número de automatizaciones o de llamadas API. Conserva además el control total sobre los credentials, las cargas útiles de los webhooks y el historial de ejecuciones — ningún dato transita por una infraestructura de terceros.",{"type":61,"title":62,"items":63},"ul","Las ventajas concretas de un n8n autoalojado",[64,65,66,67,68,69,70],"Ejecuciones sin límite: ningún tope mensual, ningún sobrecoste al escalar.","Credentials y payloads de webhooks confinados en su servidor, sin tránsito externo.","Acceso a los nodes comunitarios y a la ejecución de código personalizado sin restricción.","Webhooks en su propio dominio, configurables para cada integración entrante.","Coste previsible: un precio de VPS fijo, independiente del volumen de automatizaciones.","Persistencia controlada de los workflows y del historial en volúmenes de los que usted hace copia de seguridad.","Compatibilidad con Ollama, Flowise o cualquier otro servicio Docker en la misma red interna.",{"type":38,"title":72,"body":73},"Asegurar las ejecuciones persistidas (advisory GHSA-vrv8-j27g-g7cr)","En agosto de 2026, el advisory GHSA-vrv8-j27g-g7cr reveló que tres nodes vuelcan los credentials descifrados en los datos de ejecución persistidos en caso de error: el node **Strapi** (tokens OAuth escritos en claro en `execution_data`), el node **SeaTable** (claves API inscritas en los logs de ejecución de error) y el node **Mailcheck** (credenciales SMTP persistidas en `execution_data`). Estos secretos quedan legibles para cualquier usuario con acceso a los logs de ejecución en la interfaz de n8n. En una instancia sin pruning, se acumulan indefinidamente.",{"type":42,"title":75,"steps":76},"Cuatro gestos para corregir y prevenir",[77,80,83,86],{"title":78,"body":79},"Actualizar a la versión que corrige el advisory","La actualización es la única corrección completa para los tres nodes. Compruebe su versión actual: `docker exec n8n n8n --version`. Descargue la última imagen y relance: `docker compose pull && docker compose up -d`. Para la rama estable, la corrección está disponible a partir de la versión 2.35.4; para la rama v1, a partir de la versión 1.123.73.",{"title":81,"body":82},"Activar el pruning de las ejecuciones","Añada dos variables en la sección `environment` del servicio n8n: `EXECUTIONS_DATA_PRUNE=true` y `EXECUTIONS_DATA_MAX_AGE=168` (7 días, expresado en horas). Reinicie el contenedor: `docker compose restart n8n`.",{"title":84,"body":85},"Restringir el acceso a los logs de ejecución","En modo multiusuario, compruebe en Ajustes → Usuarios que solo los administradores pueden consultar los logs de ejecución.",{"title":87,"body":88},"Medida cautelar antes de la actualización","En una instancia todavía sin actualizar: desactive o retire los workflows que utilizan los nodes Strapi, SeaTable o Mailcheck.",{"type":38,"title":90,"body":91},"Crash V8 fatal con más de 30 workflows activos","**Síntoma.** La instancia n8n se detiene bruscamente con el error `FATAL ERROR: invalid-mark-compact are transition` en los logs de Docker. El contenedor se reinicia si `restart: unless-stopped` está configurado, pero el crash se reproduce en cuanto la carga vuelve a pasar el mismo umbral.\n\n**Causa.** Este error es un pánico del motor V8 durante un ciclo de garbage collection. Se desencadena cuando el heap de V8 está saturado — típicamente a partir de **30 workflows ejecutándose simultáneamente** en un VPS con menos de 2 GB de RAM.\n\n**Corrección inmediata.** Añada `NODE_OPTIONS=--max-old-space-size=2048` en el entorno. Reinicie el contenedor: `docker compose restart n8n`.\n\n**Corrección estructural.** Asigne **al menos 2 GB de RAM a la VM** por encima de 30 workflows activos. Para más de 50 workflows, prefiera el **modo queue** con Redis. Fuente: community.n8n.io thread #308425.",{"type":38,"title":93,"body":94},"502 Bad Gateway persistente detrás de nginx","**Síntoma.** Las peticiones cortas tienen éxito pero ciertos workflows devuelven `502 Bad Gateway` desde nginx exactamente 60 segundos después del inicio de la ejecución.\n\n**Causa.** nginx espera por defecto **60 segundos** una respuesta del backend (`proxy_read_timeout` = 60 s). Si la ejecución tarda más, nginx corta la conexión.\n\n**Corrección.** Añada en el bloque `location` de nginx:\n\n`proxy_read_timeout 300;`\n`proxy_send_timeout 300;`\n\nRecargue nginx: `nginx -t && systemctl reload nginx`. Fuente: community.n8n.io thread #274581.",{"type":38,"title":96,"body":97},"Breaking changes que conviene conocer (v1.27–v1.31)","Tres cambios de las versiones recientes pueden romper silenciosamente una instancia existente.\n\n**Renombrado del parámetro OAuth 2.0 en HTTP Request.** Las peticiones autenticadas con OAuth 2.0 pueden dejar de funcionar sin mensaje de error explícito.\n\n**Formato de la URL de webhook.** Si ha copiado URL de webhook fijas en servicios de terceros, vuelva a comprobarlas tras la actualización.\n\n**Obsolescencia de `$item()`.** Su reemplazo es `$input.item` o `$('Nombre del node').item`.\n\nLa lista completa está disponible en la \u003Ca href=\"https:\u002F\u002Fdocs.n8n.io\u002Fchangelog\u002Fv30-breaking-changes\">documentación oficial de n8n\u003C\u002Fa>.",{"type":38,"title":99,"body":100},"Resolución de los errores frecuentes","**El puerto 5678 es inaccesible.** Compruebe que el contenedor funciona y que escucha en `127.0.0.1:5678`.\n\n**Los webhooks muestran `localhost`.** La variable `N8N_WEBHOOK_URL` está ausente — añádala con la barra final y reinicie.\n\n**Error de permisos en el volumen.** `chown -R 1000:1000 \u002Fopt\u002Fn8n\u002Fdata` y reinicie el contenedor.\n\n**La base PostgreSQL rechaza la conexión.** Compruebe la red Docker y las variables de entorno.\n\n**Crash V8 brutal.** Añada `NODE_OPTIONS=--max-old-space-size=2048`. Vea la sección dedicada.\n\n**502 Bad Gateway persistente.** Lleve `proxy_read_timeout` a 300 s. Vea la sección dedicada.\n\n**Credentials visibles en los logs.** Actualice n8n y active el pruning. Vea la sección dedicada.\n\n**Rollback silencioso de SQLite bajo carga.** Síntoma: ejecuciones desaparecidas o resultados inconsistentes sin error visible bajo alta concurrencia. Causa: SQLite no soporta escrituras concurrentes (issue GitHub n8n #32284). Solución única: migrar a PostgreSQL.",{"type":38,"title":102,"body":103},"SQLite o PostgreSQL: la elección que lo cambia todo en producción","**SQLite es un motor de pruebas, no un motor de producción.** Es perfectamente adecuado para descubrir n8n en local o validar un workflow antes de desplegarlo. En cuanto su instancia recibe tráfico real — múltiples workflows lanzados en paralelo, webhooks entrantes, ejecuciones planificadas simultáneas — SQLite se convierte en un riesgo. El issue GitHub n8n #32284 documenta rollbacks silenciosos bajo carga concurrente: las ejecuciones desaparecen del historial sin mensajes de error, y los resultados intermedios se escriben de forma parcial.\n\n**Migrar a PostgreSQL.** El procedimiento en tres pasos:\n\n1. Exporte los workflows existentes: `n8n export:workflow --all --output=\u002Fopt\u002Fn8n\u002Fworkflows-backup.json`\n2. Modifique el `.env` para cambiar el motor: `DB_TYPE=postgresdb` con las variables correspondientes.\n3. Reinicie todo (`docker compose up -d`) e importe: `n8n import:workflow --input=\u002Fopt\u002Fn8n\u002Fworkflows-backup.json`.\n\n**Almacenamiento persistente independiente.** El volumen PostgreSQL (`pg_data`) debe montarse en un almacenamiento persistente independiente del host. Verifique siempre con `docker volume ls` que el volumen existe.\n\n**Dimensionamiento.** PostgreSQL consume entre 50 y 100 MB de RAM adicional en carga ligera. Planifique al menos **2 GB de RAM** para n8n + PostgreSQL en el mismo VPS; **4 GB** si ejecuta regularmente workflows de IA o importaciones voluminosas.",{"type":38,"title":105,"body":106},"Cuatro configuraciones críticas para una producción estable","Estos cuatro puntos concentran la mayor parte de los incidentes reportados en community.n8n.io y DEV Community en 2026. Cada uno es independiente y puede aplicarse a una instancia existente sin redespliegue completo.\n\n**1. `N8N_WEBHOOK_URL` es obligatorio en el `.env`.** Sin esta variable, n8n reconstruye la URL de webhook combinando el hostname interno del contenedor y el puerto 5678. El resultado es una URL inutilizable desde cualquier servicio externo. Además, la URL cambia en cada recreación del contenedor. Establezca `N8N_WEBHOOK_URL=https:\u002F\u002Fn8n.su-dominio.com\u002F` (con barra final) y no la omita nunca.\n\n**2. RAM mínima 2 GB, recomendada de 4 a 8 GB.** Un VPS con 1 GB de RAM es insuficiente en cuanto n8n ejecuta varios workflows simultáneamente. El OOM killer de Linux termina el proceso Node.js sin log explícito en n8n, creando un ciclo de crashes difícil de diagnosticar. El mínimo documentado por n8n para producción es 2 GB; 4 a 8 GB se recomiendan para instancias con workflows de IA o más de 20 workflows activos.\n\n**3. Headers WebSocket de nginx son obligatorios para el editor.** La interfaz de n8n se comunica con el backend vía WebSocket para la ejecución en tiempo real. Sin estos dos headers en el bloque `location` de nginx, la conexión WebSocket es rechazada y el editor queda inaccesible o se congela:\n\n`proxy_set_header Upgrade $http_upgrade;`\n`proxy_set_header Connection \"upgrade\";`\n\nCaddy los gestiona automáticamente; con nginx deben añadirse explícitamente.\n\n**4. Purga automática del historial de ejecución.** Sin purga, la tabla de ejecuciones crece indefinidamente. En una instancia activa durante meses puede llegar a varios gigabytes y degradar significativamente el rendimiento. Active la purga con:\n\n`EXECUTIONS_DATA_PRUNE=true`\n`EXECUTIONS_DATA_MAX_AGE=168`\n\nEl valor 168 corresponde a 7 días expresados en horas. Ajuste según su necesidad de retención.",{"type":38,"title":108,"body":109},"Mantener y hacer evolucionar la instancia","Para las actualizaciones, dos enfoques: Watchtower o una tarea cron manual (`docker pull n8nio\u002Fn8n:latest && docker compose up -d`). En ambos casos, lea las notas de versión antes de una actualización mayor. Mantenga sus exportaciones de workflows al día en un repositorio git.\n\nPara los advisories de seguridad, siga la página \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n\u002Fsecurity\u002Fadvisories\">GitHub Security Advisories del repositorio n8n\u003C\u002Fa>.",{"type":38,"title":111,"body":112},"Instalar a mano (alternativa)","Las secciones siguientes describen la instalación manual de n8n con Docker Compose: para un servidor en el que ServOrbit no instaló n8n, o para reconstruirlo todo usted mismo. En un VPS en el que ServOrbit lo instaló, no las necesita.",{"type":38,"title":114,"body":115},"Requisitos previos con cifras","Antes de empezar, compruebe que su VPS cumple los requisitos siguientes. Para un uso moderado, **1 vCPU y 1 GB de RAM bastan**; prevea **2 vCPU y 2 GB** en cuanto ejecute workflows pesados o concurrentes, y **4 GB** si conecta una base PostgreSQL dedicada o integra un modelo de IA local. Cuente con 10 GB de disco como mínimo para Docker, los volúmenes y los logs. El puerto **5678** no debe exponerse directamente — n8n solo escucha en `127.0.0.1:5678` y todas las peticiones pasan por el reverse proxy en el puerto **443**. Se requiere un subdominio (por ejemplo `n8n.su-dominio.com`) que apunte a la IP del VPS para HTTPS y los webhooks entrantes. Son necesarios Docker Engine 24+ y Docker Compose v2.",{"type":42,"title":117,"steps":118},"Instalación paso a paso",[119,122,125,128,131,134,137],{"title":120,"body":121},"Actualizar el VPS e instalar Docker","Conéctese por SSH y actualice los paquetes: `apt update && apt upgrade -y`. Instale después Docker con el script oficial: `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. Compruebe la instalación: `docker --version && docker compose version`. Cree el directorio de trabajo: `mkdir -p \u002Fopt\u002Fn8n && cd \u002Fopt\u002Fn8n`.",{"title":123,"body":124},"Crear el archivo docker-compose.yaml","Cree `docker-compose.yaml` con el servicio n8n, un volumen con nombre para la persistencia y las variables de entorno esenciales. Declare `image: n8nio\u002Fn8n:latest`, `restart: unless-stopped`, y monte `n8n_data:\u002Fhome\u002Fnode\u002F.n8n`. Exponga únicamente en `127.0.0.1:5678:5678` para evitar cualquier exposición pública directa del puerto.",{"title":126,"body":127},"Fijar las variables de entorno críticas","En la sección `environment` del servicio, declare como mínimo: `N8N_HOST=n8n.su-dominio.com`, `N8N_WEBHOOK_URL=https:\u002F\u002Fn8n.su-dominio.com\u002F` y `N8N_PROXY_HOPS=1`. El acceso no se configura con una variable: la autenticación básica se retiró de n8n 1.0, y es la gestión de usuarios integrada la que protege la instancia — en el primer arranque, usted crea la cuenta de propietario. Para producción, guarde estos valores en un archivo `.env` adyacente y refiéralo con `env_file: .env`.",{"title":129,"body":130},"Arrancar el contenedor","Lance: `docker compose up -d`. Compruebe que el contenedor funciona: `docker compose ps`. Consulte los logs: `docker compose logs -f n8n`. n8n está listo cuando aparece en los logs la línea `Editor is now accessible via: http:\u002F\u002Flocalhost:5678\u002F`.",{"title":132,"body":133},"Configurar el reverse proxy con Caddy (recomendado)","Caddy es el reverse proxy más sencillo para n8n: gestiona el certificado Let's Encrypt y su renovación sin configuración adicional. Instale Caddy (`apt install caddy`) y edite `\u002Fetc\u002Fcaddy\u002FCaddyfile` para añadir: `n8n.su-dominio.com { reverse_proxy localhost:5678 }`. Recargue: `systemctl reload caddy`. **Con nginx**, añada en su bloque `location`: `proxy_set_header X-Forwarded-Host $host;`, `proxy_set_header X-Forwarded-Proto $scheme;` y `proxy_set_header X-Real-IP $remote_addr;`.",{"title":135,"body":136},"Comprobar los webhooks entrantes","En el editor de n8n, cree un workflow de prueba con un node **Webhook**. La URL mostrada en modo producción debe ser exactamente `https:\u002F\u002Fn8n.su-dominio.com\u002Fwebhook\u002F\u003Csu-ruta>`. Dispare la llamada desde su máquina local: `curl -X POST https:\u002F\u002Fn8n.su-dominio.com\u002Fwebhook\u002Ftest -d '{}'`. Si la URL mostrada contiene `localhost` o el puerto `5678`, la variable `N8N_WEBHOOK_URL` no se tiene en cuenta.",{"title":138,"body":139},"Conectar PostgreSQL para producción","SQLite sirve para probar; en producción, prefiera PostgreSQL. Añada un servicio `postgres:15` al mismo `docker-compose.yaml`, con un volumen dedicado `pg_data`. En el servicio n8n, añada: `DB_TYPE=postgresdb`, `DB_POSTGRESDB_HOST=postgres`, `DB_POSTGRESDB_DATABASE=n8n`, `DB_POSTGRESDB_USER=n8n`, `DB_POSTGRESDB_PASSWORD=\u003Ccontraseña>`. Reinicie el conjunto: `docker compose up -d`.",{"type":141,"title":142,"body":143},"tip","Endurecimiento y modo queue","Tres reflejos de producción: (1) No exponer nunca el puerto 5678 en la interfaz pública — mantenga el enlace `127.0.0.1:5678`. (2) Cree la cuenta de propietario en el primer arranque: la autenticación básica se retiró de n8n 1.0, la gestión de usuarios integrada protege la instancia y el primer visitante se convierte en su propietario. (3) Para workflows de IA o de larga duración, pase al modo queue con una instancia `worker` separada y una cola Redis.","Su VPS para n8n","ServOrbit ofrece VPS Linux con acceso root, IPv4 dedicada y SSD, listos para alojar Docker y n8n sin configuración adicional. Consulte la página de desarrolladores para elegir la configuración adecuada a sus workflows.","Descubrir los VPS de ServOrbit","\u002Fsolutions\u002Fdeveloppeurs",[149],{"id":150,"slug":151,"slugs":152,"title":156,"excerpt":157,"readTime":158,"views":9,"isPinned":19,"noindex":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":166,"featuredImage":29,"bgImage":30,"posterImage":168,"relatedSolution":169},93,"n8n-vs-node-red-que-automatizacion-self-hosted-elegir",{"fr":153,"en":154,"ar":155,"es":151},"n8n-vs-node-red","n8n-vs-node-red-which-self-hosted-automation-tool-to-choose","n8n-مقابل-node-red-أي-أداة-أتمتة-مستضافة-ذاتيا-تختار","n8n vs Node-RED self-hosted: ¿cuál elegir en 2026?","n8n o Node-RED en tu VPS: comparativa de licencia, recursos, IoT vs SaaS, pasos de migración y despliegue con Docker Compose.",9,"2026-03-19T00:00:00+00:00","2026-11-08T01:13:15+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},5,"Comparativas","comparatif","bg-info\u002F10 text-info",[167],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fn8n-vs-node-red-poster.svg",{"categorySlug":33,"appSlug":34},true,1794270611495]