
¿Cansado de repetir las mismas tareas una y otra vez? Imagina que tu homelab trabaje por ti mientras duermes: descargas automáticas, alertas en Telegram cuando hay ofertas, backups programados sin tocar un botón. Con n8n, la plataforma de automatización de workflows self-hosted, puedes conectar todos tus servicios y crear flujos inteligentes sin escribir código.
En esta guía te mostramos cómo desplegar n8n en tu homelab usando Docker Compose, la forma más sencilla y mantenible de tener tu propio «Zapier privado» funcionando 24/7. Al final tendrás una instancia segura con HTTPS lista para automatizar desde Home Assistant hasta tu NAS.
¿Qué es n8n y por qué en tu homelab?
n8n (pronunciado «n-eight-n») es una herramienta de automatización de workflows de código abierto que te permite conectar aplicaciones y servicios mediante una interfaz visual de nodos. A diferencia de soluciones como Zapier o Make, n8n la puedes instalar en tu propio servidor, manteniendo el control total de tus datos y sin límites de ejecuciones.
Ventajas de self-hosting:
- Privacidad: Tus datos nunca salen de tu red (crucial para automatizaciones con Home Assistant o cámaras).
- Sin límites: Ejecuciones ilimitadas sin pagar suscripciones mensuales.
- Integraciones locales: Conecta directamente con servicios en tu LAN que no tienen exposición pública.
- Customización: Acceso a nodos de código Python/JavaScript para lógica avanzada.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor Linux (Ubuntu/Debian recomendado) o una Mini PC dedicada.
- Docker y Docker Compose instalados.
- Un dominio o subdominio apuntando a tu servidor (para HTTPS con Traefik).
- Mínimo 2GB de RAM y 10GB de espacio en disco (SSD recomendado).
Si aún no tienes Docker instalado, sigue la documentación oficial para tu distribución. Para Docker Compose en Linux:
sudo apt-get update
sudo apt-get install docker-compose-pluginPaso 1: Preparar el directorio de trabajo
Creamos una estructura organizada para nuestro despliegue:
mkdir -p ~/n8n-compose/local-files
cd ~/n8n-composeEl directorio local-files nos permitirá compartir archivos entre n8n y el host, útil para leer/escribir CSVs, procesar descargas o generar reportes.
Paso 2: Configurar variables de entorno
Crea un archivo .env con tu configuración:
# Dominio principal
DOMAIN_NAME=tudominio.com
# Subdominio para n8n (resultado: n8n.tudominio.com)
SUBDOMAIN=n8n
# Zona horaria para programaciones cron
GENERIC_TIMEZONE=Europe/Madrid
# Email para certificados SSL
SSL_EMAIL=tu@email.comAdapta los valores a tu setup. Si usas un dominio dinámico como DuckDNS, usa ese dominio.
Paso 3: Crear el archivo Docker Compose
Esta configuración incluye Traefik como reverse proxy para gestionar automáticamente los certificados SSL de Let’s Encrypt:
version: '3.8'
services:
traefik:
image: traefik:v3.1
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
- "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- traefik_data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: always
ports:
- "127.0.0.1:5678:5678"
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.entrypoints=web,websecure
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge
- traefik.http.middlewares.n8n.headers.SSLRedirect=true
- traefik.http.middlewares.n8n.headers.STSSeconds=315360000
- traefik.http.middlewares.n8n.headers.browserXSSFilter=true
- traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
environment:
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_RUNNERS_ENABLED=true
- NODE_ENV=production
- WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:
traefik_data:Paso 4: Iniciar los servicios
Con todo configurado, levantamos los contenedores:
docker compose up -dEn el primer arranque, Traefik solicitará el certificado SSL y n8n inicializará su base de datos SQLite. Espera unos 30-60 segundos y accede a:
https://n8n.tudominio.com
La primera vez te pedirá crear una cuenta de administrador. Guarda bien estas credenciales, ya que no hay recuperación por email en modo self-hosted.
Primeros pasos: Tu primer workflow
Una vez dentro del panel de n8n, crearemos un workflow de prueba que envíe una notificación a Telegram cuando terminemos:
1. Crea un nuevo workflow
Haz clic en «Add workflow» y dale un nombre descriptivo, por ejemplo: «Mi primer automation».
2. Añade un trigger manual
Busca el nodo «Manual Trigger» (el botón «Execute Workflow»). Este nos permite probar el flujo manualmente.
3. Conecta con Telegram (opcional)
Arrastra un nodo «Telegram» y configúralo:
- Crea un bot con @BotFather en Telegram y copia el token.
- En n8n, añade una credencial «Telegram API» con tu token.
- Selecciona la operación «Send Message» y elige tu chat ID.
4. Ejecuta y verifica
Haz clic en «Test workflow». Si todo está correcto, recibirás el mensaje en Telegram. ¡Felicidades, tu homelab acaba de enviar su primera notificación automática!
Workflows útiles para tu homelab
Ideas de automatizaciones que puedes implementar:
| Caso de uso | Descripción |
|---|---|
| Alertas de disco | Monitorea el espacio libre de tu NAS y avisa por Telegram cuando baje del 20%. |
| Backups automáticos | Comprime y sube fotos a Nextcloud cada noche. |
| Descargas inteligentes | Escanea RSS de trackers y añade torrents a tu cliente cuando hay nueva temporada. |
| Integración HA | Recibe webhooks de Home Assistant y envía resúmenes diarios. |
| Scraping de ofertas | Monitorea precios en Amazon y te avisa cuando bajen. |
Problemas comunes y soluciones
Error: «Failed to execute workflow»
Verifica los logs del contenedor:
docker compose logs n8n -fEl problema suele ser permisos en volúmenes o falta de memoria.
El certificado SSL no se genera
Asegúrate de que el puerto 443 está abierto en tu firewall y que el subdominio resuelve correctamente a tu IP pública. Traefik necesita acceso público para validar el desafío ACME.
n8n no arranca tras reinicio
Comprueba que los volúmenes tienen los permisos correctos:
docker compose down
sudo chown -R 1000:1000 ~/n8n-compose
docker compose up -dAlto consumo de RAM
Si ejecutas n8n en una Raspberry Pi 4 o Mini PC con poca RAM, añade límites al contenedor:
deploy:
resources:
limits:
memory: 1GAlternativas a n8n
| Herramienta | Pros | Contras |
|---|---|---|
| Node-RED | Muy popular en HA, visual intuitivo | Menos integraciones SaaS, más código |
| Authentik/Authelia | Enfocado a auth, no automation | No es comparable directamente |
| Zapier (cloud) | Fácil, muchas integraciones | Pago mensual, datos en cloud |
| Make (Integromat) | Visual muy pulido | Costoso, limitaciones en plan gratuito |
Si ya usas Home Assistant, Node-RED puede ser más natural para automatizaciones domóticas. Pero para conectar servicios externos (APIs, servicios cloud, bases de datos), n8n es superior.
Veredicto: ¿Vale la pena?
Si tienes un homelab con Docker y te gusta experimentar, n8n es una adición imprescindible. La curva de aprendizaje inicial se paga con creces en el tiempo que ahorras en tareas repetitivas.
Recomendado para:
- Quienes gestionan múltiples servicios y quieren orquestarlos.
- Usuarios de Home Assistant que necesitan integraciones más allá de lo nativo.
- Entusiastas del self-hosting que valoran la privacidad y el control.
No recomendado si:
- Buscas algo que funcione sin configurar (mejor Zapier).
- Tu servidor tiene menos de 2GB de RAM.
- No tienes exposición a internet para los webhooks.
¿Ya tienes n8n funcionando? Cuéntanos en los comentarios qué workflows has creado.
Precios y especificaciones sujetos a cambio. Verificar en web oficial del fabricante. Este artículo contiene enlaces de afiliado — si compras a través de ellos, nos ayudas a mantener el blog sin coste adicional para ti.
Configuración avanzada: Base de datos PostgreSQL
Para entornos de producción con muchos workflows o uso intensivo, SQLite puede convertirse en un cuello de botella. n8n soporta PostgreSQL como backend de base de datos, ofreciendo mejor rendimiento y concurrencia.
Aquí tienes una configuración Docker Compose extendida con PostgreSQL:
version: '3.8'
services:
postgres:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=tu_password_segura
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
interval: 5s
timeout: 5s
retries: 5
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: always
depends_on:
postgres:
condition: service_healthy
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=tu_password_segura
- N8N_HOST=n8n.tudominio.com
- WEBHOOK_URL=https://n8n.tudominio.com/
- GENERIC_TIMEZONE=Europe/Madrid
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:
postgres_data:Esta configuración incluye un healthcheck para PostgreSQL que asegura que n8n no arranque hasta que la base de datos esté lista, evitando errores de conexión en el primer inicio.
Seguridad: Protegiendo tu instancia
Al exponer n8n a internet para recibir webhooks, es fundamental implementar medidas de seguridad:
1. Autenticación básica
Añade estas variables de entorno al contenedor n8n:
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=tu_password_segura2. Backups automáticos
Configura un cron job para hacer backup diario del volumen de n8n:
#!/bin/bash
docker run --rm -v n8n_n8n_data:/data -v /backup:/backup alpine \
tar czf /backup/n8n-$(date +%Y%m%d).tar.gz -C /data .
find /backup -name "n8n-*.tar.gz" -mtime +7 -deleteHardware recomendado para n8n
| Uso | CPU | RAM | Almacenamiento |
|---|---|---|---|
| Básico (1-5 workflows) | 2 cores | 2 GB | 10 GB SSD |
| Medio (5-20 workflows) | 4 cores | 4 GB | 20 GB SSD |
| Avanzado (20+ workflows) | 4+ cores | 8 GB | 50 GB SSD |
Una Mini PC con Intel N100 es ideal para un setup mediano, ofreciendo buen rendimiento con bajo consumo eléctrico.
Actualizaciones y mantenimiento
n8n publica nuevas versiones cada pocas semanas con mejoras de rendimiento, nuevos nodos y correcciones de seguridad. Para actualizar tu instancia, el proceso es sencillo:
cd ~/n8n-compose
docker compose pull
docker compose up -dDocker descargará la última imagen y recreará el contenedor manteniendo todos tus datos en el volumen persistente. Es recomendable hacer un backup antes de cada actualización por si necesitas revertir. También puedes fijar una versión específica en tu compose.yaml cambiando :latest por el tag de la versión deseada (por ejemplo, docker.n8n.io/n8nio/n8n:2.9.4).
Si usas PostgreSQL como base de datos, n8n ejecuta las migraciones automáticamente al arrancar con una nueva versión. Solo asegúrate de que el contenedor de PostgreSQL esté corriendo antes de actualizar n8n.
Dejar una contestacion