Como instalar n8n em VPS Brasil com Docker, PostgreSQL e HTTPS

16 min de leitura Infraestrutura
Como instalar n8n em VPS Brasil com Docker, PostgreSQL e HTTPS

Introdução ao n8n em Ambiente Produtivo

O n8n é uma poderosa ferramenta de automação de fluxos de trabalho baseada em código aberto, que se destaca no mercado por sua flexibilidade e capacidade de integrar diversas APIs e serviços sem a necessidade de codificação extensiva. Diferente de outras soluções "headless", o n8n oferece uma interface visual intuitiva, permitindo que desenvolvedores e analistas criem fluxos complexos arrastando e soltando nós (nodes). Neste tutorial técnico, demonstraremos como realizar a instalação robusta do n8n em uma VPS no Brasil, garantindo baixa latência para usuários locais.

A arquitetura proposta utiliza Docker para garantir isolamento de dependências e facilidade de manutenção, enquanto o PostgreSQL atua como o banco de dados relacional confiável para armazenar credenciais, históricos de execução e dados de workflows. Além disso, a configuração de HTTPS via Let's Encrypt é fundamental para proteger a integridade dos dados transmitidos entre o navegador do usuário e o servidor, assegurando conformidade com boas práticas de segurança cibernética.

Ao final deste guia completo, você terá um ambiente de automação profissional, escalável e seguro. A escolha de uma VPS no Brasil reduz significativamente o tempo de resposta (latência) para aplicações dependentes de APIs locais ou usuários finais no país, otimizando a performance dos seus fluxos automatizados. Vamos iniciar a configuração técnica.

Neste tutorial:
  • Pré-requisitos de infraestrutura
  • Instalação e configuração do Docker
  • Configuração avançada do PostgreSQL
  • Deploy do n8n com Docker Compose
  • Habilitação de HTTPS com Certbot
  • Verificação de integridade e Troubleshooting
  • Perguntas frequentes (FAQ)

Pré-requisitos de Infraestrutura

Antes de executar qualquer comando, é essencial validar a infraestrutura disponível. A estabilidade do n8n depende diretamente da capacidade computacional e da configuração de rede da sua VPS.

  1. VPS no Brasil com Acesso Root: Utilize uma Virtual Private Server (VPS) localizada em data centers brasileiros para minimizar a latência. Certifique-se de ter acesso SSH com privilégios de root ou sudo.
  2. Sistema Operacional Compatível: O tutorial foi otimizado para distribuições Debian-based, como Ubuntu (20.04 LTS ou superior) e Debian 11/12. Essas distribuições possuem a melhor compatibilidade com os repositórios do Docker e do PostgreSQL.
  3. Recursos Mínimos Recomendados: Para um ambiente de produção estável, recomendamos pelo menos 2 vCPUs e 4GB de RAM. O n8n pode consumir memória significativamente durante a execução de fluxos complexos ou com grandes volumes de dados.
  4. Docker e Docker Compose: Embora o Docker Engine seja necessário, o Docker Compose (geralmente incluído na instalação moderna do Docker ou como plugin) é vital para gerenciar os serviços múltiplos (n8n + banco de dados) de forma declarativa.
  5. PostgreSQL Instalado: Você pode hospedar o PostgreSQL na mesma VPS ou em um servidor dedicado externo. Neste guia, focaremos na instalação local para simplicidade, mas a configuração de rede deve permitir conexões seguras.
  6. Domínio DNS Configurado: Um nome de domínio (ex: seun8n.dominio.com) deve estar apontando para o IP público da sua VPS. Isso é obrigatório para a emissão de certificados SSL válidos pelo Let's Encrypt.
  7. Firewall Aberto: As portas 80 (HTTP) e 443 (HTTPS) devem estar abertas para permitir a validação do domínio e o tráfego seguro. A porta 5678 (n8n padrão) pode ser restrita se você usar apenas o proxy reverso via HTTPS.
Aviso de Segurança: Nunca exponha a porta padrão do n8n (5678) diretamente à internet sem uma camada de proteção adicional, como um firewall rigoroso ou um proxy reverso com autenticação. Utilize sempre HTTPS em produção.

Passo 1: Instalação e Otimização do Docker

O Docker encapsula o n8n e suas dependências em containers isolados, evitando conflitos de bibliotecas com o sistema operacional host. A instalação via repositório oficial garante atualizações seguras.

