- n8n app data: /opt/n8n/data → /home/node/.n8n
- postgres data: /opt/n8n/postgres → /var/lib/postgresql/data
(was using ${N8N_DB_DATA_PATH} which Coolify converts to a named volume)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
n8n - Plataforma de Automatización
n8n es una plataforma de automatización de código abierto que permite conectar diferentes servicios y crear flujos de trabajo (workflows).
📋 Descripción
Este stack despliega n8n con:
- Base de datos PostgreSQL para persistencia
- Integración con Traefik para acceso HTTPS
- Webhooks públicos sin autenticación
- UI protegida con Authentik (SSO)
- Cifrado de credenciales
🚀 Despliegue
Prerequisitos
- Red Docker: Asegúrate de que la red
proxyexiste - Registro DNS: Configura el registro A para tu dominio n8n
- Clave de cifrado: Genera una clave segura para cifrar credenciales
Desde Portainer
- Ve a Stacks → Add stack
- Nombre:
n8n - Selecciona Repository o Git repository
- Configura:
- Repository URL:
<tu-repositorio> - Repository reference:
main - Compose path:
n8n/docker-compose.yml
- Repository URL:
- Carga el archivo de variables de entorno:
n8n/stack.env - Haz clic en Deploy the stack
Variables de Entorno Importantes
Edita el archivo stack.env:
# Base de datos PostgreSQL
POSTGRES_PASSWORD=tu-password-seguro-aleatorio
N8N_DB_PASSWORD=tu-password-seguro-aleatorio
# Dominio y URLs
N8N_DOMAIN=n8n.tudominio.com
N8N_HOST=n8n.tudominio.com
N8N_WEBHOOK_URL=https://n8n.tudominio.com/
# Cifrado de credenciales (IMPORTANTE: genera una clave única y guárdala)
N8N_ENCRYPTION_KEY=tu-clave-de-cifrado-aleatoria-muy-larga
# Zona horaria
N8N_TIMEZONE=Europe/Madrid
⚠️ CRÍTICO: La
N8N_ENCRYPTION_KEYes fundamental. Si la pierdes, perderás acceso a todas las credenciales guardadas. Haz backup de esta clave.
Generar Clave de Cifrado
openssl rand -hex 32
⚙️ Configuración Post-Instalación
1. Primer Acceso
- Accede a
https://n8n.tudominio.com - Si Authentik está configurado, serás redirigido al login de SSO
- Completa la configuración inicial de n8n:
- Email del propietario
- Nombre de la instancia (opcional)
- Preferencias de uso
2. Crear tu Primer Workflow
- Haz clic en Create new workflow
- Añade un nodo trigger (ej: Webhook, Schedule, Manual)
- Añade nodos de acción (ej: HTTP Request, Gmail, Slack)
- Conecta los nodos
- Haz clic en Execute workflow para probar
- Activa el workflow
3. Configurar Credenciales
Para servicios externos (Gmail, Slack, etc.):
- Haz clic en un nodo que requiera credenciales
- Haz clic en Create New Credential
- Completa los datos de autenticación
- Las credenciales se cifran automáticamente con
N8N_ENCRYPTION_KEY
🔧 Uso de Webhooks
Webhooks Públicos
Los webhooks NO están protegidos por Authentik, permitiendo que servicios externos los activen:
- URL de producción:
https://n8n.tudominio.com/webhook/tu-id-webhook - URL de test:
https://n8n.tudominio.com/webhook-test/tu-id-webhook
Ejemplo de Webhook
- Crea un workflow con un nodo Webhook
- Configura:
- HTTP Method:
POST(o el que necesites) - Path:
mi-webhook(se generará automáticamente)
- HTTP Method:
- Activa el workflow
- Copia la URL del webhook
- Pruébalo:
curl -X POST https://n8n.tudominio.com/webhook/mi-webhook \ -H "Content-Type: application/json" \ -d '{"mensaje": "Hola desde webhook"}'
Webhook con Autenticación
Para proteger webhooks, añade autenticación en el propio workflow:
- Añade un nodo IF después del webhook
- Verifica un token o firma en los headers:
{{ $node["Webhook"].json.headers.authorization }} === "Bearer mi-token-secreto"
🔧 Configuración Avanzada
Variables de Entorno
n8n soporta muchas variables de entorno. Algunas útiles:
# Ejecución
N8N_DEFAULT_BINARY_DATA_MODE=filesystem
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=true
# Timeout
EXECUTIONS_TIMEOUT=300
EXECUTIONS_TIMEOUT_MAX=3600
# Comunidad
N8N_TEMPLATES_ENABLED=true
N8N_TEMPLATES_HOST=https://api.n8n.io/api/
# Logs
N8N_LOG_LEVEL=info
N8N_LOG_OUTPUT=console
Integración con Servicios Externos
Gmail
- Crea credenciales OAuth2 en Google Cloud Console
- En n8n, añade credencial de tipo Gmail OAuth2
- Completa Client ID y Client Secret
- Autoriza la aplicación
Slack
- Crea una Slack App en api.slack.com
- Añade permisos necesarios (chat:write, etc.)
- En n8n, añade credencial de tipo Slack OAuth2
- Autoriza la aplicación
Webhooks de GitHub
- En tu repositorio de GitHub, ve a Settings → Webhooks
- Añade webhook URL:
https://n8n.tudominio.com/webhook/github - Selecciona eventos (push, pull request, etc.)
- En n8n, procesa los eventos con nodos IF y Switch
Programar Ejecuciones
Usa el nodo Schedule Trigger:
# Cada hora
0 * * * *
# Cada día a las 9:00
0 9 * * *
# Cada lunes a las 8:30
30 8 * * 1
# Cada 5 minutos
*/5 * * * *
🛠️ Troubleshooting
No puedo acceder a n8n
-
Verifica que el DNS apunta correctamente:
nslookup n8n.tudominio.com -
Verifica los logs:
docker logs n8n -
Verifica Traefik:
docker logs traefik | grep n8n
Los webhooks no funcionan
- Verifica que la URL del webhook es correcta
- Asegúrate de que el workflow está activado
- Revisa los logs de ejecución en n8n
- Verifica que la configuración de Traefik permite webhooks sin autenticación
- Prueba con curl:
curl -v https://n8n.tudominio.com/webhook/test
Error al guardar credenciales
- Verifica que
N8N_ENCRYPTION_KEYestá configurada - No cambies nunca esta clave después del primer uso
- Revisa los logs:
docker logs n8n
La base de datos no conecta
-
Verifica que PostgreSQL está corriendo:
docker ps | grep n8n-pg -
Verifica los logs de PostgreSQL:
docker logs n8n-pg -
Verifica las credenciales en
stack.env
Workflows se ejecutan lentamente
- Aumenta los recursos del contenedor
- Verifica el timeout en variables de entorno
- Optimiza el workflow (divide en workflows más pequeños)
- Revisa los logs de ejecución
Error "Execution timed out"
Aumenta el timeout en stack.env:
EXECUTIONS_TIMEOUT=600
EXECUTIONS_TIMEOUT_MAX=7200
📚 Recursos Adicionales
🎯 Casos de Uso
Automatización de GitHub
- Notificar en Slack cuando hay un nuevo PR
- Ejecutar tests automáticos
- Crear issues desde emails
Backup Automático
- Backup de bases de datos a Google Drive
- Notificaciones de éxito/error
- Programar backups diarios
Monitoreo
- Verificar disponibilidad de sitios web
- Alertas por email/Slack si un servicio está caído
- Recopilar métricas y enviar a InfluxDB
Integración con CRM
- Sincronizar contactos entre sistemas
- Automatizar seguimiento de leads
- Generar reportes automáticos
Procesamiento de Datos
- Extraer datos de APIs
- Transformar y limpiar datos
- Cargar en bases de datos
🔒 Seguridad
- Credenciales: Todas las credenciales se cifran con
N8N_ENCRYPTION_KEY - Webhooks: Implementa autenticación personalizada en webhooks sensibles
- UI: Protegida con Authentik (SSO)
- Backups: Haz backup de la clave de cifrado y la base de datos
- Variables: No expongas secrets en los workflows; usa credenciales
💾 Backups
Backup de la Base de Datos
# Backup
docker exec n8n-pg pg_dump -U n8n n8n > n8n_backup_$(date +%Y%m%d).sql
# Restaurar
cat n8n_backup_YYYYMMDD.sql | docker exec -i n8n-pg psql -U n8n n8n
Backup de la Clave de Cifrado
Guarda N8N_ENCRYPTION_KEY en un lugar seguro:
# Extraer del stack.env
grep N8N_ENCRYPTION_KEY stack.env > encryption_key_backup.txt
# Guardar en un gestor de contraseñas o vault
Backup de Workflows
n8n guarda workflows en la base de datos, por lo que el backup de PostgreSQL incluye los workflows.
También puedes exportar workflows manualmente:
- En n8n, abre un workflow
- Haz clic en los 3 puntos → Download
- Guarda el archivo JSON
🔄 Actualizaciones
- Haz backup de la base de datos y la clave de cifrado
- Actualiza en
stack.env:N8N_IMAGE=n8nio/n8n:latest - Actualiza el stack en Portainer
- Verifica los logs:
docker logs n8n - Prueba algunos workflows críticos
Nota: n8n se actualiza frecuentemente. Revisa las release notes antes de actualizar.
📊 Monitoreo
Ver Ejecuciones
En n8n:
- Ve a Executions
- Filtra por estado (éxito, error, corriendo)
- Revisa logs detallados de cada ejecución
Logs del Contenedor
# Logs en tiempo real
docker logs -f n8n
# Últimas 100 líneas
docker logs --tail 100 n8n
# Logs con timestamps
docker logs -t n8n
Métricas
n8n no tiene métricas Prometheus por defecto, pero puedes:
- Crear un workflow que publique métricas
- Usar el nodo HTTP Request para enviar a un collector
- Monitorear logs con herramientas como Loki/Grafana