tva
← Insights

Self-Hosting do n8n no Hetzner Cloud: Tutorial Completo de Configuração Docker

A automação de fluxos de trabalho se tornou essencial para empresas modernas, mas soluções SaaS podem se tornar caras conforme as equipes crescem. Vamos mostrar como configurar sua própria instância n8n no Hetzner Cloud por menos de €5/mês, oferecendo fluxos de trabalho ilimitados e controle total sobre sua plataforma de automação.

O Que Você Vai Construir

Ao final deste tutorial, você terá:

  • Instalação n8n totalmente funcional com HTTPS
  • Certificados SSL automáticos via Let's Encrypt
  • Integração de e-mail para contas de usuário
  • Inicialização automática após reinicializações do servidor
  • Configuração pronta para produção para uso profissional

Custo mensal: €4,51 (servidor CX11) + custos de domínio

Pré-requisitos

  • Nome de domínio apontando para o IP do seu servidor
  • Conhecimento básico de linha de comando
  • Conta no Hetzner Cloud

Passo 1: Configuração do Servidor

Criar Servidor Hetzner Cloud

  1. Faça login no Console do Hetzner Cloud
  2. Crie um novo projeto
  3. Adicione um servidor com estas especificações:
    • Imagem: Ubuntu 24.04 LTS
    • Tipo: CX11 (1 vCPU, 4 GB RAM, 20 GB disco)
    • Localização: Escolha a mais próxima dos seus usuários
    • Chave SSH: Adicione sua chave pública

Configuração Inicial do Servidor

Conecte-se ao seu servidor:

ssh root@YOUR_SERVER_IP

Atualize o sistema:

apt update && apt upgrade -y

Passo 2: Instalar o Docker

Instale o Docker e o 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 a instalação do Docker:

docker --version
docker compose version

Passo 3: Configurar Proxy Reverso Traefik

Crie a estrutura de diretórios:

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

Crie o arquivo de configuração do Traefik:

nano /opt/traefik/data/traefik.yml

Adicione esta configuração:

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  # Altere isso!
      storage: acme.json
      httpChallenge:
        entryPoint: http

Crie o arquivo acme.json para certificados SSL:

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

Crie o arquivo Docker Compose do Traefik:

nano /opt/traefik/docker-compose.yml

Adicione esta configuração:

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

Passo 4: Configurar Relay SMTP (Opcional mas Recomendado)

Crie o diretório do servidor de e-mail:

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

Crie o arquivo Docker Compose:

nano /opt/mailserver/docker-compose.yml

Adicione esta configuração:

version: '3'

services:
  mailserver:
    image: bytemark/smtp
    restart: always
    networks:
      - proxy
    environment:
      - RELAY_HOST=smtp.gmail.com  # Altere para seu provedor SMTP
      - RELAY_PORT=587
      - RELAY_USERNAME=your-email@gmail.com  # Altere isso
      - RELAY_PASSWORD=your-app-password     # Altere isso
      - MAIL_DOMAIN=yourdomain.com           # Altere isso
    ports:
      - "25:25"

networks:
  proxy:
    external: true

Nota: Para Gmail, você precisará:

  1. Habilitar autenticação de dois fatores
  2. Gerar uma Senha de App
  3. Usar a Senha de App (não sua senha regular)

Passo 5: Configurar o n8n

Crie o diretório do n8n:

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

Crie o arquivo Docker Compose:

nano /opt/n8n/docker-compose.yml

Adicione esta configuração:

version: '3'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    environment:
      - N8N_HOST=n8n.yourdomain.com          # Altere isso!
      - NODE_ENV=production
      - N8N_PROTOCOL=https
      - N8N_PORT=5678
      - N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com  # Altere isso!
      
      # 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  # Altere isso!
      
      # 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`)"  # Altere isso!
      - "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

Passo 6: Criar Serviços Systemd para Inicialização Automática

Serviço Traefik

nano /etc/systemd/system/traefik-docker.service

Adicione esta configuração:

