O mascote urso-polar do NordBastion sentado em um banco de pedra esculpida em um cofre nórdico escuro, com um laptop no colo e um grande fluxo de trabalho de automação holográfico ciano flutuando acima dele — seis nodes arredondados unidos por fios curvos brilhantes — com o escudo-N ciano encostado no banco e um rack de servidor ao lado dele
Tutorial · Self-host·13 min de leitura · 30 min prático

Hospede seu próprio n8n em um VPS.
Seu motor de automação, suas credenciais, seu hardware.

Seis passos de um VPS nórdico nu até um n8n com TLS terminado no seu próprio domínio — Docker Compose, Caddy, PostgreSQL, webhooks que realmente disparam. Execuções limitadas pela sua CPU, não por um nível de plano, em uma máquina que custa $3.90 por mês. Testado em Debian 12 com n8n 2.x.

As seis etapas
  1. 01

    Provisionar

    VPS + um registro A

  2. 02

    Instalar

    get.docker.com

  3. 03

    Compose

    n8n + Caddy + Postgres

  4. 04

    Primeiro boot

    Conta de proprietário + 2FA

  5. 05

    Webhooks

    WEBHOOK_URL

  6. 06

    Fortalecer

    Podar, silenciar, fazer backup

Antes de começar · Licença e custo

O que você está realmente instalando. E o que a licença te permite fazer com isso.

O n8n é um motor de automação de fluxos de trabalho: uma tela visual onde você conecta um trigger — um webhook, um agendamento, uma linha nova em um banco de dados, uma mensagem em uma fila — a uma cadeia de nodes que chamam APIs, transformam dados, ramificam por condições, rodam JavaScript ou Python arbitrário, e entregam o resultado para o que vem a seguir. Várias centenas de nodes de integração já vêm de fábrica, além de um node genérico HTTP Request que cobre tudo o mais. Desde a linha 1.x ele também carrega nodes AI Agent e LLM, que é por isso que boa parte das pessoas que o instalam em 2026 está construindo agentes em vez da encanação clássica de ETL.

A parte que importa antes de você digitar um único comando é a licença, porque o n8n não é open source no sentido da OSI e a diferença não é acadêmica. O núcleo é distribuído sob a Sustainable Use License: uma concessão mundial, não exclusiva e livre de royalties para usar, copiar, modificar e distribuir o software para fins comerciais internos e para uso pessoal ou não comercial. O que ela retém é o direito de cobrar de terceiros pelo n8n ou por uma derivação dele — que é a cláusula que descarta construir um produto pago de "n8n gerenciado" em cima dele. Separadamente, qualquer arquivo que carregue .ee. no nome ou .ee no caminho é excluído inteiramente dessa licença e exige uma n8n Enterprise License paga.

Em termos simples: rodar o n8n em um VPS para automatizar a sua própria empresa, o trabalho dos seus próprios clientes entregue como um serviço que você presta, ou a sua própria vida pessoal, está dentro da concessão gratuita e sempre esteve. Vender n8n-como-produto-de-hospedagem não está. Quase toda discussão de "o n8n é realmente gratuito?" na internet é duas pessoas falando sem se entender através dessa linha.

O lado do custo. O n8n Cloud tem preço por execução: o plano Starter é €20 por mês cobrado anualmente para 2,500 execuções, o Pro é €50 por mês para 10,000, o Business é €667 por mês para 40,000. Auto-hospedado, a contagem de execuções não é nem um item de cobrança — ela é limitada por quanta CPU e memória a máquina tem. Um fluxo de trabalho que faz polling em uma API a cada cinco minutos já queima 8,640 execuções por mês sozinho; no Cloud esse único fluxo de trabalho já força o tier Pro, e em um VPS de $3.90 isso é um erro de arredondamento contra a CPU ociosa.

Opção Mensal Execuções incluídas Quem opera isso
n8n Cloud · Starter€202 500n8n GmbH
n8n Cloud · Pro€5010 000n8n GmbH
n8n Cloud · Business€66740 000n8n GmbH
Auto-hospedado · VPS Sentinel$3.90Limitado por CPU, não medidoVocê

