La mascota oso polar de NordBastion sentado en un banco de piedra tallada en una bóveda nórdica oscura, con un portátil sobre el regazo y un gran flujo de trabajo de automatización holográfico cian flotando sobre él — seis nodos redondeados unidos por cables curvos luminosos — con el escudo N cian apoyado contra el banco y un rack de servidores a su lado
Cómo hacerlo · Autoalojamiento·13 min de lectura · 30 min prácticos

Autoalojar n8n en un VPS.
Su motor de automatización, sus credenciales, su servidor.

Seis pasos desde un VPS nórdico desnudo hasta un n8n con TLS terminado en su propio dominio — Docker Compose, Caddy, PostgreSQL, webhooks que realmente se activan. Ejecuciones limitadas por su CPU, no por un nivel de plan, en una máquina que cuesta $3.90 al mes. Probado en Debian 12 con n8n 2.x.

Los seis pasos
  1. 01

    Aprovisionar

    VPS + un registro A

  2. 02

    Instalar

    get.docker.com

  3. 03

    Compose

    n8n + Caddy + Postgres

  4. 04

    Primer arranque

    Cuenta propietaria + 2FA

  5. 05

    Webhooks

    WEBHOOK_URL

  6. 06

    Bastionar

    Podar, silenciar, respaldar

Antes de empezar · Licencia y coste

Lo que realmente está instalando. Y lo que la licencia le permite hacer con ello.

n8n es un motor de automatización de flujos de trabajo: un lienzo visual donde se conecta un disparador — un webhook, una programación, una fila nueva en una base de datos, un mensaje en una cola — a una cadena de nodos que llaman a APIs, transforman datos, se ramifican según condiciones, ejecutan JavaScript o Python arbitrario, y entregan el resultado a lo que venga después. Trae de serie varios cientos de nodos de integración, además de un nodo HTTP Request genérico que cubre todo lo demás. Desde la línea 1.x también incorpora nodos AI Agent y LLM, razón por la cual gran parte de quienes lo instalan en 2026 están construyendo agentes en lugar de la clásica fontanería ETL.

La parte que importa antes de escribir un solo comando es la licencia, porque n8n no es de código abierto en el sentido de la OSI y la diferencia no es académica. El núcleo se distribuye bajo la Sustainable Use License: una concesión no exclusiva, libre de regalías y mundial para usar, copiar, modificar y distribuir el software con fines empresariales internos y para uso personal o no comercial. Lo que retiene es el derecho a cobrar a terceros por n8n o por un derivado de él — la cláusula que descarta construir sobre eso un producto de pago de «n8n gestionado». Por separado, cualquier archivo que lleve .ee. en su nombre o .ee en su ruta queda excluido por completo de esa licencia y requiere una n8n Enterprise License de pago.

Dicho sin rodeos: ejecutar n8n en un VPS para automatizar su propia empresa, el trabajo de sus propios clientes entregado como un servicio que usted presta, o su propia vida personal, está dentro de la concesión gratuita y siempre lo ha estado. Vender n8n como producto de alojamiento no lo está. Casi todos los debates de «¿n8n es realmente gratis?» en internet son dos personas hablando sin entenderse a través de esa línea.

El lado del coste. n8n Cloud tiene precio por ejecución: el plan Starter cuesta €20 al mes facturados anualmente por 2 500 ejecuciones, Pro cuesta €50 al mes por 10 000, Business cuesta €667 al mes por 40 000. Autoalojado, el número de ejecuciones no es en absoluto una partida — está limitado por la cantidad de CPU y memoria que tenga la máquina. Un flujo de trabajo que consulta una API cada cinco minutos consume por sí solo 8 640 ejecuciones al mes; en Cloud ese único flujo de trabajo ya obliga al nivel Pro, y en un VPS de $3.90 es un error de redondeo frente a la CPU en reposo.

Opción Mensual Ejecuciones incluidas Quién lo gestiona
n8n Cloud · Starter€202 500n8n GmbH
n8n Cloud · Pro€5010 000n8n GmbH
n8n Cloud · Business€66740 000n8n GmbH
Autoalojado · VPS Sentinel$3.90Limitado por CPU, no por mediciónUsted

