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íciasO 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?
Para que o acesso direto à porta só seja possível a partir do próprio servidor, não da internet. A exposição pública e o HTTPS ficam a cargo de um proxy reverso, coberto na aula seguinte.
Este tutorial faz parte do guia Curso de n8n do zero ao avançado: o guia completo em português. Veja também: Node, trigger e workflow: o vocabulário do n8n em 10 minutos · A estrutura de dados do n8n: por que tudo é um array com json · Item linking no n8n: como ele decide qual item vai pra saída · Execuções passo a passo: como achar onde o fluxo do n8n quebrou · A Canvas UI do n8n 2.0: o que mudou e como se orientar · n8n Cloud ou self-hosted: a decisão que define seu custo e sua liberdade




