Um docker-compose de produção para o n8n reúne, num único arquivo, todos os serviços necessários: o próprio n8n, um banco de dados PostgreSQL (mais robusto que o SQLite padrão) e, opcionalmente, um proxy reverso para HTTPS. Este é o arquivo comentado, linha por linha, explicando o porquê de cada configuração.

Adicione ao Google Notícias
Neste artigo
  1. O arquivo completo
  2. Explicando cada bloco
  3. Perguntas frequentes

O arquivo completo

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=senha_forte_aqui
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=senha_forte_aqui
      - N8N_ENCRYPTION_KEY=uma_chave_longa_e_aleatoria
      - N8N_HOST=seu-dominio.com
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://seu-dominio.com/
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  postgres_data:
  n8n_data:

Explicando cada bloco

O serviço postgres

Substitui o banco SQLite padrão, que trava sob carga de produção. O volume postgres_data garante que o banco sobreviva a reinícios do contêiner.

DB_TYPE e as variáveis DB_POSTGRESDB_*

Dizem ao n8n para usar o Postgres em vez do SQLite embutido, conectando ao serviço postgres definido acima pelo nome — os contêineres se enxergam pelo nome do serviço dentro da mesma rede do Compose.

N8N_ENCRYPTION_KEY

A chave que criptografa todas as credenciais salvas no banco. Defina antes do primeiro boot — trocá-la depois torna as credenciais já salvas ilegíveis, sem recuperação possível.

Nunca deixe essa chave direto no arquivo se ele for para um repositório Git. Prefira uma variável de ambiente carregada de um cofre de segredos, ou pelo menos um arquivo .env fora do controle de versão.

N8N_HOST, N8N_PROTOCOL e WEBHOOK_URL

Informam ao n8n qual é o endereço público da instância, para que webhooks e links gerados apontem para o domínio certo, não para localhost.

A porta mapeada só em 127.0.0.1

O mapeamento 127.0.0.1:5678:5678 — em vez de 5678:5678 — restringe o acesso direto à porta apenas ao próprio servidor. É o proxy reverso, tratado na próxima aula, que expõe a instância à internet com segurança.

Postgres no lugar do SQLite, chave de criptografia definida desde o início, porta restrita ao próprio servidor — as três diferenças que separam um docker-compose de teste de um de produção.

Perguntas frequentes

Por que usar Postgres em vez do SQLite padrão do n8n?

O SQLite não lida bem com carga de produção e não permite backup a quente sem risco de corrupção. O Postgres aceita backup com o serviço rodando e escala melhor sob uso intenso.

Posso trocar a chave de criptografia depois?

Não sem perder acesso às credenciais já salvas. A chave precisa ser definida antes do primeiro uso e mantida — trocá-la torna os dados criptografados anteriormente ilegíveis.

Por que a porta do n8n fica restrita a 127.0.0.1?