Precios de Cloud publicados en n8n.io en agosto de 2026, facturados anualmente; la facturación mensual cuesta más. El intercambio no es solo dinero — el autoalojamiento traslada las actualizaciones, las copias de seguridad, la renovación de TLS y el tiempo de actividad a su lado de la línea.

Antes de empezar · Dimensionamiento

Dimensionar la máquina. Cuatro gigabytes es el mínimo, el disco es el que sorprende.

La propia documentación de Docker Compose de n8n da como mínimo 2 vCPU y 4 GB de RAM. No es una cifra de marketing: por debajo de eso, el front-end del editor y un flujo de trabajo moderadamente ramificado competirán por la memoria, y el primer payload JSON grande tumbará el contenedor con un out-of-memory kill.

Sentinel · 2 vCPU, 4 GB, 120 GB NVMe, $3.90/mes. El valor por defecto correcto. Ejecuta n8n, PostgreSQL y Caddy juntos con margen para una instancia personal o de equipo pequeño que hace unos cientos de ejecuciones al día. La memoria en reposo ronda los 700 MB entre los tres contenedores.

Garrison · 4 vCPU, 8 GB, 240 GB NVMe, $7.90/mes. El siguiente escalón cuando añade modo cola con Redis y uno o dos contenedores worker, cuando los flujos de trabajo suelen mantener payloads de varios megabytes en memoria, o cuando quiere un margen cómodo para flujos de trabajo de agentes de IA que se ramifican en varias ramas paralelas.

Ravelin · 8 vCPU, 16 GB, 480 GB NVMe, $16.90/mes. Una instancia de equipo con miles de ejecuciones al día y trabajo intensivo en binarios — generación de PDF, procesamiento de imágenes, transcripción de audio. Aquí los núcleos dedicados importan porque esas cargas de trabajo dependen de la CPU y no de la API.

El disco es la parte que la gente olvida. n8n almacena la entrada y la salida completas de cada nodo de cada ejecución. Un flujo de trabajo hablador ejecutándose cada minuto escribe cientos de megabytes por semana. Los valores por defecto sí podan — EXECUTIONS_DATA_PRUNE es true, EXECUTIONS_DATA_MAX_AGE es 336 horas (catorce días) y EXECUTIONS_DATA_PRUNE_MAX_COUNT es 10 000 — pero catorce días de una instancia activa siguen siendo mucho NVMe. El paso 06 ajusta eso.

Paso 01 · Aprovisionar

Un VPS nórdico y un registro DNS. En ese orden.

En el panel: Order → VPS → Sentinel, imagen Debian 12. No se requiere ninguna dirección de correo electrónico para abrir la cuenta, no se pide ningún documento de identidad en ningún momento, y la factura se salda en Monero, Bitcoin, Lightning o cualquier otro de los activos admitidos. Elija el bastión por la latencia hacia los servicios que automatiza y no hacia usted mismo — un servidor de automatización habla con APIs mucho más de lo que habla con usted.

Después cree el registro DNS antes de tocar el servidor: un registro A para n8n.example.com que apunte a la IPv4 del VPS, y un registro AAAA si usa IPv6. Esto hay que hacerlo primero, porque Caddy pide un certificado a Let's Encrypt en el momento en que arranca la pila, y una solicitud de certificado para un nombre que no resuelve falla — y luego se retira, y usted se pasa veinte minutos preguntándose por qué el sitio es inalcanzable.

Dele un minuto al DNS para propagarse y confírmelo desde su propia máquina antes de continuar:

dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else

Antes de que nada escuche en un puerto público, ejecute la lista de refuerzo de la primera hora — SSH solo con clave, un firewall que permita 22, 80 y 443 y nada más, y actualizaciones de seguridad desatendidas. Un servidor de automatización es una caja fuerte de credenciales; se merece la hora entera.

Paso 02 · Instalar

Docker, y nada más. Un comando.

Conéctese por SSH e instale Docker Engine con el plugin Compose v2:

apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version

El script de conveniencia instala Engine, CLI, containerd y el plugin Compose desde el propio repositorio de Docker. La última línea debería imprimir Docker Compose version v2 o superior; si imprime «docker: 'compose' is not a docker command» tiene instalado el paquete docker.io más antiguo de la distribución y debería eliminarlo primero.

