infra/backup.sh salva tudo que importa numa pasta versionada por data, com retenção dos últimos 4 backups. Roda via cron uma vez por semana.
O que entra no backup
| Arquivo | O que tem |
|---|---|
postgres-all.sql.gz | pg_dumpall — todas as DBs + roles + senhas hashadas |
n8n-data.tar.gz | infra/n8n/data/ — workflows, credenciais cifradas, encryption key |
npm-data.tar.gz | infra/npm/data/ + infra/npm/letsencrypt/ — proxy hosts, certificados TLS |
envs.tar.gz | .env raiz, .env de cada serviço, postgres/secrets/ |
- Redis (cache/queue, descartável — n8n persiste em Postgres)
- Código de projetos em
/opt/server/projetos/— cada um tem repo git próprio
Setup inicial
Criar diretório de destino
Default é Pra usar outro destino, exporte
/opt/backups. Precisa de sudo só uma vez:BACKUP_DIR antes de rodar o script (ou no cron).Configuração
Variáveis de ambiente (todas opcionais):| Var | Default | O que faz |
|---|---|---|
BACKUP_DIR | /opt/backups | Onde salvar |
RETENTION | 4 | Quantos backups manter (resto é deletado) |
Restaurar
Postgres (uma DB específica)
O dump épg_dumpall, que recria roles + DBs do zero. Pra restaurar uma DB específica sem mexer no resto:
Postgres (cluster inteiro, disaster recovery)
Em servidor novo, depois dobootstrap.sh + postgres up -d:
n8n
Parar o n8n, restaurar odata/ por cima, subir de novo:
N8N_ENCRYPTION_KEY precisa ser a mesma do backup (vem em envs.tar.gz), senão as credenciais cifradas ficam ilegíveis.
NPM
Mesmo padrão:Envs
.env atuais — útil quando recria servidor do zero, antes do primeiro docker compose up.
Verificar saúde
Olhar a última execução:Limitações conhecidas
- Backup local apenas. Se o disco do VPS morrer, perdeu junto. Pra cobrir isso, sincronizar
/opt/backups/pra outro lugar (rsync remoto, S3, snapshot do provedor). - NPM SQLite copiado online. O backup roda com NPM ligado. SQLite em modo WAL geralmente sobrevive, mas em teoria pode pegar estado parcial. Se preocupar, parar o NPM antes (
docker compose stop npm→ backup →start). - Sem alerta de falha. Cron silencia erros por padrão. Pra ser avisado, redirecionar stderr pra um canal (email, ntfy, etc.).