Primeiro, atualize o índice de pacotes do sistema para garantir que todas as ferramentas estejam na versão mais recente:

sudo apt update && sudo apt upgrade -y

Instale os pré-requisitos necessários para que o apt possa confiar em repositórios via HTTPS e gerencie chaves GPG:

sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

Adicione a chave GPG oficial do Docker ao seu sistema. Esta etapa é crucial para garantir que os pacotes baixados são autênticos e não foram alterados:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Agora, adicione o repositório oficial do Docker. Note que utilizamos a variável $(lsb_release -cs) para detectar automaticamente a versão da sua distribuição Ubuntu:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

Atualize o cache novamente para incluir os novos pacotes do Docker:

sudo apt update

Instale o Docker Engine (CE):

sudo apt install docker-ce docker-ce-cli containerd.io -y

Verifique se o serviço está ativo e configurado para iniciar junto com o sistema:

sudo systemctl enable --now docker

Para evitar a necessidade de usar sudo em todos os comandos do Docker, adicione seu usuário atual ao grupo docker. Lembre-se de fazer logout e login novamente (ou reiniciar a sessão SSH) para que essa permissão tenha efeito:

sudo usermod -aG docker $USER

Com o Docker instalado, estamos prontos para configurar o banco de dados.

Passo 2: Configuração Avançada do PostgreSQL

O n8n armazena todos os workflows, credenciais e logs de execução no banco de dados. O PostgreSQL é a escolha padrão recomendada pela equipe do n8n devido à sua estabilidade e suporte completo às necessidades da aplicação.

Instale o servidor PostgreSQL:

sudo apt install postgresql postgresql-contrib -y

Inicie o serviço e garanta que ele esteja habilitado:

sudo systemctl enable --now postgresql

Acesse o console do PostgreSQL como o usuário administrador postgres:

sudo -u postgres psql

Dentro do prompt SQL, crie um banco de dados dedicado ao n8n. Isso isola os dados da aplicação e facilita backups futuros:

CREATE DATABASE n8n;

Crie um usuário específico para a conexão do n8n. Substitua 'sua_senha_forte_aqui' por uma senha complexa gerada por um gerenciador de senhas:

CREATE USER n8n_user WITH PASSWORD 'sua_senha_forte_aqui';

Conceda todas as permissões ao usuário no banco de dados criado:

GRANT ALL PRIVILEGES ON DATABASE n8n TO n8n_user;

Saia do console SQL digitando:

\q

Agora, é necessário configurar o PostgreSQL para aceitar conexões externas ou locais via TCP, dependendo de como o Docker roteará as requisições. Edite o arquivo de configuração principal:

sudo nano /etc/postgresql/15/main/postgresql.conf

Localize a linha #listen_addresses = 'localhost' e descomente-a, alterando para aceitar conexões de qualquer interface (ou restrinja ao IP do container Docker se souber o gateway):

listen_addresses = '*'

Em seguida, edite o arquivo de controle de acesso (pg_hba.conf) para permitir que o usuário n8n_user se conecte:

sudo nano /etc/postgresql/15/main/pg_hba.conf

Adicione a seguinte linha ao final do arquivo para permitir autenticação por senha (md5/scram-sha-256) de redes locais. Se o banco estiver na mesma máquina, 127.0.0.1/32 é suficiente:

host    n8n             n8n_user        127.0.0.1/32            scram-sha-256

Reinicie o serviço do PostgreSQL para aplicar as mudanças:

sudo systemctl restart postgresql

Passo 3: Deploy do n8n com Docker Compose

Agora, criaremos a estrutura de diretórios e o arquivo de orquestração que define como o n8n e seus serviços auxiliares devem rodar.

Crie um diretório dedicado para manter a organização dos arquivos de configuração:

mkdir -p ~/n8n/config
cd ~/n8n

Crie o arquivo docker-compose.yml. Este arquivo define dois serviços: o próprio n8n e um container auxiliar para o banco de dados (opcional, mas recomendado para portabilidade, ou podemos apontar para o PostgreSQL local). Para este tutorial, utilizaremos uma abordagem híbrida onde o n8n se conecta ao PostgreSQL instalado na máquina host, mantendo os dados persistentes no sistema de arquivos do host para maior controle.