Existe un instalador de n8n de una sola línea que envuelve todo esto, y funciona. Esta guía en cambio escribe el archivo Compose a mano, porque todo lo que más adelante necesitará cambiar — la clave de cifrado, la base de datos, la URL del webhook, la política de retención, el número de workers — vive en ese archivo, y una pila que no puede leer es una pila que no puede arreglar a las 3 de la madrugada.

Paso 03 · Compose

Tres archivos en /opt/n8n. n8n, PostgreSQL, Caddy.

Cree primero el directorio y genere los dos secretos. Genérelos ahora, en este orden, y péguelos en el .env a medida que avanza — la clave de cifrado en particular debe existir antes del primer arranque de n8n, no después.

mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32   # → N8N_ENCRYPTION_KEY
openssl rand -hex 24   # → POSTGRES_PASSWORD

/opt/n8n/.env

DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm

N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here

Bloquee el archivo de inmediato — contiene la clave de todas las credenciales que la instancia llegará a almacenar:

chmod 600 /opt/n8n/.env

/opt/n8n/docker-compose.yml

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - DOMAIN=${DOMAIN}
      - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - N8N_HOST=${DOMAIN}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_EDITOR_BASE_URL=https://${DOMAIN}
      - WEBHOOK_URL=https://${DOMAIN}/
      - N8N_PROXY_HOPS=1
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_VERSION_NOTIFICATIONS_ENABLED=false
      - N8N_PERSONALIZATION_ENABLED=false
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  caddy_data:
  caddy_config:
  pg_data:
  n8n_data:

/opt/n8n/Caddyfile

{$DOMAIN} {
    encode zstd gzip
    tls {$LETSENCRYPT_EMAIL}
    reverse_proxy n8n:5678
}

Dos decisiones de diseño que merece la pena nombrar. Primero, n8n no publica ningún puerto. Solo Caddy se une a 80 y 443; n8n escucha en 5678 dentro de la red de Compose, donde nada fuera del host puede alcanzarlo. Un número sorprendente de instancias de n8n autoalojadas están en internet público en el puerto 5678 sin TLS por delante, y los motores de búsqueda de servicios expuestos las indexan. Segundo, el volumen de datos de n8n sigue montado aunque PostgreSQL ahora contenga los flujos de trabajo — ese directorio sigue conteniendo la configuración de la instancia, los archivos de registro y los recursos de control de versiones.

Levántelo:

cd /opt/n8n
docker compose up -d
docker compose logs -f caddy   # watch the certificate being issued
Paso 04 · Primer arranque

La cuenta propietaria, y la clave que no debe perder. Lea esta dos veces.

Abra https://n8n.example.com. La primera pantalla es la configuración de la cuenta propietaria — correo electrónico, contraseña, nombre. Ya no hay ninguna variable de entorno de autenticación básica HTTP que configurar; la gestión de usuarios está integrada en n8n desde la línea 1.x, y la cuenta que crea aquí es la propietaria de la instancia. Use una contraseña de su gestor de contraseñas, y luego vaya directamente a Settings → Personal → Two-factor authentication y actívela. Este acceso es la puerta de entrada a cada clave de API que llegue a pegar en un nodo.

El único error irreversible

n8n cifra cada credencial almacenada con N8N_ENCRYPTION_KEY. Si no la fija, n8n genera una en el primer arranque y la escribe dentro del volumen de datos. Recree ese volumen — un docker compose down -v, una migración a un servidor nuevo, una restauración mal hecha — y la nueva instancia genera una clave distinta, todas las credenciales de la base de datos quedan indescifrables, y no hay ninguna vía de recuperación en absoluto. Hay que volver a introducir a mano cada clave de API, token OAuth y contraseña. Fije la clave explícitamente, como hace esta guía, y guarde una copia fuera del servidor.

El lugar correcto para esa copia es un gestor de contraseñas que usted también controle — la guía de Vaultwarden autoalojado cubre uno, y el punto deliberado es que no debería vivir en la misma máquina que aquello que desbloquea.

Verifique que la base de datos es realmente PostgreSQL y no el fallback a SQLite — si las variables DB_ tienen un error tipográfico, n8n arranca en silencio sobre SQLite y usted se entera tres meses después:

docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
Paso 05 · Webhooks

La mitad que no funciona en silencio. Webhooks detrás de un proxy.

Un n8n que arranca, muestra el editor y ejecuta una prueba manual todavía no es un n8n que funciona. La mitad que falla en silencio son los webhooks entrantes, y falla de formas que parecen culpa del servicio de terceros.

WEBHOOK_URL. Sin ella, n8n construye las URL de webhook a partir de N8N_HOST y N8N_PORT y le entrega algo como http://localhost:5678/webhook/abc — que luego pega en Stripe o GitHub, donde nunca podrá alcanzarse. El archivo Compose de arriba fija WEBHOOK_URL a la raíz HTTPS pública, que es lo que mostrará el editor y lo que el mundo exterior realmente puede llamar.

N8N_EDITOR_BASE_URL. La URL pública que n8n usa para los enlaces en los correos que envía — restablecimientos de contraseña, invitaciones de usuario. Si esto está mal, significa un enlace de invitación que apunta a localhost, lo cual es un ticket de soporte de un compañero en lugar de una integración rota.

N8N_PROXY_HOPS. n8n lee la IP del cliente desde X-Forwarded-For, y solo confía en tantos saltos como indique este número. Con un proxy inverso delante — el Caddy de esta pila — el valor es 1. Ponga Cloudflare delante de Caddy y pasa a ser 2. Déjelo en el valor por defecto 0 y cada petición parecerá venir del propio proxy, lo que rompe silenciosamente los límites de tasa y cualquier lógica basada en IP en sus flujos de trabajo.

N8N_SECURE_COOKIE. Por defecto es true, lo que significa que la cookie de sesión solo se envía por HTTPS. Es el ajuste correcto y esta pila lo cumple. Merece la pena saberlo porque explica el síntoma clásico de un primer intento sobre http plano: el formulario de acceso acepta la contraseña y luego le devuelve al formulario de acceso, indefinidamente. La solución es TLS, no desactivar la marca.

Pruébelo como es debido. Cree un flujo de trabajo con un nodo Webhook, active el flujo de trabajo, copie la Production URL, y llámela desde una máquina que no sea el servidor:

curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor

La distinción con la que todo el mundo tropieza al menos una vez: la Test URL solo escucha mientras tiene el editor abierto con «Listen for test event» activado. La Production URL solo existe cuando el flujo de trabajo está marcado como Active. Un webhook que funciona en el editor y da 404 en producción es casi siempre un flujo de trabajo inactivo.

Paso 06 · Reforzar

Podar, silenciar, respaldar. Las tres que deciden si sobrevive un año.

Retención. Los valores por defecto conservan catorce días o 10 000 ejecuciones, lo que llegue primero, con los datos completos de entrada y salida de cada nodo. En un NVMe pequeño con un disparador de programación activo, eso es lo que llena el disco. Añada esto al bloque de entorno de n8n y reinicie:

- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168          # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise

EXECUTIONS_DATA_SAVE_ON_SUCCESS=none es la mayor mejora posible en una instancia de alta frecuencia: deja de escribir los payloads de las ejecuciones que funcionaron, mientras sigue almacenando cada ejecución fallida completa para poder depurarla. Manténgalo en «all» mientras todavía está construyendo el flujo de trabajo, y cámbielo en cuanto el flujo de trabajo sea aburrido.

Silencio. El archivo Compose ya desactiva la telemetría, las notificaciones de versión y la encuesta de personalización. El único llamante saliente que queda es la galería de plantillas, que consulta api.n8n.io; fije N8N_TEMPLATES_ENABLED=false si no quiere ninguna llamada a terceros en absoluto. Si desactiva las notificaciones de versión, ponga un recordatorio mensual en su calendario para leer las notas de la versión — una instancia autoalojada que nadie actualiza es un resultado peor que una que consulta versiones.

El nodo Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, ya presente en el archivo, impide que las expresiones y los nodos Code lean las variables de entorno del proceso — que en esta máquina significa la contraseña de PostgreSQL y la clave de cifrado. Si no usa la API REST pública, añada N8N_PUBLIC_API_DISABLED=true y cierre también esa superficie.