Preços do Cloud conforme publicados no n8n.io em agosto de 2026, cobrados anualmente; a cobrança mensal custa mais. A troca não é só dinheiro — hospedar você mesmo transfere atualizações, backups, renovação de TLS e uptime para o seu lado da linha.

Antes de começar · Dimensionamento

Dimensionando a máquina. Quatro gigabytes é o piso, o disco é o problema escondido.

A própria documentação de Docker Compose do n8n dá o mínimo como 2 vCPU e 4 GB de RAM. Esse não é um número de marketing: abaixo dele o front-end do editor e um fluxo de trabalho moderadamente ramificado vão brigar entre si por memória, e o primeiro payload JSON grande vai derrubar o container com um out-of-memory kill.

Sentinel · 2 vCPU, 4 GB, 120 GB NVMe, $3.90/mês. O padrão certo. Roda n8n, PostgreSQL e Caddy juntos com folga para uma instância pessoal ou de equipe pequena fazendo algumas centenas de execuções por dia. A memória ociosa fica em torno de 700 MB somando os três containers.

Garrison · 4 vCPU, 8 GB, 240 GB NVMe, $7.90/mês. O passo acima para quando você adiciona o modo fila com Redis e um ou dois containers worker, quando os fluxos de trabalho costumam manter payloads de vários megabytes em memória, ou quando você quer uma margem confortável para fluxos de trabalho de agentes de IA que se ramificam em vários caminhos paralelos.

Ravelin · 8 vCPU, 16 GB, 480 GB NVMe, $16.90/mês. Uma instância de equipe com milhares de execuções por dia e trabalho pesado em binários — geração de PDF, processamento de imagem, transcrição de áudio. Núcleos dedicados importam aqui porque essas cargas de trabalho são limitadas por CPU, e não por API.

O disco é a parte que as pessoas esquecem. O n8n armazena a entrada e saída completas de cada node de cada execução. Um fluxo de trabalho tagarela rodando a cada minuto escreve centenas de megabytes por semana. Os padrões podam sim — EXECUTIONS_DATA_PRUNE é true, EXECUTIONS_DATA_MAX_AGE é 336 horas (catorze dias) e EXECUTIONS_DATA_PRUNE_MAX_COUNT é 10 000 — mas catorze dias de uma instância movimentada ainda é bastante NVMe. O Passo 06 aperta isso.

Passo 01 · Provisionar

Um VPS nórdico e um registro DNS. Nessa ordem.

No painel: Order → VPS → Sentinel, imagem Debian 12. Nenhum endereço de e-mail é exigido para abrir a conta, nenhum documento de identidade é solicitado em nenhum momento, e a fatura é quitada em Monero, Bitcoin, Lightning ou qualquer um dos outros ativos suportados. Escolha o bastion pela latência até os serviços que você automatiza, e não até você mesmo — um servidor de automação conversa com APIs muito mais do que conversa com você.

Depois crie o registro DNS antes de tocar no servidor: um registro A para n8n.example.com apontando para o IPv4 do VPS, e um registro AAAA se você usa IPv6. Isso precisa ser feito primeiro, porque o Caddy pede um certificado ao Let's Encrypt no momento em que o stack sobe, e um pedido de certificado para um nome que não resolve falha — depois recua, e você passa vinte minutos se perguntando por que o site está inacessível.

Dê um minuto para o DNS propagar e confirme a partir da sua própria máquina antes de continuar:

dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else

Antes de qualquer coisa escutar em uma porta pública, siga o checklist de hardenização da primeira hora — SSH somente por chave, um firewall que permite 22, 80 e 443 e mais nada, e atualizações de segurança não supervisionadas. Um servidor de automação é um cofre de credenciais; ele merece a hora inteira.

Passo 02 · Instalar

Docker, e mais nada. Um comando.

Conecte por SSH e instale o Docker Engine com o plugin Compose v2:

apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version

O script de conveniência instala o Engine, a CLI, o containerd e o plugin Compose a partir do próprio repositório do Docker. A última linha deve imprimir Docker Compose version v2 ou superior; se imprimir "docker: 'compose' is not a docker command" você tem o pacote docker.io mais antigo da distribuição instalado e deve removê-lo primeiro.