Crie o arquivo docker-compose.yml com o seguinte conteúdo:

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      # Configurações do Banco de Dados (Conectando ao PG local)
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=127.0.0.1
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n_user
      - DB_POSTGRESDB_PASSWORD=sua_senha_forte_aqui
      
      # Configurações de Segurança e Acesso
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=senha_admin_segura
      
      # Variáveis para HTTPS (serão ajustadas no próximo passo)
      - N8N_PROTOCOL=https
      - N8N_HOST=seu_dominio.com
      - N8N_PORT=5678
      
    volumes:
      # Persistência dos dados do n8n (workflows, credenciais)
      - ./n8n_data:/home/node/.n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:15-alpine
    restart: always
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n_user
      - POSTGRES_PASSWORD=sua_senha_forte_aqui
    volumes:
      - ./pg_data:/var/lib/postgresql/data

Nota Importante: No exemplo acima, incluímos o serviço postgres dentro do Docker para facilitar a portabilidade. Se você preferir usar o PostgreSQL instalado localmente (como configurado no passo anterior), remova o bloco postgres e altere DB_POSTGRESDB_HOST para 127.0.0.1. A escolha depende da sua estratégia de backup e manutenção.

Inicie os containers em modo detached (segundo plano):

docker-compose up -d

Aguarde alguns segundos para que o banco de dados inicialize e o n8n realize suas migrações de schema. Você pode verificar o status com:

docker-compose ps

Passo 4: Habilitação de HTTPS com Certbot

A segurança é primordial. O uso de HTTP simples expõe suas credenciais e dados de automação a sniffing na rede. Utilizaremos o Let's Encrypt para obter certificados TLS gratuitos e renováveis.

Instale o Certbot e o plugin Nginx (se estiver usando Nginx como proxy) ou use o modo standalone para geração inicial:

sudo apt install certbot -y

Pare os containers do n8n temporariamente, pois o Certbot precisará usar a porta 80 para validar a posse do domínio:

docker-compose down

Gere o certificado SSL. Substitua seu_dominio.com pelo seu domínio real. O comando --standalone inicia um servidor web temporário para validação:

sudo certbot certonly --standalone -d seu_dominio.com -d www.seu_dominio.com

Aceite os termos de serviço e forneça um email válido para alertas de expiração. Ao concluir, os certificados serão salvos em /etc/letsencrypt/live/seu_dominio.com/.

Agora, atualize o arquivo docker-compose.yml para montar os certificados SSL no container do n8n e ativar a configuração interna de SSL do n8n:

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=127.0.0.1
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n_user
      - DB_POSTGRESDB_PASSWORD=sua_senha_forte_aqui
      
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=senha_admin_segura
      
      # Configurações HTTPS habilitadas
      - N8N_PROTOCOL=https
      - N8N_HOST=seu_dominio.com
      - N8N_PORT=443
      - N8N_SSL_ENABLED=true
      - N8N_SSL_KEY=/etc/letsencrypt/live/seu_dominio.com/privkey.pem
      - N8N_SSL_CERT=/etc/letsencrypt/live/seu_dominio.com/fullchain.pem
      
    volumes:
      - ./n8n_data:/home/node/.n8n
      # Montagem dos certificados SSL
      - /etc/letsencrypt/live/seu_dominio.com:/etc/letsencrypt/live/seu_dominio.com:ro
    depends_on:
      - postgres

Dica de Segurança: A flag :ro no volume dos certificados garante que o container do n8n não possa modificar os arquivos de certificado, apenas lê-los.

Inicie os containers novamente:

docker-compose up -d

O n8n agora deve responder via HTTPS na porta 443 (mapeada internamente) ou na porta 5678 com redirecionamento, dependendo da configuração exata do n8n. Geralmente, o n8n expõe a porta configurada em N8N_PORT. Se você configurou N8N_PORT=443, o acesso será https://seu_dominio.com:5678 (devido ao mapeamento de portas) ou você deve ajustar o mapeamento para "443:443".

Passo 5: Verificação e Testes de Integridade

