PUBLICIDADE

n8n em VPS barata: guia de firewall, HTTPS e atualização segura

16/10/2026
13 visualizações
8 min de leitura
Instale o n8n em uma VPS barata sem expor a porta 5678: firewall com UFW, Docker Compose, proxy reverso com Caddy e HTTPS automático, passo a passo.
Imagem principal do post

Quem pesquisa sobre n8n VPS quer duas coisas ao mesmo tempo: uma conta de self-hosting barata e uma instância que não vire porta aberta na internet. A boa notícia é que dá pra unir as duas numa máquina modesta. A ruim é que o atalho de instalar e expor a porta 5678 direto no IP público é exatamente o caminho que você não deve seguir.

A receita que funciona tem quatro ingredientes: firewall fechado, Docker Compose com as variáveis de ambiente corretas, um proxy reverso cuidando do HTTPS e controle de versão na hora de atualizar. Vou montar isso passo a passo, seguindo o que a documentação oficial do n8n recomenda.

Por que n8n VPS exposto direto na porta 5678 não serve para produção

Imagem complementar

Por padrão, o n8n escuta na porta 5678 — controlada pela variável N8N_PORT — e responde em HTTP puro. Se você liberar essa porta no firewall e acessar pelo IP, o tráfego de login, credenciais e webhooks circula sem criptografia. E cada serviço exposto é mais superfície de ataque numa máquina que já tem SSH rodando.

A documentação de SSL/TLS do n8n recomenda colocar um reverse proxy — Traefik ou Caddy — na frente do n8n, em vez de passar certificados direto pra ele. O proxy termina o HTTPS e renova os certificados sozinho, o que elimina a pior tarefa recorrente de quem administra servidor. Vale lembrar o aviso que as docs repetem: self-hosting do n8n exige conhecimento técnico, e erros de configuração podem causar perda de dados e problemas de segurança. O problema não é a VPS barata; é rodar configuração de teste em cima de dados reais.

PUBLICIDADE

O que você precisa: VPS, domínio, Docker e a versão certa do n8n

  • Uma VPS com Docker e Docker Compose instalados. Os guias oficiais para VPS, como o guia da Hetzner, seguem esse mesmo desenho; o da DigitalOcean também.
  • Um domínio com registro A apontando pro IP da VPS, por exemplo n8n.seudominio.com. O HTTPS automático depende disso.
  • A versão certa do n8n: a stable atual é a 2.42.6, e a beta é a 2.43.3. Pra produção, fique na stable.

Se algum detalhe do seu provedor for diferente, como a imagem do sistema ou o firewall da própria nuvem, confira na documentação oficial antes de seguir.

Passo 1: firewall com UFW liberando só 22, 80 e 443

A regra dos guias oficiais é abrir apenas as portas 80 e 443 pro acesso web ao n8n. Somando o SSH, você fica com três portas expostas, e nada mais. A 5678 não precisa aparecer no firewall porque o proxy conversa com o n8n dentro da rede interna do Docker.

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status

A porta 80 continua necessária porque os emissores de certificado a usam na validação do domínio. Se quiser apertar mais, restrinja a 22 ao seu IP fixo — SSH aberto pro mundo inteiro é convite pra robô de dicionário.

Passo 2: Docker Compose do n8n com as variáveis de ambiente corretas

O compose oficial de exemplo deixa o n8n acessível somente por HTTPS e define as variáveis-chave: N8N_HOST com o subdomínio, N8N_PROTOCOL=https e NODE_ENV=production. O trecho a seguir reproduz o serviço do n8n com a versão fixada:

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:2.42.6
    restart: unless-stopped
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PROXY_HOPS=1
      - N8N_WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

Três pontos de atenção. Primeiro, o volume n8n_data:/home/node/.n8n guarda workflows, credenciais e o banco interno — é dele que você tira backup. Segundo, a versão vai fixada por número exato, que é o que a docs recomenda desde o n8n 2.0. Terceiro, o arquivo completo, com o serviço do Caddy incluído, está no guia oficial de Docker Compose — copie de lá pra não divergir em nenhum detalhe.

Passo 3: proxy reverso com HTTPS automático usando Caddy (ou Traefik)

O Caddy emite e renova o certificado do seu domínio sozinho, sem cron e sem script. O guia oficial usa um Caddyfile mínimo, com reverse_proxy n8n:5678 e flush_interval -1:

n8n.seudominio.com {
    reverse_proxy n8n:5678
    flush_interval -1
}

O reverse_proxy n8n:5678 aponta pro serviço do n8n pelo nome, dentro da rede do Docker — por isso o compose não publica a 5678 no host. O flush_interval -1 desativa o buffer de resposta, evitando que respostas em tempo real, como as do editor, fiquem presas atrás do proxy. O Caddy já repassa os headers de proxy por padrão.

Se você já tem Traefik na VPS, serve igual: as docs citam Traefik e Caddy como as duas opções pra terminar TLS na frente do n8n. Escolha um e mantenha só um.

Passo 4: webhooks atrás do proxy com N8N_WEBHOOK_URL e N8N_PROXY_HOPS

Aqui mora o erro clássico. A variável WEBHOOK_URL foi deprecada a partir do n8n 2.35.0 e substituída por N8N_WEBHOOK_URL. Se você copiou tutorial antigo, o n8n pode montar URLs de webhook apontando pro endereço errado — e nenhuma integração externa chega.

Atrás de reverse proxy, a docs manda definir N8N_PROXY_HOPS=1 quando existe um proxy no caminho, e garantir que o último proxy repasse os headers X-Forwarded-For, X-Forwarded-Host e X-Forwarded-Proto. Sem isso, o n8n não enxerga o endereço real com que os clientes o chamam. O exemplo completo está no guia de configuração de webhooks com reverse proxy.