Existe um instalador de n8n de uma linha só que embrulha tudo isso, e ele funciona. Este guia escreve o arquivo Compose à mão em vez disso, porque tudo o que você vai precisar mudar depois — a chave de criptografia, o banco de dados, a URL do webhook, a política de retenção, a quantidade de workers — mora nesse arquivo, e um stack que você não consegue ler é um stack que você não consegue consertar às 3 da manhã.

Passo 03 · Compose

Três arquivos em /opt/n8n. n8n, PostgreSQL, Caddy.

Crie o diretório e gere os dois segredos primeiro. Gere-os agora, nessa ordem, e cole-os no .env conforme for gerando — a chave de criptografia em particular precisa existir antes do primeiro boot do n8n, não depois.

mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32   # → N8N_ENCRYPTION_KEY
openssl rand -hex 24   # → POSTGRES_PASSWORD

/opt/n8n/.env

DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm

N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here

Trave o arquivo imediatamente — ele guarda a chave de toda credencial que a instância algum dia vai armazenar:

chmod 600 /opt/n8n/.env

/opt/n8n/docker-compose.yml

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - DOMAIN=${DOMAIN}
      - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - N8N_HOST=${DOMAIN}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_EDITOR_BASE_URL=https://${DOMAIN}
      - WEBHOOK_URL=https://${DOMAIN}/
      - N8N_PROXY_HOPS=1
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_VERSION_NOTIFICATIONS_ENABLED=false
      - N8N_PERSONALIZATION_ENABLED=false
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  caddy_data:
  caddy_config:
  pg_data:
  n8n_data:

/opt/n8n/Caddyfile

{$DOMAIN} {
    encode zstd gzip
    tls {$LETSENCRYPT_EMAIL}
    reverse_proxy n8n:5678
}

Duas decisões de design que vale a pena nomear. Primeiro, o n8n não publica uma porta. Só o Caddy vincula as portas 80 e 443; o n8n escuta na 5678 dentro da rede do Compose, onde nada fora do host consegue alcançá-lo. Um número surpreendente de instâncias de n8n auto-hospedadas está na internet pública na porta 5678 sem TLS na frente, e mecanismos de busca para serviços expostos as indexam. Segundo, o volume de dados do n8n continua montado mesmo que o PostgreSQL agora guarde os fluxos de trabalho — esse diretório ainda carrega as configurações da instância, os arquivos de log e os ativos de controle de versão.

Suba o stack:

cd /opt/n8n
docker compose up -d
docker compose logs -f caddy   # watch the certificate being issued
Passo 04 · Primeiro boot

A conta de proprietário, e a chave que você não pode perder. Leia esta duas vezes.

Abra https://n8n.example.com. A primeira tela é a configuração da conta de proprietário — e-mail, senha, nome. Não existe mais nenhuma variável de ambiente de autenticação básica HTTP para configurar; o gerenciamento de usuários faz parte do n8n desde a linha 1.x, e a conta que você cria aqui é a proprietária da instância. Use uma senha do seu gerenciador de senhas, depois vá direto em Settings → Personal → Two-factor authentication e ative. Esse login é a porta da frente para toda chave de API que você algum dia vai colar em um node.

O único erro irreversível

O n8n criptografa cada credencial armazenada com a N8N_ENCRYPTION_KEY. Se você não a definir, o n8n gera uma no primeiro boot e a escreve dentro do volume de dados. Recrie esse volume — um docker compose down -v, uma migração para um servidor novo, uma restauração malfeita — e a nova instância gera uma chave diferente, toda credencial no banco de dados se torna indecifrável, e não existe caminho de recuperação nenhum. Você reinsere cada chave de API, token OAuth e senha manualmente. Defina a chave explicitamente, como este guia faz, e guarde uma cópia fora do servidor.

O lugar certo para essa cópia é um gerenciador de senhas que você também controla — o guia do Vaultwarden auto-hospedado cobre um, e o ponto deliberado é que ele não deve morar na mesma máquina que a coisa que ele destrava.

