// AUTOMATIZACIÓN
n8n autoalojado: automatiza tu homelab (guía)
Qué es n8n, cuánto ocupa de verdad en un mini PC y cómo montarlo en Docker sin exponerlo. Con medidas propias y los avisos que suelta al arrancar.
- #n8n
- #automatización
- #docker
- #self-hosted
- #homelab

El 27 de julio dejó de llegarme un resumen que llevaba cinco días llegando puntual a las ocho de la mañana. No me di cuenta. Lo descubrí hoy, mirando otra cosa, cuando pedí el historial de ejecuciones y me salió esto:
13 error 2026-07-31T06:00:23Z trigger
12 error 2026-07-30T06:00:23Z trigger
11 error 2026-07-29T06:00:23Z trigger
10 error 2026-07-28T06:00:23Z trigger
9 error 2026-07-27T06:00:23Z trigger
8 success 2026-07-26T06:00:23Z trigger
Cinco días fallando a la misma hora, con el mismo error, y en ningún momento me enteré. Esa es la primera cosa honesta que hay que decir de n8n: automatizar en casa es fácil, y darte cuenta de que tu automatización se ha roto es lo difícil. Vuelvo a ello al final, porque la causa era buena.
Esta guía va de montar n8n en tu propio servidor: qué es, cuánto pesa de verdad (medido, no de la web oficial), el docker-compose.yml con el que lo tengo corriendo, los avisos que suelta al arrancar y cuáles de ellos importan.
[aff]Hay enlaces de afiliado más abajo: si compras algo desde ellos me llevo una pequeña comisión y a ti no te cuesta ni un céntimo más. En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables.
Qué es n8n, en una frase
n8n es un motor de automatizaciones: encadenas bloques —lee de aquí, transforma esto, manda aquello— y se ejecutan solos, por horario o cuando algo los dispara. Si has oído hablar de Zapier o de Make, es la misma idea, con dos diferencias que cambian el cálculo por completo: lo instalas en tu propia máquina, y no te cobran por ejecución.
Ese segundo punto es el que engancha a la gente del homelab. En los servicios de nube la unidad de cobro es la tarea ejecutada, así que una automatización que se dispara cada cinco minutos se convierte en una suscripción. En tu servidor, dispararla cada cinco minutos cuesta lo que cuesten esos ciclos de CPU, que en un mini PC de bajo consumo es aproximadamente nada.
El precio a pagar es que ahora eres tú quien lo mantiene. Y quien se entera de que lleva cinco días roto, o no.
Un flujo son tres cosas: qué lo arranca, qué hace por el camino y dónde deja el resultado. El del medio es el que se rompe.
Lo que ocupa de verdad en un mini PC
Aquí es donde la mayoría de guías te dicen “es ligero” y siguen. Los números de mi instancia, medidos hoy sobre un Intel N100, con la versión 2.30.7:
$ docker stats --no-stream n8n
NAME CPU % MEM USAGE / LIMIT MEM %
n8n 0.15% 317.1MiB / 1.5GiB 20.64%
Esos 317 MiB son recién arrancado. Después de siete horas y media en marcha con un solo flujo activo, sin tocar nada, la misma orden daba 382 MiB. Crece un poco y se estabiliza; no lo he visto dispararse, pero tampoco tiene pinta de bajar solo.
Arrancar en frío le cuesta 8,3 segundos desde que el contenedor se levanta hasta que la interfaz responde. A partir de ahí, la web contesta en 13 milisegundos en red local. La base de datos, después de doce días funcionando, ocupa 1,9 MB. Eso no es una errata: SQLite guardando flujos, credenciales y el historial de ejecuciones cabe en un correo con foto.
Donde n8n sí es gordo es en disco de imagen: n8nio/n8n:latest pesa 1.420 MB descomprimida. Casi un giga y medio de contenedor para un motor de automatizaciones. Si vas justo de SSD en el servidor, tenlo en cuenta antes que la RAM.
Para situarlo, en esa misma máquina y en el mismo instante: el servidor de Immich, la alternativa autoalojada a Google Fotos, estaba en 292 MiB; Portainer, en 12 MiB. O sea que n8n en reposo come más que un gestor de fotos con biblioteca cargada. No es un servicio que puedas colar en una Raspberry Pi de 2 GB junto a otras seis cosas y olvidarte.
El compose con el que lo tengo corriendo
Esto es literalmente mi fichero, con la clave sacada a un .env aparte:
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
mem_limit: 1536m
memswap_limit: 1536m
ports:
- "10.8.0.5:5678:5678"
environment:
- GENERIC_TIMEZONE=Europe/Madrid
- TZ=Europe/Madrid
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_SECURE_COOKIE=false
- N8N_RUNNERS_ENABLED=true
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_PERSONALIZATION_ENABLED=false
- N8N_HIRING_BANNER_ENABLED=false
- DB_SQLITE_POOL_SIZE=3
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Tres decisiones que no vienen en la documentación oficial y que sí explico:
El mem_limit. Está ahí por una mala experiencia previa con otro servicio en esta misma máquina: algo se desmadró de memoria, el kernel salió a matar procesos y se llevó por delante cosas que no tenían nada que ver. Un tope duro convierte “se cae el servidor entero” en “se cae n8n”. Si el contenedor muere solo, ya sabes exactamente qué mirar.
El bind a una IP concreta. Fíjate en que el puerto no es 5678:5678 a secas, sino 10.8.0.5:5678:5678. Esa IP es la de mi interfaz de WireGuard, así que el panel solo existe dentro de la VPN. Desde la red de casa, desde fuera o desde cualquier otra cosa, ese puerto no está abierto. Es una línea de texto y te ahorra el 90 % de los sustos.
N8N_ENCRYPTION_KEY fijada a mano. n8n cifra las credenciales que guardas dentro con esa clave. Si no la pones, se genera sola y vive dentro del volumen; el día que restaures un backup en otra máquina sin ella, tus credenciales son ruido. Ponla tú, guárdala donde guardes las contraseñas, y el backup vuelve a ser un backup.
Un detalle que se me ha quedado viejo, y lo dejo escrito porque es la clase de cosa que pasa: mi compose todavía trae N8N_RUNNERS_ENABLED=true, y al arrancar la propia n8n te avisa de que esa variable ya no hace falta. La quitaré en la próxima revisión. Que la configuración se vaya oxidando sola es normal; leer los avisos del arranque de vez en cuando, también debería serlo.
Cómo se ve un flujo por dentro
Este es el flujo que llevaba cinco días fallando, tal cual sale en mi instancia:

Se lee de izquierda a derecha. A la izquierda, dos formas de arrancarlo: un horario diario y un webhook, por si quiero lanzarlo a mano desde otro sitio. En medio, una llamada a la API de Hacker News y un nodo de código que convierte la respuesta en un resumen legible. A la derecha, el envío por Telegram.
Cuatro nodos. Se monta en un rato y no hay que escribir casi nada, que es justo el atractivo y también la trampa: como cuesta tan poco montarlo, acabas con quince flujos y ninguna idea de cuál se rompió.
Los avisos del arranque, y cuáles importan
Cuando levantas n8n suelta un buen párrafo de texto. Estos son los míos, en vivo, y qué hacer con cada uno:
«Failed to start Python task runner. Python 3 is missing from this system.» La imagen oficial no trae Python. Si vas a usar nodos de código en JavaScript —lo normal—, esto te da igual. Si querías escribir Python dentro de los flujos, ahí tienes el motivo de que no te funcione.
Cinco avisos de variables obsoletas. No son errores, son cambios de valor por defecto anunciados: el tiempo máximo de una tarea va a bajar de 5 minutos a 1, los límites de descompresión de ficheros van a estrecharse, y un par de variables desaparecen. Si te apoyas en alguno de esos valores, fíjalo explícitamente ahora y no el día que actualices y algo deje de ir.
getaddrinfo EAI_AGAIN api.n8n.io. Este merece un párrafo aparte. Yo tengo la telemetría desactivada (N8N_DIAGNOSTICS_ENABLED=false), y aun así el arranque intenta llamar a api.n8n.io para refrescar un registro de servidores MCP. No es telemetría, es catálogo, y falla sin consecuencias si no hay salida a internet. Pero conviene saberlo: desactivar diagnósticos no es lo mismo que dejar la instancia muda.
SQLite o PostgreSQL
Por defecto, n8n guarda todo en SQLite, un fichero suelto dentro del volumen. Opcionalmente admite PostgreSQL configurando unas variables de entorno, y así lo documenta la guía oficial de bases de datos.
Mi opinión, que va contra el consejo habitual de foro: quédate en SQLite. Un fichero de 1,9 MB después de doce días te dice el tamaño real del problema en una casa.
Y ojo, que aquí casi meto la pata yo: iba a escribirte que un Postgres al lado te cuesta un buen pellizco de memoria, fui a comprobarlo antes de afirmarlo y resulta que los dos contenedores de Postgres que corren en esta misma máquina, cada uno con su aplicación encima, gastan 16 y 17 MiB. O sea que el argumento de la RAM no vale. El que sí vale es más aburrido: otro contenedor que actualizar, otro backup que cuadrar y un punto de fallo nuevo, para una base de datos que en tu caso cabe en un disquete. El cambio compensa cuando tienes muchos flujos ejecutándose a la vez y empiezas a ver bloqueos de escritura, o cuando montas n8n en modo escalado con varios trabajadores. Eso no es un homelab, es una empresa pequeña.
Lo que sí tienes que hacer, uses lo que uses, es podar el historial de ejecuciones. Guardar cada ejecución completa de un flujo que corre cada cinco minutos infla ese fichero rápido.
La licencia, que no es exactamente código abierto
Un matiz que se pasa por alto y que a mí me parece de justicia contar. n8n no es software libre en el sentido clásico: usa la Sustainable Use License, una licencia de modelo fair-code creada por ellos. Te da derecho a usar, modificar, crear obras derivadas y redistribuir, con limitaciones; la primera de ellas es que puedes usarlo «solo para tus propios fines internos de negocio, o para uso personal o no comercial». Está escrito así en su documentación de licencia.
Para lo que tú y yo vamos a hacer con ello —automatizar cosas de casa, o de tu propio negocio— cae de lleno dentro de lo permitido y es gratis. Lo que no puedes es coger n8n y montar con él un servicio de automatización para vender a terceros. Me parece razonable, pero prefiero que lo sepas por mí y no por un correo de abogados.
Volviendo a los cinco días de silencio
El error de las cinco ejecuciones fallidas era siempre el mismo, en el mismo nodo:
node: HN self-hosted
msg: The DNS server returned an error, perhaps the server is offline
No era Hacker News, ni el flujo, ni n8n. Cuando fui a mirar el contenedor, estaba sin red de Docker: docker inspect devolvía la lista de redes vacía y no había nada escuchando en su puerto, pese a que docker ps lo daba por Up y la base de datos estaba intacta. Un contenedor a medio conectar es peor que uno caído, porque uno caído se nota.
Y aquí va el detalle que me costó un rato: docker restart no lo arregló. El contenedor volvía a levantarse igual de aislado. Lo que lo arregló fue recrearlo:
$ cd ~/n8n && docker compose up -d
Container n8n Recreated
Container n8n Started
$ docker exec n8n node -e "require('dns').lookup('hn.algolia.com',(e,a)=>console.log(e?e.code:a))"
34.160.168.181
Reiniciar reutiliza la configuración de red que el contenedor ya tenía rota; recrearlo la vuelve a pedir de cero. Me lo apunto, porque la próxima vez que algo esté Up y no funcione, esa va a ser mi primera prueba.
Qué hardware pide
Poco, con matices. Un procesador modesto le sobra: los flujos son ráfagas de trabajo de segundos, y entre ráfaga y ráfaga n8n se queda en un 0,15 % de CPU. Lo que quieres es RAM y un disco decente, por ese giga y medio de imagen y por los 300-400 MB que ocupa en marcha.
Un mini PC con Intel N100 o N150 y 16 GB va sobradísimo, y es la máquina que yo pondría: silenciosa, de bajo consumo y con margen para todo lo demás que acabarás metiéndole. El Beelink S12 Pro con N100 es el caballo de batalla típico de esta gama; si además quieres almacenamiento serio en la misma caja, el Beelink ME Mini con sus seis ranuras M.2 cambia el planteamiento por completo. Para comparar por consumo y precio antes de decidir, tienes el comparador de mini PC con filtro de vatios, y la factura anual está calculada en la guía de cuánto cuesta un servidor encendido todo el año.
¿Y una Raspberry Pi? Funciona, y hay imagen para ARM. Pero con 300-400 MB solo para n8n y otro tanto para lo que ya tengas encima, en un modelo de 4 GB vas apretado y en uno de 2 GB no me metería. Si la Pi es tu única máquina y ya lleva domótica y descargas, esta pieza pídesela a otra.
// preguntas frecuentes
Preguntas frecuentes
¿n8n autoalojado es gratis?
¿Cuánta RAM necesita n8n?
¿Puedo usar n8n en una Raspberry Pi?
¿Necesito PostgreSQL o me vale SQLite?
¿Es seguro exponer n8n a internet?
¿Cómo me entero de que un flujo ha fallado?
Mi veredicto después de doce días: n8n compensa si ya tienes una máquina encendida a todas horas y se te acumulan tareas repetitivas que hoy haces a mano. Instalarlo son cinco minutos y montar el primer flujo, veinte. Lo que de verdad cuesta es la disciplina de vigilar que sigan funcionando, y en eso la herramienta no te ayuda gran cosa: eso lo pones tú.