Copias de seguridad — las tres partes o ninguna. Una copia de seguridad de la base de datos por sí sola no vale nada sin la clave de cifrado, y la clave por sí sola no restaura nada. Haga copia de seguridad del volcado de PostgreSQL, del volumen de datos de n8n y del .env juntos, y conserve al menos una copia fuera del servidor:

cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)

El nombre del volumen es el nombre del proyecto Compose más el nombre del volumen; si su directorio no se llama n8n, ejecute docker volume ls y use lo que vea. Ponga las tres líneas en un cron, envíe los archivos a otro sitio, y pruebe una restauración una vez — una copia de seguridad sin probar es una creencia, no una copia de seguridad.

Actualizaciones. docker compose pull seguido de docker compose up -d. Haga primero una instantánea: n8n ejecuta migraciones de base de datos al arrancar, y las migraciones no están diseñadas para revertirse. Al cruzar una versión mayor — el salto de 1.x a 2.x, por ejemplo — lea las notas de la versión antes de hacer pull y no después, y considere fijar una etiqueta de imagen explícita en vez de :latest para que un reinicio desatendido nunca le actualice por sorpresa.

Yendo más allá · Escalado

Cuando un solo proceso no basta. Modo cola, Redis y workers.

Por defecto n8n se ejecuta en modo regular: el mismo proceso que sirve el editor y recibe los webhooks también ejecuta los flujos de trabajo. Es simple y es correcto hasta que un flujo de trabajo largo empieza a hacer esperar a los demás. El síntoma es inconfundible — las ejecuciones quedan en «running» durante minutos, el editor se vuelve lento, y un webhook que debería responder en 200 ms responde en ocho segundos.

El modo cola divide el trabajo. La instancia principal conserva el editor, los disparadores y los endpoints de webhook; empuja los ID de ejecución a Redis; procesos worker independientes los recogen, cargan el flujo de trabajo desde PostgreSQL, lo ejecutan y responden a través de Redis. De esa arquitectura se derivan tres reglas, y las tres muerden a quienes las pasan por alto: todas las instancias deben compartir la misma base de datos PostgreSQL, todas las instancias deben llevar la misma N8N_ENCRYPTION_KEY, y SQLite no está soportado en absoluto.

Las incorporaciones al archivo Compose son un servicio Redis y un servicio worker, que es la misma imagen de n8n ejecutada con el comando worker:

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
    volumes:
      - redis_data:/data

  n8n-worker:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    command: worker --concurrency=5
    depends_on:
      - redis
      - postgres
    environment:
      # the SAME encryption key and the SAME database as the main instance
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}

Añada también EXECUTIONS_MODE=queue y QUEUE_BULL_REDIS_HOST=redis al servicio principal de n8n — ambos lados deben coincidir en el modo. Hay dos opciones que merece la pena fijar desde el primer día: OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, para que pulsar «Test workflow» en el editor no bloquee el proceso principal, y N8N_GRACEFUL_SHUTDOWN_TIMEOUT, que por defecto es de 30 segundos y decide cuánto tiempo se le permite a un worker terminar su tarea actual durante un redespliegue. Si sus flujos de trabajo suelen tardar más de medio minuto, auméntelo o cada despliegue matará trabajo en curso.

No empiece por aquí. El modo cola añade dos piezas móviles y una clase de fallo que el modo regular simplemente no tiene. Quédese en modo regular hasta que vea la cola crecer o un flujo de trabajo bloqueando a otro, y entonces añada un único worker en la misma máquina antes de añadir una segunda máquina. Esa progresión — Sentinel en modo regular, Garrison con un worker, Ravelin con tres — cubre todo salvo un despliegue genuinamente grande.

La capa bajo la aplicación

Lo que la máquina realmente contiene. Y por qué eso cambia quién debería poseerla.

La mayoría de las guías de autoalojamiento tratan la elección del host como una cuestión de rendimiento. Para un motor de automatización no lo es. Una instancia de n8n contiene dos cosas que casi ningún otro servicio que se autoaloja contiene juntas: una única tabla cifrada con las claves de API, los tokens OAuth y las contraseñas de correo de cada servicio que automatiza, y — justo al lado — un grafo que describe exactamente cómo funciona su organización. Qué CRM. Qué feed bancario. Qué proveedor. Qué clientes reciben qué correo, con qué disparador. Lea la lista de flujos de trabajo de una empresa y habrá leído la empresa.