Verifique se o banco de dados é realmente PostgreSQL e não o fallback SQLite — se as variáveis DB_ tiverem um erro de digitação, o n8n inicia silenciosamente em SQLite e você descobre três meses depois:

docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
Passo 05 · Webhooks

A metade que silenciosamente não funciona. Webhooks atrás de um proxy.

Um n8n que inicializa, mostra o editor e executa um teste manual ainda não é um n8n funcional. A metade que quebra silenciosamente são os webhooks de entrada, e ela quebra de formas que parecem culpa do serviço de terceiros.

WEBHOOK_URL. Sem ela, o n8n constrói as URLs de webhook a partir de N8N_HOST e N8N_PORT e te entrega algo como http://localhost:5678/webhook/abc — que você então cola no Stripe ou no GitHub, onde nunca poderá ser alcançada. O arquivo Compose acima define WEBHOOK_URL para a raiz HTTPS pública, que é o que o editor vai exibir e o que o mundo exterior realmente consegue chamar.

N8N_EDITOR_BASE_URL. A URL pública que o n8n usa para os links nos e-mails que envia — redefinições de senha, convites de usuário. Errado aqui significa um link de convite apontando para localhost, o que vira um chamado de suporte de um colega em vez de uma integração quebrada.

N8N_PROXY_HOPS. O n8n lê o IP do cliente a partir do X-Forwarded-For, e só confia em tantos saltos quanto esse número disser. Com um proxy reverso na frente — o Caddy neste stack — o valor é 1. Coloque o Cloudflare na frente do Caddy e ele vira 2. Deixe no padrão 0 e toda requisição parece vir do próprio proxy, o que quebra silenciosamente os rate limits e qualquer lógica baseada em IP nos seus fluxos de trabalho.

N8N_SECURE_COOKIE. O padrão é true, o que significa que o cookie de sessão só é enviado por HTTPS. Essa é a configuração correta e este stack a satisfaz. Vale a pena saber porque isso explica o sintoma clássico de uma primeira tentativa em http puro: o formulário de login aceita a senha e depois te devolve para o formulário de login, para sempre. A correção é TLS, não desligar a flag.

Teste direito. Crie um fluxo de trabalho com um node Webhook, ative o fluxo de trabalho, copie a Production URL, e então a chame a partir de uma máquina que não seja o servidor:

curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor

A distinção que faz todo mundo tropeçar uma vez: a Test URL só escuta enquanto você tem o editor aberto com "Listen for test event" armado. A Production URL só existe quando o fluxo de trabalho está com o botão Active ligado. Um webhook que funciona no editor e dá 404 em produção é quase sempre um fluxo de trabalho inativo.

Passo 06 · Hardenização

Podar, silenciar, fazer backup. As três coisas que decidem se ele sobrevive um ano.

Retenção. Os padrões mantêm catorze dias ou 10 000 execuções, o que vier primeiro, com dados completos de entrada e saída para cada node. Em um NVMe pequeno com um trigger de agendamento movimentado, isso é o que enche o disco. Adicione o seguinte ao bloco de ambiente do n8n e reinicie:

- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168          # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise

EXECUTIONS_DATA_SAVE_ON_SUCCESS=none é o maior ganho isolado em uma instância de alta frequência: para de gravar os payloads das execuções que deram certo, enquanto continua armazenando toda execução que falhou por completo para você poder depurá-la. Mantenha em "all" enquanto ainda está construindo o fluxo de trabalho, depois mude assim que o fluxo de trabalho ficar entediante.

Silêncio. O arquivo Compose já desliga o diagnostics, as notificações de versão e a pesquisa de personalização. A chamada de saída restante é a galeria de templates, que busca em api.n8n.io; defina N8N_TEMPLATES_ENABLED=false se você não quiser nenhuma chamada a terceiros. Se você desativar as notificações de versão, coloque um lembrete mensal no seu calendário para ler as release notes — uma instância auto-hospedada que ninguém atualiza é um resultado pior do que uma que fica checando versões.

O node Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, já presente no arquivo, impede que expressões e nodes Code leiam variáveis de ambiente do processo — o que nesta máquina significa a senha do PostgreSQL e a chave de criptografia. Se você não usa a API REST pública, adicione N8N_PUBLIC_API_DISABLED=true e feche também essa superfície.

