n8n em um VPS: sua própria plataforma de automação sem tarefas manuais repetitivas
Uma solicitação chega pelo site. O n8n verifica os dados, procura duplicidades, cria uma oportunidade, prepara um rascunho de resposta com IA e avisa o responsável pelo Telegram. Uma pessoa só entra no processo quando é preciso tomar uma decisão, e não para transferir dados entre abas.
A seguir, veremos como o n8n funciona e como instalá-lo em um VPS com Docker Compose, PostgreSQL, HTTPS e execução isolada de código.
n8n em sete etapas
Plano mínimo de implantação:
- Crie um VPS e aponte um subdomínio para ele, por exemplo
n8n.example.com. - Instale o Docker e o Docker Compose.
- Execute o n8n com PostgreSQL, um task runner externo e Caddy.
- Abra a interface por HTTPS e crie a conta do proprietário.
- Conecte o Telegram, um CRM, o e-mail ou qualquer API externa.
- Configure o tratamento de erros e o período de retenção das execuções.
- Automatize os backups do banco de dados, dos dados e da chave de criptografia.
Para uma pequena instalação em produção, é razoável começar com 2 vCPU e 4 GB de RAM. Para testes, 2 GB muitas vezes são suficientes, mas PostgreSQL, Docker e processos paralelos consomem rapidamente a margem disponível.
O que é o n8n e como ele funciona
O n8n é uma plataforma de automação de fluxos de trabalho. Um cenário é montado com nós: um inicia o processo, os seguintes recebem e transformam os dados, e o último executa uma ação.
Um workflow simples tem esta aparência:
Webhook → verificação dos dados → CRM → Telegram → resposta ao site
O fluxo pode ser iniciado por um webhook, um agendamento, um e-mail, uma mensagem ou um evento de um serviço externo. Entre os nós, é possível usar condições, loops, filtros, esperas e tratamento de erros.
Um dos pontos fortes do n8n é que a automação não fica limitada às integrações prontas. Qualquer serviço que tenha uma API pode ser acessado por HTTP Request, enquanto uma lógica específica pode ser escrita em um Code node com JavaScript ou Python. Por isso, o n8n fica entre um construtor no-code simples e um código de servidor desenvolvido do zero.
Por que ele é mais do que um encaminhador de dados
O n8n é útil quando um processo passa por vários sistemas e exige uma decisão:
formulário → verificação → busca de duplicidade → avaliação por IA → aprovação do responsável → CRM
A pessoa pode ficar apenas no ponto de controle. Por exemplo, a IA prepara uma resposta, mas a mensagem só é enviada ao cliente depois da aprovação de um funcionário.
Cenários comuns:
- vendas e suporte: coleta de solicitações, distribuição de leads e criação de oportunidades;
- conteúdo e IA: elaboração de rascunhos, classificação de solicitações e publicação após aprovação;
- DevOps: notificações de falhas, webhooks do Git e verificações de API;
- operações internas: sincronização de planilhas, e-mails, calendários e sistemas corporativos.
Uma instalação self-hosted oferece controle sobre o processo e o banco de dados, mas não transforma serviços externos em serviços locais. Os dados enviados ao Telegram, a um CRM ou a um modelo de IA na nuvem saem do VPS.
n8n Cloud ou servidor próprio
| Parâmetro | n8n Cloud | n8n em um VPS |
|---|---|---|
| Implantação | Sem configuração de servidor | Exige domínio, Docker e HTTPS |
| Atualizações | Feitas pelo n8n | Feitas pelo proprietário |
| Banco de dados e arquivos | Na infraestrutura do serviço | No servidor escolhido |
| Escalabilidade | Conforme as condições do plano na nuvem | Configurada por conta própria |
| Responsabilidade | Menos administração | Backups, proteção e monitoramento por conta do proprietário |
| Para quem é indicado | Início rápido sem DevOps | Controle, personalização e processos contínuos |
A Community Edition pode ser hospedada gratuitamente em um servidor próprio e usada em processos pessoais e internos da empresa. No entanto, o n8n não é distribuído sob uma licença open source tradicional, mas pelo modelo fair-code Sustainable Use License. Ela permite o uso interno e modificações, mas não permite simplesmente implantar o n8n, colocar sua própria marca e vender o acesso como um SaaS separado. Para esse tipo de produto, é necessário verificar as condições da licença separadamente.
Requisitos de servidor do n8n
A carga depende do volume de dados, do paralelismo e do tipo de operação. Arquivos, listas longas, Code nodes e fluxos com IA exigem mais memória do que o envio de pequenos objetos JSON entre APIs.
| Cenário | Configuração inicial |
|---|---|
| Testes e workflows pessoais de texto | 1 vCPU, 2 GB de RAM, 20 GB NVMe |
| Pequena instalação em produção | 2 vCPU, 4 GB de RAM, 25–40 GB NVMe |
| Processos paralelos, IA ou arquivos | 4 vCPU, 8 GB de RAM ou mais |
| Vários processos worker no queue mode | Dimensionamento conforme o número de execuções |
O SQLite é adequado para conhecer a plataforma e para uma pequena instância única. Para uma instalação em produção, o PostgreSQL é mais conveniente: facilita os backups e uma futura migração para o queue mode.
Como instalar o n8n em um VPS
Este exemplo usa Ubuntu 24.04, PostgreSQL, Caddy e um task runner externo. Substitua n8n.example.com e o fuso horário pelos seus próprios valores.
1. Configure o DNS e prepare o servidor
Crie um registro DNS A apontando para o endereço IPv4 do VPS e depois conecte-se por SSH:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw opensslInstale o Docker Engine e o plugin Compose a partir do repositório oficial:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose versionAbra apenas SSH, HTTP e HTTPS:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enableNão feche a sessão SSH atual até confirmar que uma nova conexão funciona.
2. Crie as variáveis de ambiente
Prepare o diretório:
mkdir -p /opt/n8n
cd /opt/n8nCrie o arquivo .env. Os comandos abaixo geram imediatamente segredos aleatórios diferentes para o PostgreSQL, a criptografia do n8n e o task runner:
cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envA tag stable é conveniente para a primeira inicialização. Depois de verificar a instalação, é melhor fixar uma versão específica do n8n para evitar que uma próxima atualização da imagem aconteça de forma inesperada.
A N8N_ENCRYPTION_KEY não pode ser perdida. O n8n usa essa chave para criptografar senhas, tokens e outras credenciais salvas. Se você restaurar apenas o PostgreSQL sem a chave, os registros continuarão no banco de dados, mas o n8n não conseguirá lê-los.
3. Crie a configuração do Docker Compose
Crie o arquivo compose.yaml:
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: "5432"
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_HOST: ${N8N_HOST}
N8N_PORT: "5678"
N8N_PROTOCOL: https
N8N_EDITOR_BASE_URL: https://${N8N_HOST}
N8N_WEBHOOK_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: "1"
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${GENERIC_TIMEZONE}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: "168"
EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
volumes:
- n8n_data:/home/node/.n8n
expose:
- "5678"
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
depends_on:
- n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
postgres_data:
name: n8n_postgres_data
n8n_data:
name: n8n_data
caddy_data:
name: n8n_caddy_data
caddy_config:
name: n8n_caddy_configO task runner externo executa o código separadamente do processo principal do n8n. Isso é mais seguro do que o modo interno e reduz a possibilidade de um erro em um Code node afetar o editor e o processamento de webhooks.
4. Ative o HTTPS
Crie o arquivo Caddyfile:
{$N8N_HOST} {
reverse_proxy n8n:5678
}O Caddy obterá um certificado TLS automaticamente se o DNS já apontar para o VPS e as portas 80 e 443 estiverem acessíveis. A porta interna 5678 não é exposta à internet: externamente, apenas as portas 80 e 443 ficam disponíveis, enquanto o Caddy acessa o n8n pela rede Docker.
As variáveis N8N_WEBHOOK_URL e N8N_PROXY_HOPS são necessárias para que o editor gere os endereços públicos corretos dos webhooks e confie nos cabeçalhos enviados por um reverse proxy.
5. Inicie o n8n
Verifique a configuração final e inicie os contêineres:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyAbra:
https://n8n.example.comCrie a conta do proprietário. Não compartilhe a senha com colegas: para o trabalho em equipe, use contas separadas e conceda apenas o acesso necessário.
Primeiro workflow útil
Um bom teste é processar uma solicitação enviada pelo site:
- Adicione um nó
Webhookcom o métodoPOST. - Com
Edit Fields, mantenha apenas o nome, o e-mail e a origem. - Use um nó
Ifpara rejeitar uma solicitação sem os dados obrigatórios. - Crie uma oportunidade no CRM ou envie uma solicitação por
HTTP Request. - Adicione uma notificação no Telegram.
- Finalize o fluxo com um nó
Respond to Webhook. - Após o teste, ative o workflow e substitua o webhook de teste pela URL de produção.
Esse exemplo verifica de uma só vez o domínio, o HTTPS, as solicitações recebidas, as credenciais e a integração externa. Em seguida, vale a pena adicionar um Error Workflow separado para avisar quando o fluxo principal falhar.
Segurança do n8n após a instalação
Um n8n instalado ainda não é um n8n confiável. Após a inicialização, verifique se:
- o editor só pode ser acessado por HTTPS;
- o arquivo
.envtem permissões600e não é enviado ao Git; - as chaves de API externas têm apenas as permissões mínimas;
- o webhook verifica a assinatura ou o segredo da origem;
- o histórico de execuções é limpo automaticamente;
- os erros de workflows críticos são enviados ao administrador.
Os Community nodes são instalados como pacotes e podem ter acesso aos dados dos workflows e ao servidor. Não adicione nós desconhecidos sem verificá-los. Se não forem necessários, desative-os com N8N_COMMUNITY_PACKAGES_ENABLED=false.
Execute a auditoria integrada:
docker compose exec n8n n8n auditEla ajuda a encontrar webhooks desprotegidos, nós arriscados e problemas com credenciais, mas não substitui uma verificação manual.
Histórico de execuções e dados pessoais
O n8n salva os dados de entrada e saída para depuração. Com eles, e-mails, números de telefone, documentos e respostas de API podem permanecer no banco de dados.
Na configuração acima, as execuções são excluídas após sete dias e a quantidade fica limitada a 10.000. Para processos sensíveis, defina o período conforme a política de retenção de dados e remova campos desnecessários antes do fim do workflow.
Backups e atualizações
Para restaurar o sistema, são necessários um dump do PostgreSQL, o volume n8n_data, os arquivos de configuração e o .env com a N8N_ENCRYPTION_KEY. Antes de copiar, interrompa os processadores mantendo o PostgreSQL em execução. Isso criará uma breve pausa nos workflows:
cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner
docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "backup/n8n-db-$(date +%F).sql.gz"
docker run --rm \
-v n8n_data:/source:ro \
-v "$PWD/backup":/backup \
alpine sh -c \
'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'
tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
.env compose.yaml Caddyfile
docker compose start n8n n8n-runnerO arquivo que contém .env inclui segredos: criptografe-o e guarde-o fora do VPS. Verifique periodicamente a cópia realizando uma restauração de teste.
Antes de atualizar, faça um backup e consulte as notas da versão:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psO task runner e o contêiner principal devem usar a mesma tag de versão.
Quando será necessário escalar
Não comece com Redis e vários workers antes de existir carga real. Uma única instância com PostgreSQL é mais simples de administrar e normalmente atende pequenos processos internos.
O queue mode será necessário quando tarefas longas atrasarem os webhooks, muitos workflows forem iniciados ao mesmo tempo ou o processamento de arquivos consumir regularmente toda a memória. Nesse caso, a instância principal recebe os eventos, o Redis distribui os trabalhos e os workers os executam em paralelo. Todos os componentes devem se conectar ao mesmo PostgreSQL e usar a mesma N8N_ENCRYPTION_KEY.
Qual VPS escolher para o n8n
Para a combinação de n8n, PostgreSQL, Caddy e task runner, é razoável começar com 2 vCPU, 4 GB de RAM e um disco NVMe. Na tropic.host, essa configuração corresponde ao plano Light: 2 vCPU, 4 GB de RAM e 25 GB NVMe. Isso é suficiente para os primeiros workflows em produção sem processamento pesado de arquivos.
Para documentos, grandes volumes de dados e muitos fluxos paralelos com IA, é melhor escolher 8 GB de RAM. Uma rede estável também é importante: webhooks, retornos do OAuth e tarefas agendadas precisam permanecer disponíveis o tempo todo.
Conclusão
O n8n transforma operações repetitivas em fluxos visuais e claros: nós prontos aceleram a implantação, HTTP Request conecta praticamente qualquer API e um Code node permite adicionar sua própria lógica.
A versão self-hosted oferece controle sobre o servidor e o banco de dados, mas exige HTTPS, chaves com permissões limitadas, limpeza do histórico e backups testados. Guarde a N8N_ENCRYPTION_KEY junto com o PostgreSQL: sem ela, as credenciais restauradas não podem ser descriptografadas.
FAQ
É possível usar o n8n gratuitamente?
Sim. A Community Edition pode ser hospedada gratuitamente no seu próprio servidor para processos pessoais e internos. A revenda de uma instância hospedada do n8n como um SaaS separado é limitada pela licença fair-code.
É possível instalar o n8n sem domínio?
Para um teste local, sim. Para webhooks públicos e OAuth, é melhor usar um domínio e HTTPS.
De quanta memória RAM o n8n precisa?
Workflows pessoais simples muitas vezes funcionam com 2 GB de RAM. Para o n8n com PostgreSQL, Caddy e um task runner, 4 GB são mais adequados; arquivos e execuções paralelas podem exigir 8 GB ou mais.
Todos os dados permanecem dentro do VPS?
Apenas os dados que o workflow não envia para fora. O banco de dados e o histórico de execuções ficam no VPS, mas os nós do Telegram, do CRM ou de um modelo externo de IA enviam os dados selecionados ao serviço correspondente.
O que deve fazer parte de um backup do n8n?
Um dump do PostgreSQL, o volume n8n_data, compose.yaml, Caddyfile e o arquivo .env com a N8N_ENCRYPTION_KEY. Guarde a cópia criptografada fora do VPS e verifique-a por meio de uma restauração.
