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
- Faça login no Console do Hetzner Cloud
- Crie um novo projeto
- 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á:
- Habilitar autenticação de dois fatores
- Gerar uma Senha de App
- 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:
- Acesse seu registrador de domínio/provedor DNS
- 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.