Capa uno — quién cree el host que es usted. La capa de aplicación aquí es genuinamente buena: las credenciales están cifradas en reposo, el editor está detrás de TLS y 2FA. La capa que filtra es la de debajo. Un plan alojado conoce su entidad legal, su dirección de facturación y su tarjeta. Un hyperscaler conoce lo mismo y lo guarda durante años. Esa no es una exposición hipotética; es la clave de unión entre «existe una caja fuerte cifrada» y «pertenece a esta empresa con nombre». Un alta sin correo electrónico y sin documento de identidad, saldada en Monero, elimina la clave de unión en lugar de la caja fuerte.

Capa dos — el disco. El cifrado en reposo solo ayuda contra alguien que no tenga también la clave, y en una instalación por defecto la clave está en el mismo sistema de archivos que la base de datos. Mantenga el .env en modo 600, conserve una copia de la clave fuera de la máquina, y prefiera un proveedor cuya jurisdicción no convierta un centro de datos en un lugar cómodo para notificar un proceso judicial — que es todo el argumento de la guía de jurisdicciones nórdicas.

Capa tres — la IP de salida. Cada nodo HTTP Request sale desde la dirección del VPS, y esa dirección tiene una reputación. Los rangos de los hyperscalers son los más limitados en tasa de peticiones y bloqueados por CAPTCHA de todo internet, porque ahí es donde viven los scrapers; un flujo de trabajo que hace scraping o polling empezará a fallar en una IP de AWS o DigitalOcean mucho antes de fallar en un rango nórdico más discreto. n8n también respeta las variables estándar HTTP_PROXY, HTTPS_PROXY, ALL_PROXY y NO_PROXY, de modo que el puñado de flujos de trabajo que necesitan una salida distinta puede enrutarse a través de un proxy SOCKS local o de Tor mientras todo lo demás sale directo.

Una puerta más, nueva en la línea 2.x: n8n puede exponer un servidor MCP a nivel de instancia para que un agente de IA pueda llamar a sus flujos de trabajo como herramientas. Es genuinamente útil y también es un endpoint público hacia su capa de automatización, que merece el mismo trato que cualquier otro — consulte la guía de servidor MCP remoto para el razonamiento sobre TLS, OAuth y exposición.

Notas de campo · Seis trampas

Seis formas en que esto sale mal. En el orden en que la gente se las encuentra.

Trampa 01 · Irreversible

Todas las credenciales dejan de descifrarse de repente

El volumen de datos se recreó y n8n generó una clave de cifrado nueva. Nada recupera las credenciales antiguas. Fije siempre N8N_ENCRYPTION_KEY explícitamente y conserve una copia fuera del servidor.

Trampa 02 · Integración

La URL del webhook dice localhost

WEBHOOK_URL no está definida, así que n8n construye las URL a partir de N8N_HOST. Fije WEBHOOK_URL y N8N_EDITOR_BASE_URL a la dirección HTTPS pública y reinicie el contenedor.

Trampa 03 · Acceso

El formulario de acceso entra en bucle indefinidamente

Está accediendo al editor por http plano y la cookie de sesión segura se rechaza. Termine la configuración de TLS en lugar de fijar N8N_SECURE_COOKIE en false en una instancia pública.

Trampa 04 · Capacidad

El disco se llena al cabo de dos meses

Catorce días de datos de ejecución completos de un disparador minuto a minuto. Reduzca EXECUTIONS_DATA_MAX_AGE y PRUNE_MAX_COUNT, y deje de guardar las ejecuciones correctas.

Trampa 05 · Actualización

Un reinicio desatendido trajo una versión mayor

La etiqueta :latest más migraciones de base de datos que no se pueden revertir. Fije una etiqueta explícita, haga una instantánea antes de cada pull, y lea las notas de la versión al cruzar versiones mayores.

Trampa 06 · Programación

Los disparadores de programación se activan a la hora equivocada

