Retenção. Os padrões mantêm catorze dias ou 10 000 execuções, o que vier primeiro, com dados completos de entrada e saída para cada node. Em um NVMe pequeno com um trigger de agendamento movimentado, isso é o que enche o disco. Adicione o seguinte ao bloco de ambiente do n8n e reinicie:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none é o maior ganho isolado em uma instância de alta frequência: para de gravar os payloads das execuções que deram certo, enquanto continua armazenando toda execução que falhou por completo para você poder depurá-la. Mantenha em "all" enquanto ainda está construindo o fluxo de trabalho, depois mude assim que o fluxo de trabalho ficar entediante.
Silêncio. O arquivo Compose já desliga o diagnostics, as notificações de versão e a pesquisa de personalização. A chamada de saída restante é a galeria de templates, que busca em api.n8n.io; defina N8N_TEMPLATES_ENABLED=false se você não quiser nenhuma chamada a terceiros. Se você desativar as notificações de versão, coloque um lembrete mensal no seu calendário para ler as release notes — uma instância auto-hospedada que ninguém atualiza é um resultado pior do que uma que fica checando versões.
O node Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, já presente no arquivo, impede que expressões e nodes Code leiam variáveis de ambiente do processo — o que nesta máquina significa a senha do PostgreSQL e a chave de criptografia. Se você não usa a API REST pública, adicione N8N_PUBLIC_API_DISABLED=true e feche também essa superfície.
Backups — as três partes ou nenhuma. Um backup do banco de dados sozinho não vale nada sem a chave de criptografia, e a chave sozinha não restaura nada. Faça backup do dump do PostgreSQL, do volume de dados do n8n e do .env juntos, e mantenha pelo menos uma cópia fora do servidor:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
O nome do volume é o nome do projeto Compose mais o nome do volume; se o seu diretório não se chama n8n, rode docker volume ls e use o que você ver. Coloque as três linhas em um cron job, envie os arquivos para outro lugar, e teste uma restauração pelo menos uma vez — um backup não testado é uma crença, não um backup.
Atualizações. docker compose pull seguido de docker compose up -d. Tire um snapshot antes: o n8n roda migrações de banco de dados ao iniciar, e migrações não são feitas para ter rollback. Ao atravessar uma versão major — o salto de 1.x para 2.x, por exemplo — leia as release notes antes de fazer o pull, não depois, e considere fixar uma tag de imagem explícita em vez de :latest, para que um reinício não supervisionado nunca te atualize de surpresa.