Backups — as três partes ou nenhuma. Um backup do banco de dados sozinho não vale nada sem a chave de criptografia, e a chave sozinha não restaura nada. Faça backup do dump do PostgreSQL, do volume de dados do n8n e do .env juntos, e mantenha pelo menos uma cópia fora do servidor:

cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)

O nome do volume é o nome do projeto Compose mais o nome do volume; se o seu diretório não se chama n8n, rode docker volume ls e use o que você ver. Coloque as três linhas em um cron job, envie os arquivos para outro lugar, e teste uma restauração pelo menos uma vez — um backup não testado é uma crença, não um backup.

Atualizações. docker compose pull seguido de docker compose up -d. Tire um snapshot antes: o n8n roda migrações de banco de dados ao iniciar, e migrações não são feitas para ter rollback. Ao atravessar uma versão major — o salto de 1.x para 2.x, por exemplo — leia as release notes antes de fazer o pull, não depois, e considere fixar uma tag de imagem explícita em vez de :latest, para que um reinício não supervisionado nunca te atualize de surpresa.

Indo além · Escalonamento

Quando um processo não é suficiente. Modo fila, Redis e workers.

Por padrão o n8n roda em modo regular: o mesmo processo que serve o editor e recebe webhooks também executa os fluxos de trabalho. É simples e funciona bem até um fluxo de trabalho longo começar a fazer os outros esperarem. O sintoma é inconfundível — execuções ficam em "running" por minutos, o editor fica lento, e um webhook que deveria responder em 200 ms responde em oito segundos.

O modo fila divide o trabalho. A instância principal mantém o editor, os triggers e os endpoints de webhook; ela empurra IDs de execução para o Redis; processos worker separados os puxam, carregam o fluxo de trabalho do PostgreSQL, o executam, e reportam de volta pelo Redis. Três regras decorrem dessa arquitetura e todas as três mordem quem as ignora: toda instância precisa compartilhar o mesmo banco de dados PostgreSQL, toda instância precisa carregar a mesma N8N_ENCRYPTION_KEY, e SQLite não é suportado de jeito nenhum.

As adições ao arquivo Compose são um serviço Redis e um serviço worker, que é a mesma imagem do n8n rodada com o comando worker:

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
    volumes:
      - redis_data:/data

  n8n-worker:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    command: worker --concurrency=5
    depends_on:
      - redis
      - postgres
    environment:
      # the SAME encryption key and the SAME database as the main instance
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}

Adicione EXECUTIONS_MODE=queue e QUEUE_BULL_REDIS_HOST=redis também ao serviço principal do n8n — os dois lados precisam concordar sobre o modo. Duas opções valem a pena configurar desde o primeiro dia: OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, para que clicar em "Test workflow" no editor não trave o processo principal, e N8N_GRACEFUL_SHUTDOWN_TIMEOUT, que por padrão é 30 segundos e decide por quanto tempo um worker pode terminar seu job atual durante um redeploy. Se seus fluxos de trabalho costumam rodar por mais de meio minuto, aumente esse valor — ou todo deploy mata trabalho em andamento.

Não comece por aqui. O modo fila adiciona duas partes móveis e uma classe de falha que o modo regular simplesmente não tem. Fique no modo regular até você ver a fila crescendo ou um fluxo de trabalho bloqueando outro, depois adicione um único worker na mesma máquina antes de adicionar uma segunda máquina. Essa progressão — Sentinel em modo regular, Garrison com um worker, Ravelin com três — cobre tudo, exceto uma implantação genuinamente grande.

A camada sob a aplicação

O que a máquina realmente guarda. E por que isso muda quem deveria ser o dono dela.

A maioria dos guias de hospedagem própria trata a escolha do host como uma questão de desempenho. Para um motor de automação, não é. Uma instância de n8n guarda duas coisas que quase mais nada que você auto-hospeda guarda junto: uma única tabela criptografada contendo as chaves de API, tokens OAuth e senhas de e-mail de cada serviço que você automatiza, e — bem ao lado dela — um grafo que descreve exatamente como a sua organização funciona. Qual CRM. Qual feed bancário. Qual fornecedor. Quais clientes recebem qual e-mail, em qual gatilho. Leia a lista de fluxos de trabalho de uma empresa e você leu a empresa.