GENERIC_TIMEZONE tiene por defecto America/New_York, algo que casi nunca es lo que se quiere. Fije GENERIC_TIMEZONE y TZ a la misma zona real y reinicie.

Preguntas frecuentes · Autoalojar n8n

Preguntas, respondidas.

Diez preguntas que surgen antes, durante y después de trasladar una instancia de n8n a su propio servidor.

¿Autoalojar n8n es realmente gratis?

Para sus propias automatizaciones, sí. n8n se distribuye bajo la Sustainable Use License: puede usarlo, copiarlo, modificarlo y distribuirlo para fines empresariales internos y para uso personal o no comercial, sin coste alguno. Lo que la licencia prohíbe es cobrar a terceros por n8n o por un derivado de él — en la práctica, revender «alojamiento de n8n» como producto. Los archivos con .ee. en el nombre o .ee en la ruta del directorio quedan excluidos de esa licencia y requieren una n8n Enterprise License de pago. Así que: automatizar su propia empresa en un VPS que alquila está claramente dentro de la concesión gratuita; construir un negocio de n8n alojado sobre eso no lo está.

¿Cuánto VPS necesito para ejecutar n8n?

La propia documentación de Docker Compose de n8n indica un mínimo de 2 vCPU y 4 GB de RAM. Eso es exactamente el nivel Sentinel ($3.90/mes — 2 vCPU, 4 GB, 120 GB NVMe), que ejecuta cómodamente n8n más PostgreSQL más Caddy para una instancia personal o de equipo pequeño. Suba al Garrison (4 vCPU, 8 GB, $7.90/mes) cuando añada workers en modo cola o ejecute flujos de trabajo que mantengan payloads grandes en memoria, y al Ravelin (8 vCPU, 16 GB, $16.90/mes) para una instancia de equipo que hace miles de ejecuciones al día con datos binarios — PDF, imágenes, audio.

¿SQLite o PostgreSQL para n8n?

SQLite es el valor por defecto y es genuinamente adecuado para una sola persona con un puñado de flujos de trabajo. Cambie a PostgreSQL cuando tenga ejecuciones concurrentes, cuando el historial de ejecuciones supere unos cientos de miles de filas, o cuando planee escalar — y tenga en cuenta que el modo cola no soporta SQLite en absoluto. Migrar más adelante significa exportar los flujos de trabajo y las credenciales y volver a importarlos en una instancia nueva, lo cual es una tarde que no va a disfrutar. Si existe alguna posibilidad de crecimiento, empiece con PostgreSQL; el archivo Compose de esta guía ya lo hace.

¿Qué ocurre si pierdo la N8N_ENCRYPTION_KEY?

Todas las credenciales de la base de datos quedan permanentemente ilegibles. n8n cifra las credenciales almacenadas — tokens OAuth, claves de API, contraseñas SMTP — con esa clave, y no existe mecanismo de recuperación ni ticket de soporte que las devuelva. Hay que volver a introducir cada credencial a mano. Esta es la forma más común de destruir una instancia de n8n autoalojada: alguien recrea el volumen Docker, n8n genera una clave nueva, y todos los flujos de trabajo empiezan a fallar a la vez con un error de descifrado. Fije la clave explícitamente en su .env antes del primer arranque, y guarde una copia en algún sitio que no sea el servidor.

¿Por qué no se activan mis webhooks de n8n?

Cuatro causas, por orden de frecuencia. (1) WEBHOOK_URL no está definida, así que el editor le entrega una URL http://localhost:5678/webhook/… que ningún servicio externo puede alcanzar — fíjela a su URL HTTPS pública. (2) El flujo de trabajo no está activado; la URL de prueba solo escucha mientras el editor está abierto, la URL de producción solo existe una vez que el flujo de trabajo está activo. (3) DNS o el firewall: el registro no resuelve, o los puertos 80/443 están cerrados. (4) Está detrás de una capa de proxy adicional y no fijó N8N_PROXY_HOPS, así que n8n lee la IP de cliente equivocada. Pruebe con un curl sencillo desde una máquina que no sea el servidor.

¿Puedo ejecutar n8n junto a otros servicios en el mismo VPS?

