n8n es una plataforma de automatización de flujos de trabajo open source, similar a Zapier o Make pero self-hosted.
Con su interfaz visual de nodos puedes conectar más de 400 servicios: recibir webhooks, consultar APIs, transformar datos, enviar emails, actualizar bases de datos y mucho más, sin escribir apenas código.
Instalación con Docker
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
N8N_HOST: n8n.miempresa.com
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.miempresa.com/
N8N_ENCRYPTION_KEY: clave_de_cifrado_aleatoria_32chars
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: admin
N8N_BASIC_AUTH_PASSWORD: password_seguro
GENERIC_TIMEZONE: Europe/Madrid
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: n8npassword
volumes:
- n8n_data:/home/node/.n8n
postgres:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: n8n
POSTGRES_USER: n8n
POSTGRES_PASSWORD: n8npassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
n8n_data:
postgres_data:
docker compose up -d
Flujo de ejemplo 1: Webhook → Slack
Caso: Cuando el sistema de monitorización detecta un problema, envía un webhook a n8n y n8n lo formatea y envía a Slack.
[Webhook] → [Function] → [Slack]
Configuración del nodo Webhook:
- Method: POST
- Path:
/alertas-servidor - URL resultante:
https://n8n.miempresa.com/webhook/alertas-servidor
Nodo Function (transformar el mensaje):
// Transformar el payload del webhook en mensaje legible
const alerta = $input.first().json;
const emojis = {
critical: "🔴",
warning: "🟡",
ok: "🟢"
};
return [{
json: {
text: ${emojis[alerta.severity] || "⚪"} ${alerta.host}: ${alerta.message},
severity: alerta.severity,
host: alerta.host,
timestamp: new Date().toISOString()
}
}];
Nodo Slack:
- Credential: OAuth de Slack
- Channel:
#alertas-infra - Message:
{{ $json.text }}
Flujo de ejemplo 2: Formulario → Email + Base de datos
Caso: Nuevo empleado rellena un formulario → n8n crea su cuenta en Nextcloud, le envía un email de bienvenida y lo registra en una hoja de Google Sheets.
[Webhook] → [IF] → [HTTP Request Nextcloud API]
↓
[Send Email]
↓
[Google Sheets]
// Nodo Function: preparar los datos
const form = $input.first().json;
return [{
json: {
username: (form.nombre[0] + form.apellido).toLowerCase().replace(/\s/g, ''),
displayName: ${form.nombre} ${form.apellido},
email: form.email,
department: form.departamento,
createdAt: new Date().toISOString()
}
}];
Nodo HTTP Request para crear usuario en Nextcloud:
- Method: POST
- URL:
https://cloud.miempresa.com/ocs/v1.php/cloud/users - Headers:
OCS-APIREQUEST: true,Authorization: Basic - Body:
{ userid: "{{ $json.username }}", password: "TempPass123!" }
Flujo de ejemplo 3: Monitorización de precios (cron + web scraping)
Caso: Revisar el precio de un componente de servidor cada hora y alertar si baja de un umbral.
[Cron] → [HTTP Request] → [HTML Extract] → [IF precio < umbral] → [Email]
Nodo Cron: 0 (cada hora)
Nodo HTTP Request: GET a la URL del producto
Nodo HTML Extract:
- CSS selector:
.precio-actual - Tipo de dato: Number
Nodo IF: {{ $json.precio }} < 299
Flujo de ejemplo 4: CI/CD básico con webhooks de Git
[GitHub Webhook] → [IF rama=main] → [SSH Command: git pull && systemctl restart app]
→ [Slack: "Despliegue completado"]
Nodo SSH Command (requiere credenciales SSH configuradas):
cd /var/www/miapp && git pull origin main && npm install --production && pm2 restart app
Código en nodos Function
n8n soporta JavaScript completo en los nodos Function:
// Ejemplo: parsear logs y extraer IPs bloqueadas
const logs = $input.all();
const ips_bloqueadas = logs
.map(item => item.json.message)
.filter(msg => msg.includes('Ban '))
.map(msg => {
const match = msg.match(/Ban (\d+\.\d+\.\d+\.\d+)/);
return match ? match[1] : null;
})
.filter(Boolean);
// Eliminar duplicados
const ips_unicas = [...new Set(ips_bloqueadas)];
return ips_unicas.map(ip => ({
json: { ip, timestamp: new Date().toISOString() }
}));
Gestión de credenciales
n8n cifra todas las credenciales con la N8N_ENCRYPTION_KEY. Añade credenciales desde Settings → Credentials:
- Slack OAuth
- Gmail / SMTP
- PostgreSQL / MySQL
- SSH Key
- HTTP Basic Auth
- API Keys de cualquier servicio
Exportar e importar flujos
docker exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup-workflows.json
docker exec n8n n8n import:workflow --input=/home/node/.n8n/workflows.json
Conclusión
n8n cierra la brecha entre los scripts personalizados y las plataformas de automatización cloud. Self-hosted, sin límites de ejecuciones, con JavaScript completo disponible cuando necesitas lógica compleja y con más de 400 integraciones listas. Para sysadmins, el caso de uso más inmediato es la automatización de alertas: webhook de Zabbix → formatear → Slack + ticket en Jira, todo en un flujo visual de 5 nodos.