Camada um — quem o host pensa que você é. A camada de aplicação aqui é genuinamente boa: as credenciais são criptografadas em repouso, o editor fica atrás de TLS e 2FA. A camada que vaza é a de baixo. Um plano hospedado conhece sua entidade legal, seu endereço de cobrança e seu cartão. Um hyperscaler conhece o mesmo e guarda isso por anos. Essa não é uma exposição hipotética; é a chave de junção entre "existe um cofre criptografado" e "ele pertence a esta empresa nomeada". Um cadastro sem e-mail e sem documento de identidade, quitado em Monero, remove a chave de junção em vez do cofre.

Camada dois — o disco. Criptografia em repouso só ajuda contra quem não tem também a chave, e em uma instalação padrão a chave fica no mesmo sistema de arquivos que o banco de dados. Mantenha o .env em modo 600, mantenha uma cópia da chave fora da máquina, e prefira um provedor cuja jurisdição não transforma um datacenter em um lugar conveniente para receber citação judicial — que é todo o argumento do guia de jurisdições nórdicas.

Camada três — o IP de saída. Todo node HTTP Request sai do endereço do VPS, e esse endereço carrega uma reputação. Faixas de hyperscalers são as mais agressivamente limitadas por rate limit e bloqueadas por CAPTCHA na internet, porque é onde vivem os scrapers; um fluxo de trabalho que faz scraping ou polling vai começar a falhar em um IP da AWS ou da DigitalOcean muito antes de falhar em uma faixa nórdica mais discreta. O n8n também respeita as variáveis padrão HTTP_PROXY, HTTPS_PROXY, ALL_PROXY e NO_PROXY, então o punhado de fluxos de trabalho que precisa de uma saída diferente pode ser roteado por um proxy SOCKS local ou pelo Tor enquanto todo o resto vai direto.

Mais uma porta, nova na linha 2.x: o n8n pode expor um servidor MCP em nível de instância para que um agente de IA possa chamar seus fluxos de trabalho como ferramentas. É genuinamente útil e também é um endpoint público para dentro da sua camada de automação, que merece o mesmo tratamento que qualquer outro — veja o guia de servidor MCP remoto para o raciocínio sobre TLS, OAuth e exposição.

Notas de campo · Seis armadilhas

Seis formas de isso dar errado. Na ordem em que as pessoas esbarram nelas.

Armadilha 01 · Irreversível

Toda credencial de repente falha ao descriptografar

O volume de dados foi recriado e o n8n gerou uma chave de criptografia nova. Nada recupera as credenciais antigas. Sempre defina N8N_ENCRYPTION_KEY explicitamente e mantenha uma cópia fora do servidor.

Armadilha 02 · Integração

A URL do webhook diz localhost

WEBHOOK_URL não está definida, então o n8n constrói as URLs a partir de N8N_HOST. Defina WEBHOOK_URL e N8N_EDITOR_BASE_URL para o endereço HTTPS público e reinicie o container.

Armadilha 03 · Acesso

O formulário de login entra em loop para sempre

Você está acessando o editor por http puro e o cookie de sessão seguro é recusado. Termine a configuração de TLS em vez de definir N8N_SECURE_COOKIE como false em uma instância pública.

Armadilha 04 · Capacidade

O disco enche depois de dois meses

Catorze dias de dados completos de execução a partir de um gatilho minuto a minuto. Aperte o EXECUTIONS_DATA_MAX_AGE e o PRUNE_MAX_COUNT, e pare de salvar execuções bem-sucedidas.

Armadilha 05 · Atualização

Um reinício não supervisionado puxou uma versão major

A tag :latest somada a migrações de banco de dados que não fazem rollback. Fixe uma tag explícita, tire um snapshot antes de cada pull, e leia as release notes ao atravessar versões major.

Armadilha 06 · Agendamento

Triggers de agendamento disparam na hora errada