[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

Serviço do Servidor de E-mail

nano /etc/systemd/system/mailserver-docker.service

Adicione esta configuração:

[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

Serviço n8n

nano /etc/systemd/system/n8n-docker.service

Adicione esta configuração:

[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 Serviços

# 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

Passo 7: Configuração DNS

Aponte seu domínio para seu servidor:

  1. Acesse seu registrador de domínio/provedor DNS
  2. Crie um registro A:
    • Nome: n8n
    • Tipo: A
    • Valor: IP_DO_SEU_SERVIDOR
    • TTL: 300 (ou mínimo permitido)

Aguarde a propagação DNS (pode levar até 24 horas, geralmente é muito mais rápido).

Passo 8: Testar Sua Instalação

Verifique se os serviços estão rodando:

docker ps

Você deve ver três contêineres rodando: traefik, mailserver e n8n.

Acesse sua instância n8n:

https://n8n.yourdomain.com

Você deve ver a página de configuração do n8n com um ícone de cadeado verde (HTTPS funcionando).

Resolução de Problemas Comuns

Certificado SSL Não Funciona

Verifique os logs do Traefik:

docker logs traefik

Causas comuns:

  • DNS não apontando para o servidor
  • Firewall bloqueando portas 80/443
  • Domínio errado na configuração

n8n Não Acessível

Verifique os logs do n8n:

docker logs n8n-n8n-1

Correções comuns:

  • Verifique se a configuração de domínio corresponde em todos os arquivos
  • Verifique se todos os contêineres estão na mesma rede

E-mail Não Funciona

Verifique os logs do servidor de e-mail:

docker logs mailserver-mailserver-1

Verifique as credenciais e configurações SMTP.

Serviços Não Iniciam Após Reinicialização

Verifique o status do serviço:

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

Reinicie se necessário:

systemctl restart traefik-docker.service
systemctl restart n8n-docker.service

Manutenção e Atualizações

Manutenção Regular

Verificações semanais:

# Check container status
docker ps

# Check disk space
df -h

# Check logs for errors
docker logs n8n-n8n-1 | grep -i error

Atualizações mensais:

# 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

Backup dos Seus Dados

Crie um script de backup:

nano /opt/backup-n8n.sh

Adicione este conteúdo:

#!/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

Torne-o executável e adicione ao 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

Reforço de Segurança

Configurar 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

Proteger SSH

Edite a configuração SSH:

nano /etc/ssh/sshd_config

Faça estas alterações:

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes

Reinicie o 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

Detalhamento de Custos

Custos mensais:

  • Servidor Hetzner CX11: €4,51
  • Domínio (anual, varia): ~€10-15/ano
  • Total: ~€5-6/mês

Compare com n8n Cloud:

  • n8n Starter: $20/mês
  • n8n Pro: $50/mês
  • Economia: $180-540/ano

Escalando Sua Configuração

Múltiplas Instâncias n8n

Você pode executar múltiplas instâncias n8n isoladas para diferentes equipes:

Crie /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

Upgrade de Recursos do Servidor

Se precisar de mais potência, faça upgrade do seu servidor Hetzner:

  • CX21: 2 vCPU, 8 GB RAM (€8,46/mês)
  • CX31: 2 vCPU, 16 GB RAM (€16,07/mês)

Conclusão

Você agora tem uma instalação n8n pronta para produção que custa uma fração das soluções hospedadas enquanto oferece controle total. A configuração inclui HTTPS automático, funcionalidade de e-mail e gestão robusta de serviços.

Principais benefícios desta abordagem:

  • Econômico: Economize centenas de dólares anualmente
  • Controle total: Sem limites de uso ou restrições
  • Privacidade: Seus dados permanecem na sua infraestrutura
  • Personalizável: Modifique e estenda conforme necessário

Esta configuração foi testada em ambientes de produção e fornece confiabilidade de nível empresarial a uma fração do custo.

Sobre a tva

A tva assegura a gestão abrangente de infraestrutura de sistemas de banco de dados, ambientes em nuvem e cadeias de suprimentos globais. Nossa abordagem metódica combina protocolos rigorosos de segurança com otimização de desempenho, enquanto os serviços de consultoria estratégica permitem a coordenação precisa de capacidades digitais e ativos físicos -- mantendo os mais altos padrões de excelência operacional e conformidade em todos os engajamentos.

Visite tva.sg para mais informações sobre nossos serviços.