Autoalojar n8n en Hetzner Cloud: tutorial completo de configuración con Docker
La automatización de flujos de trabajo se ha vuelto esencial para las empresas modernas, pero las soluciones SaaS pueden resultar costosas a medida que crecen los equipos. Le mostraremos cómo configurar su propia instancia de n8n en Hetzner Cloud por unos 6 euros al mes más los costos de dominio (a octubre de 2026), con flujos de trabajo ilimitados y control completo sobre su plataforma de automatización.
Qué va a configurar
Al finalizar este tutorial, tendrá:
- Una instalación de n8n completamente funcional con HTTPS
- Certificados SSL automáticos mediante Let's Encrypt
- Integración de correo electrónico para cuentas de usuario
- Inicio automático después de reinicios del servidor
- Una base sólida para uso profesional que puede reforzar para producción
Costo mensual: 5,99 euros (servidor CX23, sin IVA, incluida una dirección IPv4 primaria, a octubre de 2026) + costos de dominio
Requisitos previos
- Nombre de dominio que apunte a la IP de su servidor
- Conocimientos básicos de línea de comandos
- Cuenta en Hetzner Cloud
Paso 1: configuración del servidor
Crear el servidor en Hetzner Cloud
- Inicie sesión en la consola de Hetzner Cloud
- Cree un nuevo proyecto
- Añada un servidor con estas especificaciones:
- Imagen: Ubuntu 24.04 LTS
- Tipo: CX23 (2 vCPU, 4 GB de RAM, 40 GB de disco); Hetzner retiró el CX11 para nuevos pedidos en septiembre de 2024 y la disponibilidad de los planes optimizados en costos varía según la ubicación
- Ubicación: Elija la más cercana a sus usuarios
- Clave SSH: Añada su clave pública
Configuración inicial del servidor
Conéctese a su servidor:
ssh root@YOUR_SERVER_IP
Actualice el sistema:
apt update && apt upgrade -y
Paso 2: instalar Docker
Instale Docker y Docker Compose:
# Install dependencies
apt install apt-transport-https ca-certificates curl software-properties-common gnupg -y
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Create Docker network for our services
docker network create proxy
Verifique la instalación de Docker:
docker --version
docker compose version
Paso 3: configurar el proxy inverso Traefik
Cree la estructura de directorios:
mkdir -p /opt/traefik/data
cd /opt/traefik
Cree el archivo de configuración de Traefik:
nano /opt/traefik/data/traefik.yml
Añada esta configuración:
api:
dashboard: false
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
certificatesResolvers:
letsencrypt:
acme:
email: [email protected] # Change this!
storage: acme.json
httpChallenge:
entryPoint: http
Cree el archivo acme.json para los certificados SSL:
touch /opt/traefik/data/acme.json
chmod 600 /opt/traefik/data/acme.json
Cree el archivo de Docker Compose para Traefik:
nano /opt/traefik/docker-compose.yml
Añada esta configuración:
version: '3'
services:
traefik:
image: traefik:v3.4
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/etc/traefik/traefik.yml
- ./data/acme.json:/acme.json
labels:
- "traefik.enable=true"
networks:
proxy:
external: true
Paso 4: configurar la retransmisión SMTP (opcional pero recomendada)
Cree el directorio del servidor de correo:
mkdir -p /opt/mailserver
cd /opt/mailserver
Cree el archivo de Docker Compose:
nano /opt/mailserver/docker-compose.yml
Añada esta configuración:
version: '3'
services:
mailserver:
image: bytemark/smtp
restart: always
networks:
- proxy
environment:
- RELAY_HOST=smtp.gmail.com # Change to your SMTP provider
- RELAY_PORT=587
- [email protected] # Change this
- RELAY_PASSWORD=your-app-password # Change this
- MAILNAME=mail.yourdomain.com # Change this
networks:
proxy:
external: true
Nota: n8n accede al relay a través de la red compartida proxy, por lo que el relay no publica ningún puerto. Los puertos publicados por Docker eluden las reglas de UFW, así que añada uno solo si otro host debe enviar correo a través del relay. MAILNAME define el nombre de host de correo del relay. Para Gmail, necesitará:
- Habilitar la autenticación de dos factores
- Generar una contraseña de aplicación
- Usar la contraseña de aplicación (no su contraseña habitual)
Paso 5: configurar n8n
Cree el directorio de n8n. El contenedor de n8n se ejecuta con el usuario node (UID 1000), así que asegúrese de que ese usuario pueda escribir en la carpeta data montada mediante bind mount, por ejemplo con mkdir -p /opt/n8n/data && chown -R 1000:1000 /opt/n8n/data:
mkdir -p /opt/n8n
cd /opt/n8n
Cree el archivo de Docker Compose:
nano /opt/n8n/docker-compose.yml
Añada esta configuración:
version: '3'
services:
n8n:
image: n8nio/n8n:1.95.2
restart: always
environment:
- N8N_HOST=n8n.yourdomain.com # Change this!
- NODE_ENV=production
- N8N_PROTOCOL=https
- N8N_PORT=5678
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com # Change this!
# Email configuration
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=mailserver
- N8N_SMTP_PORT=25
- N8N_SMTP_SSL=false
- N8N_SMTP_USER=
- N8N_SMTP_PASS=
- [email protected] # Change this!
# Important fixes for proxy setup
- N8N_PROXY_HOPS=1
- N8N_RUNNERS_ENABLED=true
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.yourdomain.com`)" # Change this!
- "traefik.http.routers.n8n.entrypoints=https"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
networks:
proxy:
external: true
Paso 6: crear servicios Systemd para inicio automático
Servicio de Traefik
nano /etc/systemd/system/traefik-docker.service
Añada esta configuración:
[Unit]
Description=Traefik Docker Compose
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/traefik
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
Servicio del servidor de correo
nano /etc/systemd/system/mailserver-docker.service
Añada esta configuración:
[Unit]
Description=Mailserver Docker Compose
Requires=docker.service
After=docker.service
Before=n8n-docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/mailserver
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
Servicio de n8n
nano /etc/systemd/system/n8n-docker.service
Añada esta configuración:
[Unit]
Description=n8n Docker Compose
Requires=docker.service
After=docker.service traefik-docker.service mailserver-docker.service
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/n8n
ExecStartPre=/bin/bash -c 'until docker container inspect traefik > /dev/null 2>&1; do sleep 2; done'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=30
TimeoutStartSec=180
[Install]
WantedBy=multi-user.target
Habilitar e iniciar los servicios
# Reload systemd daemon
systemctl daemon-reload
# Enable services to start on boot
systemctl enable traefik-docker.service
systemctl enable mailserver-docker.service
systemctl enable n8n-docker.service
# Start services
systemctl start traefik-docker.service
sleep 10
systemctl start mailserver-docker.service
sleep 10
systemctl start n8n-docker.service
Paso 7: configuración DNS
Haga que su dominio apunte a su servidor:
- Acceda a su registrador de dominios o proveedor de DNS
- Cree un registro A:
- Nombre: n8n
- Tipo: A
- Valor: YOUR_SERVER_IP
- TTL: 300 (o el mínimo permitido)
Espere a que se propague el DNS (puede tardar hasta 24 horas, aunque normalmente tarda mucho menos).
Paso 8: probar su instalación
Compruebe si los servicios están en ejecución:
docker ps
Debería ver tres contenedores en ejecución: traefik, mailserver y n8n.
Acceda a su instancia de n8n:
https://n8n.yourdomain.com
Debería ver la página de configuración de n8n a través de HTTPS, con el navegador indicando que el certificado es válido.
Solución de problemas comunes
El certificado SSL no funciona
Revise los registros de Traefik:
docker logs traefik
Causas comunes:
- El DNS no apunta al servidor
- El firewall bloquea los puertos 80/443
- Dominio incorrecto en la configuración
n8n no es accesible
Revise los registros de n8n:
docker logs n8n-n8n-1
Soluciones comunes:
- Verifique que la configuración del dominio coincida en todos los archivos
- Compruebe que todos los contenedores estén en la misma red
- Si los registros muestran
ERR_ERL_UNEXPECTED_X_FORWARDED_FOR, compruebe queN8N_PROXY_HOPS=1esté definido como en la configuración anterior; n8n lo documenta para ejecutarlo detrás de un proxy inverso
El correo electrónico no funciona
Revise los registros del servidor de correo:
docker logs mailserver-mailserver-1
Verifique las credenciales y la configuración SMTP.
Los servicios no inician después del reinicio
Verifique el estado del servicio:
systemctl status traefik-docker.service
systemctl status n8n-docker.service
Reinicie si es necesario:
systemctl restart traefik-docker.service
systemctl restart n8n-docker.service
Mantenimiento y actualizaciones
Mantenimiento regular
Verificaciones semanales:
# Check container status
docker ps
# Check disk space
df -h
# Check logs for errors
docker logs n8n-n8n-1 | grep -i error
Actualizaciones mensuales:
# Update container images
cd /opt/n8n && docker compose pull && docker compose up -d
cd /opt/traefik && docker compose pull && docker compose up -d
cd /opt/mailserver && docker compose pull && docker compose up -d
# Clean up old images
docker system prune -f
Hacer copias de seguridad de sus datos
Cree un script de copia de seguridad. La base de datos SQLite predeterminada se copia mientras n8n está en ejecución, por lo que debe detener n8n brevemente o ejecutar la copia en un período de poca actividad para evitar una copia inconsistente. Pruebe una restauración antes de confiar en ella:
nano /opt/backup-n8n.sh
Añada este contenido:
#!/bin/bash
mkdir -p /opt/backups
tar -czf /opt/backups/n8n-backup-$(date +%Y%m%d).tar.gz /opt/n8n/data
find /opt/backups -name "n8n-backup-*.tar.gz" -mtime +30 -delete
Hágalo ejecutable y añádalo a cron:
chmod +x /opt/backup-n8n.sh
# Add to crontab (daily backup at 2 AM)
crontab -e
# Add this line:
0 2 * * * /opt/backup-n8n.sh
Refuerzo de la seguridad
Configurar el firewall
# Install UFW
apt install ufw
# Set defaults
ufw default deny incoming
ufw default allow outgoing
# Allow SSH
ufw allow 22
# Allow HTTP/HTTPS
ufw allow 80
ufw allow 443
# Enable firewall
ufw enable
Asegurar SSH
Edite la configuración de SSH:
nano /etc/ssh/sshd_config
Realice estos cambios:
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
Reinicie SSH:
systemctl restart ssh
Configurar Fail2Ban
apt install fail2ban
# Copy default configuration
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Enable and start
systemctl enable fail2ban
systemctl start fail2ban
Desglose de costos
Costos mensuales:
- Servidor Hetzner CX23: 5,99 euros (sin IVA, incluida una dirección IPv4 primaria, a octubre de 2026)
- Dominio (anual, varía): ~10-15 euros/año
- Total: ~7 euros/mes
Comparación con n8n Cloud:
- n8n Starter: 20 euros/mes con facturación anual (2.500 ejecuciones, a octubre de 2026)
- n8n Pro: 50 euros/mes con facturación anual (10.000 ejecuciones)
- Ahorro: unos 150–520 euros/año
Escalar su configuración
Múltiples instancias de n8n
Puede ejecutar varias instancias aisladas de n8n para distintos equipos:
Cree /opt/n8n-team2/docker-compose.yml:
version: '3'
services:
n8n-team2:
image: n8nio/n8n:1.95.2
restart: always
environment:
- N8N_HOST=team2.yourdomain.com
# ... rest of configuration
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n-team2.rule=Host(`team2.yourdomain.com`)"
- "traefik.http.routers.n8n-team2.entrypoints=https"
- "traefik.http.routers.n8n-team2.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n-team2.loadbalancer.server.port=5678"
networks:
proxy:
external: true
Actualizar los recursos del servidor
Si necesita más capacidad, amplíe los recursos de su servidor de Hetzner:
- CX33: 4 vCPU, 8 GB de RAM (8,99 euros/mes sin IVA, incluida una dirección IPv4 primaria, a octubre de 2026)
- CX43: 8 vCPU, 16 GB de RAM (16,49 euros/mes sin IVA, incluida una dirección IPv4 primaria)
Conclusión
Ahora dispone de una instalación de n8n en funcionamiento que cuesta una fracción de las soluciones alojadas y le da control completo. Incluye HTTPS automático, correo electrónico y una gestión sólida de los servicios.
Beneficios clave de este enfoque:
- Económico: Ahorre cientos de euros al año frente a n8n Cloud
- Control total: Sin cuotas de ejecuciones; los límites dependen de los recursos de su servidor y de la Sustainable Use License de n8n
- Privacidad: Los datos de los flujos de trabajo y de sus ejecuciones permanecen en su servidor, excepto los que sus flujos envíen a servicios externos
- Personalizable: Modifique y amplíe según sea necesario
Hemos utilizado esta configuración en producción. Los ejemplos de n8n y Traefik fijan las versiones de las imágenes; para actualizar, suba esas etiquetas en cada docker-compose.yml antes de ejecutar los comandos de actualización. Para usos críticos para el negocio, pruebe la restauración de sus copias de seguridad y añada monitoreo.
Acerca de tva
tva garantiza una gestión integral de la infraestructura de bases de datos, los entornos en la nube y las cadenas de suministro globales. Nuestro enfoque metódico combina protocolos de seguridad rigurosos con optimización del rendimiento, mientras que los servicios de asesoría estratégica permiten la coordinación precisa tanto de las capacidades digitales como de los activos físicos, manteniendo los más altos estándares de excelencia operativa y cumplimiento normativo en todos los proyectos.
Visite tva.sg para más información sobre nuestros servicios.
Artículos relacionados
Artículos relacionados
Autoalojar Windmill en Ubuntu: tutorial completo de Docker y solución de problemas de PostgreSQL
Hetzner Cloud a finales de 2026: planes y precios para autoalojar n8n, Windmill, Twenty y Ollama
Guía completa de solución de problemas de n8n autoalojado 2025: tamaño de los datos de ejecución y webhooks con Traefik