Conteúdo

Hospedagem própria do n8n: Docker Compose + PostgreSQL + HTTPS

Depois de testar os fluxos de trabalho no seu computador, você precisa implantá-los em um servidor com endereço fixo para que funcionem 24 horas por dia e serviços externos, como Webhooks e Telegram, consigam se conectar.

O que você precisa

  • Um servidor Linux na nuvem (VPS). Para uso leve, 1–2 núcleos e 2 GB de memória são suficientes; para muitos fluxos de trabalho ou modelos locais de IA, você precisará de mais recursos.
  • Um domínio, com o registro DNS A de um subdomínio (por exemplo, n8n.example.com) apontando para o IP do servidor.
  • Docker e Docker Compose instalados no servidor (consulte Tutorial de Docker: instalação).
  • As portas 80 e 443 liberadas no firewall.

Arquitetura

Internet ──HTTPS──▶ Caddy (certificado automático) ──▶ n8n:5678 ──▶ PostgreSQL
  • Caddy: proxy reverso que obtém e renova automaticamente certificados Let's Encrypt
  • PostgreSQL: banco de dados recomendado para produção (o SQLite padrão é adequado para uso pessoal ou testes)
  • O n8n e o banco de dados não ficam diretamente expostos à internet

A partir do n8n 2.x, MySQL / MariaDB não são mais compatíveis como banco de dados do n8n. Use PostgreSQL ou SQLite.

Arquivos

Crie a pasta /opt/n8n no servidor:

/opt/n8n/
├── compose.yaml
├── .env
└── Caddyfile

.env

DOMAIN=n8n.example.com
POSTGRES_PASSWORD=substitua por uma senha aleatória bem longa
N8N_ENCRYPTION_KEY=substitua por outra sequência aleatória bem longa

Gere uma sequência aleatória:

openssl rand -hex 32

N8N_ENCRYPTION_KEY é usada para criptografar todas as credenciais. Faça também um backup seguro dessa chave; se ela for perdida, nenhuma credencial poderá ser usada.

Caddyfile

{$DOMAIN} {
    reverse_proxy n8n:5678
}

compose.yaml

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

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

  n8n:
    image: n8nio/n8n:2.42.7   # Altere para a versão fixa que você quer usar
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_HOST: ${DOMAIN}
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      N8N_WEBHOOK_URL: https://${DOMAIN}/
      N8N_PROXY_HOPS: 1
      NODE_ENV: production
      GENERIC_TIMEZONE: Asia/Taipei
      TZ: Asia/Taipei
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: 336
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
    restart: unless-stopped

volumes:
  caddy_data:
  pg_data:
  n8n_data:

Explicação das principais variáveis de ambiente

VariávelDescrição
N8N_HOST, N8N_PROTOCOLDomínio e protocolo externos, que afetam, por exemplo, os URLs de retorno do OAuth
N8N_WEBHOOK_URLURL externa dos Webhooks. Sem essa configuração, o nó Webhook mostrará http://localhost:5678/.... Em versões anteriores à 2.30 do n8n, use WEBHOOK_URL
N8N_PROXY_HOPSDefina como 1 quando estiver atrás de um proxy reverso, para que o n8n consiga obter o IP real do usuário
N8N_ENCRYPTION_KEYChave de criptografia das credenciais
GENERIC_TIMEZONEFuso horário usado pelos agendamentos
EXECUTIONS_DATA_PRUNE, EXECUTIONS_DATA_MAX_AGEExclui automaticamente registros de execução mais antigos que o número de horas definido (336 horas = 14 dias), evitando que o banco de dados cresça sem limite

Inicialização

cd /opt/n8n
docker compose up -d
docker compose logs -f n8n

Em alguns minutos, o Caddy obterá o certificado automaticamente. Acesse https://n8n.example.com e crie a conta de proprietário.

Crie a conta imediatamente. Antes que a conta de proprietário seja configurada, qualquer pessoa que acessar esse endereço poderá criar uma conta primeiro.

Recomendações de segurança

  • Use uma tag de imagem com versão fixa, não use latest e leia as notas da versão antes de atualizar.
  • Deixe abertas no servidor somente as portas 22, 80 e 443; permita acesso SSH apenas com chave.
  • Ative a verificação em duas etapas para a conta (nas configurações pessoais).
  • Os nós perigosos desnecessários (por exemplo, os que executam comandos do sistema) já vêm desativados por padrão na versão 2.x; não os habilite sem necessidade.
  • Faça backups regularmente (consulte Backup e atualização).

Uso com modelos locais de IA

Para usar modelos locais do Ollama no n8n, adicione o serviço ollama ao mesmo arquivo compose.yaml; consulte Integração do n8n com Ollama. Modelos de IA precisam de bastante memória e capacidade de processamento, e um VPS pequeno geralmente não dá conta deles.

Muitas execuções: Queue mode

Quando houver muitos fluxos de trabalho ou execuções frequentes, você poderá ativar o queue mode: o processo principal recebe os gatilhos e os distribui para vários workers, que os executam em paralelo por meio de uma fila Redis. Essa é uma implantação avançada; consulte a documentação oficial sobre queue mode.

Atualizado 12 de outubro de 2026