GENERIC_TIMEZONE tem como padrão America/New_York, que raramente é o que alguém quer. Defina GENERIC_TIMEZONE e TZ para o mesmo fuso real e reinicie.

FAQ · Hospede seu próprio n8n

Perguntas, respondidas.

Dez perguntas que surgem antes, durante e depois de mover uma instância de n8n para o seu próprio servidor.

Hospedar você mesmo o n8n é realmente gratuito?

Para suas próprias automações, sim. O n8n é distribuído sob a Sustainable Use License: você pode usar, copiar, modificar e distribuir para fins comerciais internos e para uso pessoal ou não comercial, sem custo. O que a licença proíbe é cobrar de terceiros pelo n8n ou por uma derivação dele — na prática, revender "hospedagem de n8n" como produto. Arquivos com .ee. no nome ou .ee no caminho do diretório ficam de fora dessa licença e exigem uma n8n Enterprise License paga. Ou seja: automatizar a sua própria empresa em um VPS que você aluga está totalmente dentro da concessão gratuita; construir um negócio de n8n hospedado em cima disso não está.

Quanto de VPS eu preciso para rodar o n8n?

A própria documentação de Docker Compose do n8n declara um mínimo de 2 vCPU e 4 GB de RAM. Esse é exatamente o tier Sentinel ($3.90/mês — 2 vCPU, 4 GB, 120 GB NVMe), que roda com folga n8n mais PostgreSQL mais Caddy para uma instância pessoal ou de equipe pequena. Suba para o Garrison (4 vCPU, 8 GB, $7.90/mês) quando adicionar workers em modo fila ou rodar fluxos de trabalho que mantêm payloads grandes em memória, e para o Ravelin (8 vCPU, 16 GB, $16.90/mês) para uma instância de equipe fazendo milhares de execuções por dia com dados binários — PDFs, imagens, áudio.

SQLite ou PostgreSQL para o n8n?

SQLite é o padrão e é genuinamente adequado para uma pessoa com um punhado de fluxos de trabalho. Mude para PostgreSQL quando você tiver execuções concorrentes, quando o histórico de execuções passar de algumas centenas de milhares de linhas, ou quando você planejar escalar — e note que o modo fila não suporta SQLite de jeito nenhum. Migrar depois significa exportar fluxos de trabalho e credenciais e reimportá-los em uma instância nova, o que é uma tarde que você não vai gostar de passar. Se houver qualquer chance de crescimento, comece com PostgreSQL; o arquivo Compose deste guia já faz isso.

O que acontece se eu perder a N8N_ENCRYPTION_KEY?

Toda credencial no banco de dados se torna permanentemente ilegível. O n8n criptografa as credenciais armazenadas — tokens OAuth, chaves de API, senhas SMTP — com essa chave, e não existe mecanismo de recuperação nem chamado de suporte que as traga de volta. Você reinsere cada credencial manualmente. Essa é a forma mais comum de uma instância de n8n auto-hospedada ser destruída: alguém recria o volume do Docker, o n8n gera uma chave nova, e todos os fluxos de trabalho começam a falhar de uma vez com um erro de descriptografia. Defina a chave explicitamente no seu .env antes do primeiro boot, e guarde uma cópia em algum lugar que não seja o servidor.

Por que meus webhooks do n8n não estão disparando?

Quatro causas, em ordem de frequência. (1) WEBHOOK_URL não está definida, então o editor te entrega uma URL http://localhost:5678/webhook/… que nenhum serviço externo consegue alcançar — defina-a como sua URL HTTPS pública. (2) O fluxo de trabalho não está ativado; a URL de teste só escuta enquanto o editor está aberto, a URL de produção só existe quando o fluxo de trabalho está ativo. (3) DNS ou firewall: o registro não resolve, ou as portas 80/443 estão fechadas. (4) Você está atrás de uma camada extra de proxy e não definiu N8N_PROXY_HOPS, então o n8n lê o IP de cliente errado. Teste com um curl simples a partir de uma máquina que não seja o servidor.

Posso rodar o n8n junto com outros serviços no mesmo VPS?

