n8n autoalojado
Despliega n8n con PostgreSQL en Skiffly desde la plantilla en un par de minutos y luego configura la URL de webhooks, un dominio propio, una clave de cifrado que conservas, respaldos, actualizaciones y el tamaño de los recursos.
Qué vas a construir: la plantilla n8n — un servicio n8n (n8nio/n8n, puerto 5678, un volumen de 2 GB para /home/node/.n8n) y un servicio Postgres (volumen de 10 GB) ya conectados entre sí — con un dominio público y, opcionalmente, un dominio propio y el modo de cola. Unos 5 minutos hasta tener el editor funcionando.
1. Desplegar la plantilla#
Nuevo proyecto → automation. En el lienzo, Nuevo servicio → Plantilla, busca n8n, Desplegar. No hace falta nada más: la contraseña de Postgres y N8N_ENCRYPTION_KEY se generan solas. Aparecen dos servicios y empiezan a compilarse; el servicio n8n pasa a SUCCESS cuando /healthz responde, normalmente en menos de un minuto.
2. Abrirlo#
La plantilla le da a n8n un dominio generado automáticamente (N8N_HOST, WEBHOOK_URL y N8N_EDITOR_BASE_URL referencian ${{self.SKIFFLY_PUBLIC_DOMAIN}}). Encuéntralo con skiffly domain -s n8n o en la tarjeta del servicio, ábrelo y crea la cuenta de propietario. Los nodos de webhook muestran la URL pública de inmediato.
Variables esperadas en el servicio n8n (skiffly variables -s n8n): DB_TYPE=postgresdb, DB_POSTGRESDB_HOST → postgres, N8N_ENCRYPTION_KEY, N8N_PROTOCOL=https, N8N_RUNNERS_ENABLED=true.
3. Conservar la clave de cifrado#
N8N_ENCRYPTION_KEY cifra todas las credenciales que guardas en n8n. Se generó al desplegar y vive en las variables del servicio y en /home/node/.n8n/config dentro del volumen. Cópiala ahora a un lugar seguro:
skiffly variables -s n8n --kv | grep N8N_ENCRYPTION_KEYSi alguna vez cambia, las credenciales guardadas quedan ilegibles.
4. Dominio propio#
skiffly domain -s n8n n8n.example.com
# crea los registros CNAME y TXT que imprime y luego:
skiffly domain status n8n.example.comUna vez verificado, las referencias self.SKIFFLY_PUBLIC_DOMAIN siguen apuntando al primer dominio del servicio, el generado. Cambia las tres variables de URL al dominio propio y vuelve a desplegar:
skiffly variables set -s n8n N8N_HOST=n8n.example.com WEBHOOK_URL=https://n8n.example.com/ N8N_EDITOR_BASE_URL=https://n8n.example.com/Los webhooks existentes siguen funcionando en el dominio anterior mientras lo conserves; elimínalo con skiffly domain delete cuando todo se haya movido.
5. Recursos#
La plantilla le da a n8n 1 vCPU / 1 GiB, suficiente para unas cuantas decenas de workflows. Los workflows pesados (archivos grandes, muchas ejecuciones en paralelo) necesitan 2 GiB: servicio → Configuración → Recursos. No actives App Sleeping para n8n: los disparadores programados se detienen mientras duerme, y los webhooks tendrían que esperar a que despierte.
El historial de ejecuciones hace crecer la base de datos; define EXECUTIONS_DATA_PRUNE=true y EXECUTIONS_DATA_MAX_AGE=168 (horas) para mantener Postgres pequeño.
6. Actualizaciones#
La plantilla fija n8nio/n8n:latest, así que volver a desplegar descarga la versión más reciente (skiffly redeploy -s n8n); n8n migra su base de datos al arrancar. Para controlar la versión, fija la imagen a una etiqueta: skiffly deploy --image n8nio/n8n:1.80.0 -s n8n. Lee las notas de la versión de n8n antes de saltar entre versiones mayores.
7. Respaldos#
De ambos volúmenes se toma un snapshot diario (03:00 UTC) junto con un volcado lógico de Postgres; hoy las restauraciones se hacen a través de soporte. Tu propia copia de los workflows es un solo comando:
skiffly ssh -s n8n -T -- n8n export:workflow --all --pretty > workflows.json
skiffly ssh -s n8n -T -- n8n export:credentials --all --decrypted > credentials.json # manejar con cuidado8. Modo de cola (opcional)#
Para muchas ejecuciones concurrentes, n8n corre una instancia principal más workers sobre Redis:
skiffly deploy --template redis.- En
n8n:EXECUTIONS_MODE=queue,QUEUE_BULL_REDIS_HOST=${{Redis.SKIFFLY_PRIVATE_DOMAIN}},QUEUE_BULL_REDIS_PORT=6379,QUEUE_BULL_REDIS_PASSWORD=${{Redis.REDIS_PASSWORD}}(la plantilla genera una). - Un servicio
workerdesde la misma imagen (skiffly deploy --image n8nio/n8n:latest --name n8n-worker), comando de inicion8n worker, las mismas variablesDB_*,N8N_ENCRYPTION_KEY=${{n8n.N8N_ENCRYPTION_KEY}}yQUEUE_*, sin dominio y sin volumen.
Solución de problemas#
| Síntoma | Solución |
|---|---|
Las URL de webhook muestran http://localhost:5678 | WEBHOOK_URL/N8N_HOST no se resuelven: el servicio todavía no tiene dominio, ejecuta skiffly domain -s n8n y vuelve a desplegar |
Credentials could not be decrypted | N8N_ENCRYPTION_KEY cambió; restaura el valor original |
n8n se reinicia con ECONNREFUSED postgres:5432 | Postgres todavía está arrancando o se cayó: skiffly logs -s Postgres |
| El editor va lento / las ejecuciones agotan el tiempo | sube la memoria en Configuración → Recursos y poda las ejecuciones |
Your n8n server is configured to use a secure cookie | N8N_PROTOCOL=https con una URL http plana; usa el dominio https:// |
Siguiente: Plantillas · Volúmenes y bases de datos · Redes