No compose do Passo 2 essas variáveis já entraram, e o Caddy do Passo 3 repassa os headers por padrão. Teste com um workflow de webhook de teste chamado de fora da VPS antes de colocar coisa séria pra rodar.

Atualizações: fixar a versão no compose e acompanhar patches sem quebrar a instância

O n8n lança versão minor quase toda semana. Pra dimensionar: a release 2.43.0 saiu em 2026-10-06 trazendo o Browser Use pra todos os usuários, o patch 2.41.7 apareceu no GitHub em 2026-10-05, e a beta atual é a 2.43.3. Ritmo assim é ótimo pra correção e péssimo pra quem atualiza produção no impulso.

Desde o n8n 2.0 os canais foram renomeados de latest/next pra stable/beta, e a recomendação oficial passou a ser fixar a versão por número específico no compose, em vez de tag flutuante. Na prática: você roda na 2.42.6, lê o que mudou, e só então muda a linha do image pra nova versão:

docker compose pull
docker compose up -d

Antes de atualizar, faça backup do volume n8n_data. Se a nova versão quebrar algo, o rollback é voltar a tag anterior e repetir os dois comandos. Pra acompanhar o que sai, siga a página de releases no GitHub e a página de release notes na documentação oficial. E evite a beta em produção: a própria docs avisa que pode ser instável.

Na prática: como uso isso aqui

No meu caso, a VPS é da Hostinger — uso e recomendo pela estabilidade e pelo preço. A diferença pro passo a passo acima é que eu ponho o Cloudflare na frente, usando Tunnel pra publicar a instância, então o tráfego entra por ali em vez de bater direto nas portas do servidor.

De webhook parado por causa de WEBHOOK_URL atrás de proxy eu nunca tive problema. E nos meus compose eu sempre usei a tag stable, pra trabalhar com a última versão estável, em vez de fixar número. Reconheço o trade-off: é o contrário do que a documentação recomenda. Se a sua instância é crítica, com cliente em cima, faça o que a docs manda — fixe o número e atualize devagar, com backup em mãos.

Problemas comuns e como resolver

  • 502 ou 504 no navegador depois de subir o Caddy: o proxy não alcançou o n8n. Confira se o nome do serviço no compose é n8n e se o Caddyfile aponta pra n8n:5678.
  • Webhook montado com endereço errado: variável antiga WEBHOOK_URL em uso. Troque por N8N_WEBHOOK_URL, que vale desde o n8n 2.35.0.
  • Editor lento ou travando atrás do proxy: confira o flush_interval -1 no Caddyfile, que o guia oficial usa justamente pra não segurar as respostas.
  • Certificado não emite: quase sempre o DNS ainda não aponta pra VPS ou a porta 80 está fechada no firewall.
  • Atualização quebrou algo: volte a tag fixada anterior no compose e rode docker compose up -d de novo. Com número fixo, rollback é uma linha.

Conclusão

VPS barata e n8n combinam bem, desde que a configuração respeite produção: firewall com 22, 80 e 443 apenas, proxy reverso com HTTPS automático, variáveis corretas pra webhook e proxy, e versão fixada no compose com atualização planejada. Nada disso é opcional quando tem credencial e histórico de execução dentro daquele volume.

Siga o guia oficial de referência na sua instalação, teste um webhook de fora antes do go-live e mantenha backup do volume. Com isso, sua instância fica mais parecida com um serviço e menos com um experimento.

Perguntas frequentes

Quais portas preciso liberar no firewall da VPS?

Apenas 22 (SSH), 80 e 443. Os guias oficiais pra VPS mandam abrir somente 80 e 443 pro acesso web ao n8n; a 5678 fica restrita à rede interna do Docker.

WEBHOOK_URL ainda funciona no n8n?

Foi deprecada a partir do n8n 2.35.0. Use N8N_WEBHOOK_URL e, atrás de proxy, defina também N8N_PROXY_HOPS=1 com os headers X-Forwarded-For, X-Forwarded-Host e X-Forwarded-Proto repassados.

Qual versão do n8n devo usar em produção?

A stable atual é a 2.42.6; a 2.43.3 é beta e pode ser instável. A recomendação oficial é fixar o número exato da versão no compose e atualizar só depois de ler o que mudou.

PUBLICIDADE
Este post foi útil para você?
🖥️
Quer ter o seu próprio servidor?

Para rodar sites, automações ou IA do seu jeito, uma VPS resolve. Este blog roda numa VPS da Hostinger, e pelo link abaixo você ganha desconto na contratação.

Ver planos de VPS da Hostinger →
Link de indicação: o blog recebe uma comissão, sem custo extra para você.

Leitura recomendada

💬 Comentários

Nenhum comentário ainda. Conte o que achou, tire uma dúvida ou discorde. Seja o primeiro!

Deixe seu comentário
O e-mail não aparece. Serve só para avisar quando responderem você.
Os comentários passam por aprovação antes de aparecer. Crie uma conta de leitor e, depois do primeiro aprovado, os próximos saem na hora.
Apoie o ConexãoTC

O ConexãoTC é independente e gratuito. Se as notícias fazem parte do seu dia, contribua com qualquer valor pelo PIX e ajude a manter o blog no ar.

QR code PIX para apoiar o ConexãoTC
Aponte a câmera do app do banco
Favorecido: Jean Dgardany C. Lima, editor do ConexãoTC
🗳️ O que você quer ler aqui?

Marque os assuntos que te interessam. Os mais pedidos viram os próximos artigos.

Leitores cadastrados têm as sugestões atendidas primeiro e recebem um aviso quando o artigo sai.
Fique por dentro

Os destaques do dia no seu e-mail, todo dia às 8h.

PUBLICIDADE