Despliega n8n en tu propio servidor: dominio, flujos de trabajo y copias de seguridad

Despliega n8n con la plantilla de Zenavo, configura HTTPS, la URL de los webhooks y la zona horaria, ejecuta tu primer flujo de trabajo y guarda la clave de cifrado y la copia de seguridad del volumen.

Este artículo también está disponible en English, 简体中文, 繁體中文, 日本語 y Bahasa Indonesia.

Pasar las respuestas de un formulario a una hoja de cálculo, resumir mensajes a una hora fija o llamar a una API cuando llega un webhook: ese tipo de tareas repetitivas es justo lo que resuelve n8n. Al alojarlo tú mismo no tienes límites por número de ejecuciones y tanto los flujos como las credenciales se quedan en tu propio servidor.

En esta guía usamos la plantilla de n8n de Zenavo para ir desde el despliegue, el dominio y los webhooks hasta las copias de seguridad y las actualizaciones. El servidor, Zenavo y las API de terceros que llamen tus flujos se facturan por separado.

Despliega n8n

Primero conecta un servidor Linux a Zenavo, abre la plantilla de n8n, elige el servidor y despliega.

Actualmente la plantilla configura:

Ajuste Valor o finalidad
Imagen n8nio/n8n:latest
Puerto HTTP 5678
Volumen /home/node/.n8n: aquí están la base de datos SQLite por defecto, los flujos de trabajo y las credenciales
N8N_ENCRYPTION_KEY Se genera al crear el proyecto y cifra las credenciales guardadas en los flujos
GENERIC_TIMEZONE UTC por defecto; más abajo la cambiamos a tu zona horaria
N8N_DIAGNOSTICS_ENABLED false, desactiva la telemetría

latest sigue las versiones nuevas del proyecto. Para un uso estable a largo plazo, entra en Ajustes → Origen del servicio n8n y fija la etiqueta de la imagen en una versión que hayas probado (por ejemplo, n8nio/n8n:1.82.0), para que un nuevo despliegue no cambie de versión sin que te des cuenta.

Asocia un dominio y configura los webhooks y la zona horaria

En la pestaña Red del servicio n8n, asocia un dominio como n8n.example.com al puerto 5678, añade en el DNS un registro A que apunte al servidor y espera a que esté activo el HTTPS. Los pasos están en Dominios y HTTPS.

Después abre la pestaña Variable del servicio n8n y añade el dominio y la zona horaria:

N8N_HOST=n8n.example.com
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://n8n.example.com/
WEBHOOK_URL=https://n8n.example.com/
N8N_PROXY_HOPS=1
GENERIC_TIMEZONE=Europe/Madrid
TZ=Europe/Madrid

Unas notas:

  • WEBHOOK_URL define la dirección pública que generan los nodos Webhook; si no la pones, los nodos mostrarán la dirección interna del contenedor (http://localhost:5678).
  • N8N_PROXY_HOPS=1 corresponde al salto por el proxy inverso de Zenavo. Si además pones por delante un CDN como Cloudflare, ajusta el número de saltos.
  • GENERIC_TIMEZONE marca la zona horaria por defecto de los disparadores programados (Schedule Trigger); cámbiala por la tuya, como America/Mexico_City o America/Bogota.

Guarda y reinicia el servicio, y luego abre https://n8n.example.com para crear la cuenta de propietario. Si más adelante cambias de dominio, actualiza también las variables de dirección anteriores.

Ejecuta tu primer flujo de trabajo y prueba un webhook

Dentro del editor, crea primero un flujo mínimo para comprobar que todo funciona:

  1. Crea un flujo nuevo y añade un Manual Trigger.
  2. Añade un nodo Edit Fields (Set) y crea un campo de texto message con el valor Hello from n8n.
  3. Haz clic en Test workflow, comprueba que el mensaje sale en el resultado de la derecha y guarda.

A continuación, comprueba que las peticiones externas llegan al nodo Webhook:

  1. Añade un nodo Webhook con HTTP Method en GET.
  2. Haz clic en Listen for test event, abre en el navegador la Test URL que muestra el nodo y comprueba que el editor recibe la petición al instante.
  3. Cuando conectes un servicio externo real (GitHub, Stripe, Slack, etc.), usa la Production URL y activa el interruptor Active arriba a la derecha del flujo. La Test URL solo funciona mientras el editor está escuchando una prueba.

Guarda a buen recaudo N8N_ENCRYPTION_KEY

Todas las claves de API, contraseñas de bases de datos y tokens OAuth que guardas en n8n se cifran con N8N_ENCRYPTION_KEY antes de escribirse en la base de datos.

Abre la pestaña Variable del servicio n8n y copia el valor de N8N_ENCRYPTION_KEY en tu gestor de contraseñas. No lo cambies después de desplegar. Si algún día restauras una copia de seguridad en un proyecto nuevo o en otro servidor, tendrás que poner exactamente la misma N8N_ENCRYPTION_KEY; sin ella, n8n no podrá descifrar las credenciales guardadas.

La opción de exportar un flujo como JSON desde el editor solo guarda los nodos y sus conexiones, sin credenciales ni historial de ejecuciones, así que no sustituye a una copia de seguridad completa.

Copias de seguridad y actualizaciones

Todos los datos de n8n están en el volumen /home/node/.n8n. Haz copia de seguridad desde la pestaña Copias de seguridad y restauración del servicio n8n:

  1. Elige un momento en que no haya tareas críticas en marcha y detén el proyecto (la copia de un volumen requiere que el proyecto esté detenido).
  2. Crea la copia de seguridad del volumen y, cuando termine, vuelve a iniciar el proyecto.
  3. Descarga una copia para guardarla junto con tu N8N_ENCRYPTION_KEY.

Los detalles están en Copias de seguridad y restauración. Si restauras la copia en un proyecto nuevo para probarla, ten en cuenta que los flujos activos volverán a ejecutar sus disparadores programados al arrancar: desactívalos antes o aísla el entorno de prueba.

Antes de actualizar, lee las notas de la versión de n8n, haz primero una copia de seguridad del volumen y cambia después la versión de la imagen en Ajustes → Origen. Como una actualización puede migrar el esquema de la base de datos, volver a la etiqueta anterior de la imagen no siempre basta para revertir; si hace falta volver atrás, restaura la copia previa a la actualización.

Preguntas frecuentes

¿El nodo Webhook sigue mostrando localhost:5678? Comprueba que has añadido WEBHOOK_URL=https://tu-dominio/ en la pestaña Variable y reinicia el servicio n8n después de guardar.

¿Un servicio externo recibe un 404 al llamar al webhook? Confirma que estás usando la Production URL (con /webhook/ y no /webhook-test/) y que el interruptor Active de la esquina superior derecha del flujo está encendido.

¿Las tareas programadas no se ejecutan a la hora esperada? Comprueba que GENERIC_TIMEZONE y TZ tienen tu zona horaria en Variable, y revisa en Settings → Timezone del propio flujo si tiene definida otra zona horaria distinta.

¿Qué servidor necesito? Para flujos ligeros del día a día basta un servidor de 1 vCPU y 2 GB de memoria. Si tus flujos procesan archivos grandes, listas JSON muy pesadas en memoria o muchas ejecuciones simultáneas, usa un servidor de 2 vCPU y 4 GB o más.

Empieza con la plantilla de n8n: asocia tu dominio, configura WEBHOOK_URL y la zona horaria, guarda N8N_ENCRYPTION_KEY y haz tu primera copia de seguridad del volumen.