Sim, e é o padrão normal — um Caddy na frente, uma rede Compose, o n8n em um hostname e Vaultwarden, Nextcloud ou SearXNG em outros. Duas ressalvas. Memória: n8n mais PostgreSQL ficam ociosos em torno de 700 MB e um fluxo de trabalho pesado pode disparar bem acima disso, então deixe folga. Raio de explosão: o banco de dados do n8n é a coisa mais densa em credenciais na máquina, então qualquer outra coisa que compartilhe esse host herda o seu perfil de risco. Em um tier de $3.90/mês é razoável dar ao motor de automação o seu próprio servidor.

O n8n auto-hospedado telefona para casa?

Por padrão, três endpoints. Telemetria anônima do produto (N8N_DIAGNOSTICS_ENABLED, padrão true), a verificação de nova versão e atualização de segurança contra api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED, padrão true), e o navegador de templates de fluxo de trabalho, que busca em https://api.n8n.io (N8N_TEMPLATES_ENABLED, padrão true). Nenhum deles envia suas credenciais ou os dados dos seus fluxos de trabalho, mas todos os três anunciam que existe uma instância no seu IP. Defina os três como false se quiser que a máquina fique silenciosa — você perde a galeria de templates e o aviso de atualização, então fique de olho nos releases por conta própria.

n8n Cloud ou auto-hospedado — onde fica o ponto de equilíbrio?

O n8n Cloud Starter custa €20/mês cobrado anualmente para 2,500 execuções; o Pro custa €50/mês para 10,000. Um VPS Sentinel custa $3.90/mês e a contagem de execuções é limitada apenas por CPU e RAM, o que para fluxos de trabalho típicos de webhook e API significa dezenas de milhares. O ponto de equilíbrio financeiro é imediato; o custo real é operacional. Hospedar você mesmo significa que você é o dono das atualizações, dos backups, da renovação de TLS e do incidente de disco cheio às 3 da manhã. A regra honesta: se você não teria atualizado a instância sozinho dentro de um mês de um release de segurança, pague pelo Cloud. Se um docker compose pull mensal já faz parte da sua vida, hospede você mesmo.

Por que um host sem KYC importa especificamente para um servidor de automação?

Por causa do que uma instância de n8n guarda. A tabela de credenciais é um único repositório criptografado com as chaves de API, tokens OAuth e senhas de e-mail de cada serviço que você automatiza, e o grafo de fluxos de trabalho ao lado dela é um mapa legível de como o seu negócio realmente opera — qual CRM, qual feed bancário, qual fornecedor, quais clientes. Um site estático não vaza nada disso. A camada de aplicação protege bem; é na camada de metadados que vaza. Se o cadastro da máquina carrega um scan de passaporte e um cartão, você criptografou o cofre e escreveu seu nome na porta. Um host no-KYC pago em Monero mantém as duas camadas alinhadas.

Posso rodar agentes de IA no n8n neste VPS?

Sim para o formato mais comum — um node AI Agent chamando uma API de modelo remota. Essa carga de trabalho é limitada por I/O, ela espera pelo provedor, e um Sentinel dá conta. O que não cabe é rodar o modelo em si: um modelo local de 7B quer cerca de 8 GB de RAM e velocidade real de inferência quer uma GPU, que esses tiers não carregam. Aponte o n8n para um endpoint remoto compatível com OpenAI e mantenha o VPS leve. O guia complementar sobre rodar um agente de IA 24/7 cobre o lado do runtime — políticas de restart, segredos, limites de gasto e a armadilha do crash-loop.

Obtenha o hardware

Um VPS nórdico para o seu motor de automação. Sem KYC, pago em cripto.

O Sentinel (2 vCPU, 4 GB, 120 GB NVMe, $3.90/mês) atende ao mínimo do n8n com espaço para PostgreSQL e Caddy na mesma máquina. Sem e-mail no cadastro, sem documento de identidade, execuções ilimitadas.

Última revisão · 2026-08-24 · Fontes · Documentação de hospedagem do n8n, n8n LICENSE.md (Sustainable Use License), página de preços do n8n.io, docs oficiais de Docker e Caddy · Cadência · anualmente