Backup do Banco de Dados
Serviço de Backup
O backup automático do banco de dados é realizado pelo serviço toptic_pgbackups, que utiliza a imagem prodrigestivill/postgres-backup-local:14. Esse serviço é configurado no arquivo toptic-deploy.yml e realiza backups compactados (.sql.gz) do banco de dados Accessus de forma periódica.
Configuração
As configurações ficam no arquivo .env:
| Variável | Descrição | Exemplo |
|---|---|---|
| DB_BACKUP | Diretório onde ficam os arquivos de backup | /toptic/db-backup |
| DB_BACKUP_SCHEDULE | Frequência com que o backup é realizado | @midnight |
| DB_BACKUP_KEEP_DAYS | Quantidade de dias que os backups diários serão mantidos | 7 |
| DB_BACKUP_KEEP_WEEKS | Quantidade de semanas que os backups semanais serão mantidos | 4 |
| DB_BACKUP_KEEP_MONTHS | Quantidade de meses que os backups mensais serão mantidos | 6 |
Formato do agendamento (DB_BACKUP_SCHEDULE)
| Entrada | Descrição | Equivalente a |
|---|---|---|
| @yearly (ou @annually) | Executa uma vez por ano, à meia-noite, 1 de Jan. | 0 0 0 1 1 * |
| @monthly | Executa uma vez por mês, à meia-noite, primeiro dia do mês | 0 0 0 1 * * |
| @weekly | Executa uma vez por semana, à meia-noite entre Sáb/Dom | 0 0 0 * * 0 |
| @daily (ou @midnight) | Executa uma vez por dia, à meia-noite | 0 0 0 * * * |
| @hourly | Executa uma vez por hora, no início da hora | 0 0 * * * * |
Dica
Pode também ser utilizado o formato cron diretamente. Ex: DB_BACKUP_SCHEDULE=0 0 * * * *
Estrutura dos backups
Os arquivos de backup são organizados automaticamente dentro do diretório configurado em DB_BACKUP:
/toptic/db-backup/
├── last/ # Último backup realizado
├── daily/ # Backups diários
├── weekly/ # Backups semanais
└── monthly/ # Backups mensais
Como realizar o restore
Atenção
Substitua <HOST_IP> pelo endereço IP do servidor onde o banco de dados está rodando e <DB_PORT> pela porta configurada (padrão: 5432).
docker run --rm --tty --interactive \
-v /toptic/db-backup/last/accessus-latest.sql.gz:/tmp/backupfile.sql.gz \
postgres:14.9 /bin/sh -c \
"zcat /tmp/backupfile.sql.gz | psql --host=<HOST_IP> --port=<DB_PORT> --username=postgres --dbname=accessus -W"
Também é possível restaurar a partir de um backup específico (diário, semanal ou mensal):
docker run --rm --tty --interactive \
-v /toptic/db-backup/daily/accessus-20250101.sql.gz:/tmp/backupfile.sql.gz \
postgres:14.9 /bin/sh -c \
"zcat /tmp/backupfile.sql.gz | psql --host=<HOST_IP> --port=<DB_PORT> --username=postgres --dbname=accessus -W"