Após a configuração completa, execute os seguintes testes para garantir que o ambiente está produtivo.

  1. Acesso Web: Abra seu navegador e acesse https://seu_dominio.com. Você deve ver o ícone de cadeado seguro na barra de endereço. A interface do n8n carregará solicitando login.
  2. Autenticação: Utilize as credenciais definidas em N8N_BASIC_AUTH_USER e N8N_BASIC_AUTH_PASSWORD. Se a autenticação básica não estiver ativada, crie uma conta admin na primeira tela de onboarding.
  3. Criação de Workflow: Crie um workflow simples. Adicione um nó "Cron" (para disparo agendado) conectado a um nó "HTTP Request" ou "Set". Execute o workflow manualmente clicando em "Execute Node".
  4. Verificação do Banco de Dados: Confirme que os dados foram persistidos. No terminal da VPS, execute:
docker-compose logs -f n8n

Você deve ver logs indicando inicialização bem-sucedida e conexões estabelecidas com o banco de dados. Não devem haver erros de ECONNREFUSED ou falhas de autenticação no PostgreSQL.

Troubleshooting Comum

Se encontrar problemas durante a instalação, verifique as seguintes causas frequentes:

  • Falha na Conexão com o Banco de Dados: Verifique se o serviço PostgreSQL está rodando (systemctl status postgresql) e se a senha em docker-compose.yml corresponde exatamente à definida no CREATE USER. O host 127.0.0.1 pode não funcionar dentro de containers Docker dependendo da configuração de rede; use host.docker.internal se estiver em macOS/Windows, ou o nome do serviço postgres se ambos estiverem no compose.
  • Erros de Permissão no Certbot: Se o n8n não conseguir ler os certificados, verifique as permissões dos arquivos em /etc/letsencrypt/live/. O usuário root do container pode precisar de acesso de leitura. Use chmod 644 nos arquivos pem.
  • Porta já em uso: Se a porta 80 ou 443 estiver bloqueada, verifique se há outro serviço (como Apache ou Nginx) rodando. Pare esses serviços antes de executar o Certbot standalone.

Perguntas Frequentes (FAQ)

O n8n é realmente gratuito para uso comercial?

Sim, o n8n é código aberto e gratuito para uso interno em empresas. No entanto, se você planeja redistribuir o n8n como um serviço SaaS para terceiros, é necessário adquirir uma licença comercial. Para automações internas ou uso pessoal, a versão Community Edition é suficiente.

Como faço backup dos dados do n8n?

A estratégia de backup deve cobrir duas partes: o banco de dados PostgreSQL e o diretório de dados do n8n (./n8n_data). Para o banco, utilize pg_dump. Para os arquivos, faça cópias regulares do volume mapeado. Automatize isso com scripts Cron para garantir a recuperação em caso de falha.

Posso usar MySQL ou SQLite no lugar do PostgreSQL?

O n8n suporta SQLite (para ambientes de teste leves) e MySQL/MariaDB. No entanto, o PostgreSQL é altamente recomendado para produção devido ao seu desempenho superior em operações concurrentes e maior estabilidade com grandes volumes de dados. A configuração do Docker Compose mudaria apenas as variáveis de ambiente DB_TYPE e os parâmetros de conexão.

O que acontece se o certificado SSL expirar?

O n8n não renova certificados automaticamente. Você deve configurar um agendamento no sistema operacional (Cron) para rodar o certbot renew periodicamente. Após a renovação, é necessário reiniciar o container do n8n para que ele carregue os novos arquivos de certificado.

Conclusão

Instalar o n8n em uma VPS no Brasil com Docker, PostgreSQL e HTTPS proporciona uma base sólida para automações críticas. Esta configuração garante que seus fluxos de trabalho sejam executados com baixa latência, dados seguros em um banco relacional robusto e comunicações criptografadas. Ao seguir este tutorial, você migrou de uma instalação simples para uma arquitetura de produção preparada para escalar.

Lembre-se de monitorar o consumo de recursos da sua VPS e ajustar as configurações de memória do Docker conforme a complexidade dos seus workflows cresce. A segurança é um processo contínuo; mantenha seu sistema operacional atualizado e seus certificados SSL renovados.

Para mais detalhes sobre otimização de performance, gestão de clusters ou integrações específicas, consulte a documentação oficial do n8n. Se você busca infraestrutura de alta disponibilidade e suporte especializado para suas automações, a Toda Solução oferece soluções de cloud e VPS otimizadas para cargas de trabalho intensivas como a sua.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000