Backup e Restore¶
Estratégias de backup e recuperação.
O que Fazer Backup¶
| Componente | Crítico | Frequência |
|---|---|---|
| PostgreSQL | Sim | Diário |
| Media files | Sim | Diário |
| TypeSense data | Não* | Semanal |
| Redis | Não | Não |
| .env | Sim | Sob demanda |
*TypeSense pode ser reindexado a partir do PostgreSQL.
PostgreSQL¶
Backup Manual¶
# Dump completo
pg_dump -U hymsplat hymsplat > backup_$(date +%Y%m%d).sql
# Dump comprimido
pg_dump -U hymsplat hymsplat | gzip > backup_$(date +%Y%m%d).sql.gz
# Dump custom format (mais rápido para restore)
pg_dump -Fc -U hymsplat hymsplat > backup_$(date +%Y%m%d).dump
Restore¶
# SQL plain
psql -U hymsplat hymsplat < backup.sql
# Gzip
gunzip -c backup.sql.gz | psql -U hymsplat hymsplat
# Custom format
pg_restore -d hymsplat backup.dump
Backup Automático¶
#!/bin/bash
# /home/hymsplat/scripts/backup.sh
BACKUP_DIR="/home/hymsplat/backups"
DATE=$(date +%Y%m%d_%H%M%S)
# Database
pg_dump -Fc -U hymsplat hymsplat > $BACKUP_DIR/db_$DATE.dump
# Media
tar -czf $BACKUP_DIR/media_$DATE.tar.gz /home/hymsplat/hyms-plat/media/
# Limpar backups antigos (manter últimos 7 dias)
find $BACKUP_DIR -type f -mtime +7 -delete
# Upload para S3 (opcional)
aws s3 cp $BACKUP_DIR/db_$DATE.dump s3://hymsplat-backups/
aws s3 cp $BACKUP_DIR/media_$DATE.tar.gz s3://hymsplat-backups/
Media Files¶
Backup¶
# Tar completo
tar -czf media_backup.tar.gz /home/hymsplat/hyms-plat/media/
# Rsync para outro servidor
rsync -avz /home/hymsplat/hyms-plat/media/ backup-server:/backups/media/
Restore¶
# Extrair
tar -xzf media_backup.tar.gz -C /home/hymsplat/hyms-plat/
# Permissões
chown -R hymsplat:hymsplat /home/hymsplat/hyms-plat/media/
TypeSense¶
Backup¶
# Snapshot via API
curl -X POST "http://localhost:8108/operations/snapshot?snapshot_path=/backups/typesense" \
-H "X-TYPESENSE-API-KEY: xyz"
Restore¶
Geralmente é mais fácil reindexar:
Configurações¶
.env¶
# Backup
cp .env .env.backup_$(date +%Y%m%d)
# Não commitar .env!
# Guarde em local seguro (1Password, Vault, etc)
Disaster Recovery¶
Cenário: Perda Total¶
-
Provisionar novo servidor
-
Restaurar configurações
-
Restaurar database
-
Restaurar media
-
Setup aplicação
-
Iniciar serviços
Tempo de Recuperação¶
| Etapa | Tempo Estimado |
|---|---|
| Provisionar servidor | 10-30 min |
| Restaurar DB | 5-15 min |
| Restaurar media | 5-10 min |
| Setup aplicação | 10-15 min |
| Verificação | 5-10 min |
| Total | 35-80 min |
Testes de Backup¶
Mensal¶
- Restaurar backup em ambiente de teste
- Verificar integridade dos dados
- Testar funcionalidades principais
Script de Verificação¶
#!/bin/bash
# verify_backup.sh
# Restore para DB de teste
createdb hymsplat_test
pg_restore -d hymsplat_test /backup/db_latest.dump
# Verificar contagens
psql -d hymsplat_test -c "SELECT COUNT(*) FROM hymns_hymnbook;"
psql -d hymsplat_test -c "SELECT COUNT(*) FROM hymns_hymn;"
psql -d hymsplat_test -c "SELECT COUNT(*) FROM users_user;"
# Limpar
dropdb hymsplat_test
echo "Backup verification complete"
Cloud Storage¶
S3¶
# Install AWS CLI
pip install awscli
aws configure
# Upload
aws s3 cp backup.dump s3://hymsplat-backups/db/
aws s3 cp media.tar.gz s3://hymsplat-backups/media/
# Download
aws s3 cp s3://hymsplat-backups/db/backup.dump ./