Hay servicios que instalas y luego tienes que convencerte de que valen la pena. n8n no es uno de esos. Lo puse en marcha un martes, y antes del viernes ya había reemplazado tres tareas que hacía a mano cada semana. Llevo meses usándolo y no ha dejado de sorprenderme.
Este post es un recorrido honesto por lo que es n8n, cómo lo instalé en Docker sobre mi Unraid Phatt, y los flujos que tengo en producción. No es un tutorial de “hola mundo” con un ejemplo inventado, es lo que realmente corro en mi lab.
Si tienes curiosidad por el hardware donde corre, en la review del ZimaBoard 2 y en el tutorial del clúster K3s tienes más contexto sobre cómo está montado el resto de la infraestructura.
Qué es n8n y por qué no es “otro Zapier”#
n8n es una plataforma de automatización de flujos de trabajo. Visualmente es como Zapier o Make (antes Integromat): conectas nodos en un editor gráfico, cada nodo hace algo (llama a una API, lee un fichero, manda un mensaje) y los encadenas.
La diferencia importante es que n8n es open-source y lo corres tú. Tus datos no pasan por servidores de terceros. Para un homelab eso importa.
La versión self-hosted es gratuita sin límite de ejecuciones. La versión cloud de n8n tiene pricing por operaciones, igual que Zapier. Pero si tienes un servidor en casa, no necesitas gastar en eso.
Versión que corro: n8n 2.10.2 en Docker sobre Unraid (Phatt, 72 cores, 512GB RAM). Usa unos 390MB de RAM en idle. Bastante razonable para lo que hace.
Instalación con Docker Compose#
La forma más limpia de instalarlo es con Docker Compose y una base de datos PostgreSQL. El SQLite que viene por defecto funciona para pruebas, pero para producción no te arriesgues.
| |
Dos variables que no se pueden olvidar:
N8N_ENCRYPTION_KEY: n8n guarda credenciales (tokens de APIs, contraseñas) cifradas en la base de datos. Esta clave es lo que las cifra. Si la pierdes y tienes que reinstalar n8n, pierdes acceso a todas las credenciales guardadas. Guárdala en tu gestor de contraseñas. Si usas Vaultwarden, tienes la guía aquí.
WEBHOOK_URL: n8n puede recibir webhooks (peticiones HTTP externas). Para que eso funcione desde internet, la URL tiene que ser accesible. Si usas Tailscale o Cloudflare Tunnels, configura la URL pública aquí.
Levanta el stack:
| |
Accede a http://TU_IP:5678 y crea tu cuenta de administrador. A partir de aquí tienes el editor.
La interfaz en 2 minutos#
El editor de n8n es un canvas donde arrastras nodos. Cada nodo tiene:
- Trigger: qué dispara el flujo (un webhook, un cron, un evento de otro servicio)
- Nodos de acción: lo que hace el flujo (llamar a una API, transformar datos, enviar un mensaje)
- Conexiones: flechas que encadenan nodos
Hay más de 400 integraciones nativas: Telegram, Discord, Gmail, Google Sheets, HTTP Request genérico, PostgreSQL, MySQL, Redis, Home Assistant, Plex, GitHub… Para lo que no hay integración nativa, siempre puedes usar HTTP Request o el nodo Code (JavaScript).
El nodo Code es la navaja suiza. Si algo no encaja con los nodos existentes, escribes JavaScript directamente. No necesitas desplegar nada, el código corre en n8n.
Los flujos que tengo en producción#
Aquí está lo real. No ejemplos de documentación.
1. Alerta cuando un contenedor Docker cae#
Mi flujo más útil. Llama a la API de Docker cada 5 minutos, compara el estado de los contenedores con la última ejecución, y si algo está en “exited” o “dead” me manda un mensaje de Telegram con el nombre del contenedor y el código de salida.
Nodos:
- Cron (cada 5 min)
- HTTP Request →
http://PHATT_IP:2375/containers/json?all=true(API de Docker) - Code → filtra contenedores que deberían estar corriendo pero no lo están
- IF → si hay contenedores caídos, continúa
- Telegram → manda el mensaje
Para que funcione, el socket de Docker tiene que estar expuesto. Yo uso dockerproxy en vez de exponer el socket directamente. Limita qué operaciones se pueden hacer y es más seguro.
2. Resumen semanal de Plex#
Cada lunes a las 09:00 me manda un resumen de lo que se ha reproducido en Plex la semana anterior. Usa la API de Tautulli (el tracker de estadísticas de Plex).
Nodos:
- Cron (lunes 09:00)
- HTTP Request → Tautulli API:
get_home_statsyget_recently_added - Code → formatea el resumen en texto
- Telegram → manda el resumen
El mensaje incluye: horas reproducidas, número de reproducciones únicas, los 5 contenidos más vistos y lo que se añadió esa semana.
3. Backup automático de configuraciones#
Cada noche a las 03:00 copia las configuraciones importantes (docker-compose.yml de cada stack, configs de aplicaciones) a una carpeta en el NAS Synology. Si algo se rompe, tengo el historial de configuraciones.
Nodos:
- Cron (03:00)
- Execute Command →
tar -czf /backup/configs-$(date +%Y%m%d).tar.gz /path/to/configs/ - Move Binary Data → mueve el tar al NAS vía SMB
- Code → limpia backups con más de 30 días
- Telegram → confirma que el backup fue bien (o alerta si falló)
Este flujo me salvó una vez cuando tuve que reinstalar un contenedor y había perdido la config. Tenía el backup de la noche anterior.
4. Notificación de actualizaciones de contenedores Docker#
Watchtower ya actualiza mis contenedores automáticamente (los que tienen la label com.centurylinklabs.watchtower.enable=true). Pero quiero saber qué actualizó y cuándo.
Watchtower tiene soporte para notificaciones HTTP. Le apunto a un webhook de n8n, y n8n recibe el evento, lo formatea y me manda el mensaje a Telegram con la lista de contenedores actualizados.
5. Alerta de espacio en disco#
Comprueba el espacio disponible en Phatt (via SSH) y me avisa si algún disco baja del 15% libre. Simple pero imprescindible.
Nodos:
- Cron (cada hora)
- SSH →
df -h | grep -E "^/dev"en Phatt - Code → parsea la salida, identifica discos al límite
- IF → si alguno está por debajo del umbral
- Telegram → alerta con el disco y el porcentaje libre
Lo que n8n no hace bien#
Hay limitaciones que vale la pena conocer antes de lanzarte:
No es un scheduler de alta frecuencia. Si necesitas ejecutar algo cada segundo, n8n no es la herramienta. Para eso usa un cron de sistema o un script directo. n8n es para tareas que van en minutos u horas.
El nodo SSH es limitado. Funciona para comandos simples pero si necesitas interactividad o manejar outputs grandes, es incómodo. Para scripts complejos, mejor un endpoint HTTP en el servidor remoto y llamarlo con HTTP Request.
El editor puede ser lento con flujos grandes. Si tienes un flujo con 50+ nodos, el canvas se vuelve difícil de manejar. n8n tiene subworkflows (flujos que llaman a otros flujos) para mitigar esto, pero hay que planificarlo desde el principio.
La documentación de la API externa a veces está desactualizada. Algunos nodos de integración (no el core) tienen bugs o comportamientos inesperados. El foro de la comunidad de n8n es bastante activo y suele tener soluciones.
Credenciales: cómo las gestiono#
n8n tiene un gestor de credenciales propio. Guardas un token (Telegram, GitHub, lo que sea) una vez y lo reutilizas en todos los flujos. Las credenciales se cifran con N8N_ENCRYPTION_KEY en la base de datos.
Lo que hago yo: guardo también todas las credenciales en Vaultwarden, por si tengo que reinstalar n8n y necesito introducirlas de nuevo.
No guardes credenciales directamente en el código de los nodos Code. Si exportas el flujo (para compartirlo o hacer backup), las credenciales hardcodeadas van con él en texto plano.
Exponer n8n a internet (solo si necesitas webhooks)#
Si tus flujos solo los disparas con cron o manualmente, no necesitas exponer n8n. Si necesitas webhooks desde servicios externos (GitHub, Stripe, un formulario web), sí.
Mis opciones recomendadas:
Cloudflare Tunnel: cero puertos abiertos. Es lo que uso. Tengo la guía completa aquí. Apuntas el túnel a localhost:5678 y listo.
Tailscale + Funnel: si los webhooks vienen de servicios que puedes controlar (otro servicio tuyo en Tailscale), no necesitas exponerlo a internet. Guía de Tailscale aquí.
No expongas el puerto 5678 directamente en tu router. n8n no está diseñado para estar expuesto sin un proxy delante.
Backup de los flujos#
Exporta los flujos regularmente. En n8n: Settings → Import/Export → Export All Workflows. Guarda el JSON en tu NAS o en Gitea.
También puedes automatizarlo (sí, con n8n): un cron que llame a la API de n8n para exportar todos los flujos y los guarde en el disco.
| |
Genera la API key en n8n: Settings → API → Create an API Key.
El veredicto#
n8n lleva en mi stack desde hace meses y ha pasado a ser de esas herramientas que si desaparecieran tendría que reinstalarla ese mismo día. No es perfecta: el editor es mejorable para flujos grandes, el nodo SSH tiene sus manías. Pero para automatizar tareas de homelab, reemplazar scripts bash ad-hoc y recibir notificaciones inteligentes, es exactamente lo que necesitaba.
La barrera de entrada es baja si sabes un poco de JavaScript para el nodo Code. Si vienes de Zapier o Make, el editor te resultará familiar desde el primer momento.
Si acabas de montar tu homelab y estás eligiendo qué instalar primero, n8n va en el top 5. Te va a ahorrar tiempo antes de que te des cuenta.
n8n (Community Edition): n8n.io — gratuito, self-hosted, open-source.