Sí, y es el patrón normal — un Caddy delante, una red de Compose, n8n en un nombre de host y Vaultwarden, Nextcloud o SearXNG en otros. Dos advertencias. Memoria: n8n más PostgreSQL está en reposo alrededor de 700 MB y un flujo de trabajo pesado puede dispararse mucho más allá de eso, así que deje margen. Radio de impacto: la base de datos de n8n es lo más denso en credenciales de la máquina, así que cualquier otra cosa que comparta ese host hereda su perfil de riesgo. En un nivel de $3.90/mes es razonable darle al motor de automatización su propio servidor.

¿El n8n autoalojado envía datos a casa?

Por defecto, tres endpoints. Telemetría anónima del producto (N8N_DIAGNOSTICS_ENABLED, por defecto true), la comprobación de nueva versión y actualizaciones de seguridad contra api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED, por defecto true), y el explorador de plantillas de flujos de trabajo, que consulta https://api.n8n.io (N8N_TEMPLATES_ENABLED, por defecto true). Ninguno de ellos envía sus credenciales ni los datos de sus flujos de trabajo, pero los tres anuncian que existe una instancia en su IP. Ponga los tres en false si quiere que la máquina permanezca silenciosa — pierde la galería de plantillas y el aviso de actualización, así que vigile usted mismo las nuevas versiones.

¿n8n Cloud o autoalojado — dónde está el punto de equilibrio?

n8n Cloud Starter cuesta €20/mes facturados anualmente por 2 500 ejecuciones; Pro cuesta €50/mes por 10 000. Un VPS Sentinel cuesta $3.90/mes y el número de ejecuciones solo está limitado por la CPU y la RAM, lo que para flujos de trabajo típicos de webhook y API significa decenas de miles. El punto de equilibrio monetario es inmediato; el coste real es operativo. Autoalojar significa que usted asume las actualizaciones, las copias de seguridad, la renovación de TLS y el incidente de disco lleno a las 3 de la madrugada. La regla honesta: si usted no habría actualizado la instancia por su cuenta dentro de un mes de una publicación de seguridad, pague por Cloud. Si un docker compose pull mensual ya forma parte de su vida, autoalójese.

¿Por qué importa un host sin KYC específicamente para un servidor de automatización?

Por lo que contiene una instancia de n8n. La tabla de credenciales es un único almacén cifrado con las claves de API, los tokens OAuth y las contraseñas de correo de cada servicio que automatiza, y el grafo de flujos de trabajo que hay junto a ella es un mapa legible de cómo funciona realmente su negocio — qué CRM, qué feed bancario, qué proveedor, qué clientes. Un sitio web estático no filtra nada de eso. La capa de aplicación lo protege bien; la capa de metadatos es donde se filtra. Si el alta de la máquina lleva un escaneo de pasaporte y una tarjeta, ha cifrado la caja fuerte y ha escrito su nombre en la puerta. Un host no-KYC pagado en Monero mantiene las dos capas alineadas.

¿Puedo ejecutar agentes de IA en n8n en este VPS?

Sí, para el caso habitual — un nodo AI Agent llamando a una API de modelo remota. Esa carga de trabajo depende de E/S, espera al proveedor, y un Sentinel la maneja bien. Lo que no encaja es ejecutar el modelo en sí: un modelo local de 7B quiere unos 8 GB de RAM y una velocidad de inferencia real quiere una GPU, algo que estos niveles no llevan. Apunte n8n a un endpoint remoto compatible con OpenAI y mantenga el VPS ligero. La guía complementaria sobre ejecutar un agente de IA 24/7 cubre el lado de la ejecución — políticas de reinicio, secretos, límites de gasto y la trampa del bucle de fallos.

Obtener el servidor

Un VPS nórdico para su motor de automatización. Sin KYC, pago en criptomoneda.

Sentinel (2 vCPU, 4 GB, 120 GB NVMe, $3.90/mes) cumple el mínimo de n8n con margen para PostgreSQL y Caddy en la misma máquina. Sin correo electrónico en el alta, sin documento de identidad, ejecuciones ilimitadas.

Última revisión · 2026-08-24 · Fuentes · Documentación de alojamiento de n8n, n8n LICENSE.md (Sustainable Use License), página de precios de n8n.io, documentación oficial de Docker y Caddy · Cadencia · anual