tva
← Insights

Autoalojar n8n en Hetzner Cloud: Tutorial Completo de Configuración con Docker

La automatización de flujos de trabajo se ha vuelto esencial para los negocios modernos, pero las soluciones SaaS pueden volverse costosas a medida que los equipos crecen. Te mostraremos cómo configurar tu propia instancia de n8n en Hetzner Cloud por menos de 5 euros al mes, dándote flujos de trabajo ilimitados y control completo sobre tu plataforma de automatización.

Lo que Construirás

Al final de este tutorial, tendrás:

  • Una instalación de n8n completamente funcional con HTTPS
  • Certificados SSL automáticos vía Let's Encrypt
  • Integración de correo electrónico para cuentas de usuario
  • Inicio automático después de reinicios del servidor
  • Configuración lista para producción y uso profesional

Costo mensual: 4,51 euros (servidor CX11) + costos de dominio

Requisitos Previos

  • Nombre de dominio apuntando a la IP de tu 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

  1. Inicia sesión en la Consola de Hetzner Cloud
  2. Crea un nuevo proyecto
  3. Añade un servidor con estas especificaciones:
    • Imagen: Ubuntu 24.04 LTS
    • Tipo: CX11 (1 vCPU, 4 GB RAM, 20 GB disco)
    • Ubicación: Elige la más cercana a tus usuarios
    • Clave SSH: Añade tu clave pública

Configuración Inicial del Servidor

Conéctate a tu servidor:

ssh root@YOUR_SERVER_IP

Actualiza el sistema:

apt update && apt upgrade -y

Paso 2: Instalar Docker

Instala 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

Verifica la instalación de Docker:

docker --version
docker compose version

Paso 3: Configurar el Proxy Inverso Traefik

Crea la estructura de directorios:

mkdir -p /opt/traefik/data
cd /opt/traefik

Crea el archivo de configuración de Traefik:

nano /opt/traefik/data/traefik.yml

Añade 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: your-email@example.com  # Change this!
      storage: acme.json
      httpChallenge:
        entryPoint: http

Crea el archivo acme.json para los certificados SSL:

touch /opt/traefik/data/acme.json
chmod 600 /opt/traefik/data/acme.json

Crea el archivo Docker Compose de Traefik:

nano /opt/traefik/docker-compose.yml

Añade esta configuración:

version: '3'

services:
  traefik:
    image: traefik:latest
    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 el Relay SMTP (Opcional pero Recomendado)

Crea el directorio del servidor de correo:

mkdir -p /opt/mailserver
cd /opt/mailserver

Crea el archivo Docker Compose:

nano /opt/mailserver/docker-compose.yml

Añade 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
      - RELAY_USERNAME=your-email@gmail.com  # Change this
      - RELAY_PASSWORD=your-app-password     # Change this
      - MAIL_DOMAIN=yourdomain.com           # Change this
    ports:
      - "25:25"

networks:
  proxy:
    external: true

Nota: Para Gmail, necesitarás:

  1. Habilitar la autenticación de dos factores
  2. Generar una Contraseña de Aplicación
  3. Usar la Contraseña de Aplicación (no tu contraseña habitual)

Paso 5: Configurar n8n

Crea el directorio de n8n:

mkdir -p /opt/n8n
cd /opt/n8n

Crea el archivo Docker Compose:

nano /opt/n8n/docker-compose.yml

Añade esta configuración:

version: '3'

services:
  n8n:
    image: n8nio/n8n:latest
    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=
      - N8N_SMTP_SENDER=noreply@yourdomain.com  # Change this!
      
      # Important fixes for proxy setup
      - N8N_TRUST_PROXY_HEADER=true
      - 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ñade 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ñade 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ñade 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

Apunta tu dominio a tu servidor:

  1. Ve a tu registrador de dominio/proveedor DNS
  2. Crea un registro A:
    • Nombre: n8n
    • Tipo: A
    • Valor: TU_IP_DEL_SERVIDOR
    • TTL: 300 (o el mínimo permitido)

Espera la propagación del DNS (puede tardar hasta 24 horas, generalmente mucho más rápido).

Paso 8: Probar Tu Instalación

Verifica si los servicios están en ejecución:

docker ps

Deberías ver tres contenedores en ejecución: traefik, mailserver y n8n.

Visita tu instancia de n8n:

https://n8n.yourdomain.com

Deberías ver la página de configuración de n8n con un icono de candado verde (HTTPS funcionando).

Solución de Problemas Comunes

El Certificado SSL No Funciona

Revisa los registros de Traefik:

docker logs traefik

Causas comunes:

  • DNS no apunta al servidor
  • Firewall bloqueando los puertos 80/443
  • Dominio incorrecto en la configuración

n8n No Es Accesible

Revisa los registros de n8n:

docker logs n8n-n8n-1

Soluciones comunes:

  • Verifica que la configuración del dominio coincida en todos los archivos
  • Comprueba que todos los contenedores estén en la misma red

El Correo Electrónico No Funciona

Revisa los registros del servidor de correo:

docker logs mailserver-mailserver-1

Verifica las credenciales y la configuración SMTP.

Los Servicios No Inician Después del Reinicio

Verifica el estado del servicio:

systemctl status traefik-docker.service
systemctl status n8n-docker.service

Reinicia 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

Respaldar Tus Datos

Crea un script de respaldo:

nano /opt/backup-n8n.sh

Añade 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

Hazlo ejecutable y añádelo al 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

Endurecimiento de 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

Edita la configuración de SSH:

nano /etc/ssh/sshd_config

Realiza estos cambios:

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes

Reinicia 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 CX11: 4,51 euros
  • Dominio (anual, varía): ~10-15 euros/año
  • Total: ~5-6 euros/mes

Comparación con n8n Cloud:

  • n8n Starter: $20/mes
  • n8n Pro: $50/mes
  • Ahorro: $180-540/año

Escalando Tu Configuración

Múltiples Instancias de n8n

Puedes ejecutar múltiples instancias aisladas de n8n para diferentes equipos:

Crea /opt/n8n-team2/docker-compose.yml:

version: '3'
services:
  n8n-team2:
    image: n8nio/n8n:latest
    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 necesitas más potencia, actualiza tu servidor de Hetzner:

  • CX21: 2 vCPU, 8 GB RAM (8,46 euros/mes)
  • CX31: 2 vCPU, 16 GB RAM (16,07 euros/mes)

Conclusión

Ahora tienes una instalación de n8n lista para producción que cuesta una fracción de las soluciones alojadas mientras te da control completo. La configuración incluye HTTPS automático, funcionalidad de correo electrónico y gestión robusta de servicios.

Beneficios clave de este enfoque:

  • Económico: Ahorra cientos de dólares anualmente
  • Control total: Sin límites de uso ni restricciones
  • Privacidad: Tus datos permanecen en tu infraestructura
  • Personalizable: Modifica y amplía según sea necesario

Esta configuración ha sido probada en entornos de producción y proporciona fiabilidad de nivel empresarial a una fracción del costo.

Acerca de tva

tva garantiza la gestión integral de infraestructura de sistemas de bases de datos, entornos en la nube y cadenas de suministro globales. Nuestro enfoque metódico combina protocolos de seguridad rigurosos con optimización de rendimiento, mientras que los servicios de asesoría estratégica permiten la coordinación precisa tanto de capacidades digitales como de activos físicos, manteniendo los más altos estándares de excelencia operativa y cumplimiento en todos los compromisos.

Visita tva.sg para más información sobre nuestros servicios.