Backup e Recuperação
Esta seção descreve os procedimentos de backup e recuperação do sistema.
Estratégia de Backup
Componentes que precisam de backup
| Componente | Tipo | Frequência Recomendada |
|---|---|---|
| PostgreSQL | Banco de dados | Diário |
| MinIO | Arquivos/Documentos | Diário |
| Variáveis de ambiente | Configuração | A cada alteração |
| Código fonte | Git | Contínuo (push) |
Backup do Banco de Dados
Backup Manual
# Criar backup completo
docker-compose exec db pg_dump -U postgres empreendedorismo > backup_$(date +%Y%m%d_%H%M%S).sql
# Backup comprimido
docker-compose exec db pg_dump -U postgres empreendedorismo | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
Backup Automatizado (Cron)
Criar script /opt/scripts/backup_db.sh:
#!/bin/bash
BACKUP_DIR="/backups/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/empreendedorismo_$DATE.sql.gz"
# Criar diretório se não existir
mkdir -p $BACKUP_DIR
# Executar backup
docker-compose -f /path/to/docker-compose.yml exec -T db pg_dump -U postgres empreendedorismo | gzip > $BACKUP_FILE
# Remover backups com mais de 30 dias
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
# Log
echo "$(date): Backup criado - $BACKUP_FILE" >> /var/log/backup.log
Adicionar ao crontab:
# Backup diário às 2h da manhã
0 2 * * * /opt/scripts/backup_db.sh
Backup do MinIO
Backup Manual
# Copiar arquivos do bucket
docker-compose exec minio mc cp --recursive local/empreendedorismo /backup/
# Ou exportar via API
docker-compose exec backend python manage.py dumpdata business_plans.BusinessPlanDocument --indent 2 > documents_backup.json
Sincronização com S3/Armazenamento Externo
# Configurar MinIO Client
docker-compose exec minio mc alias set backup https://s3.amazonaws.com ACCESS_KEY SECRET_KEY
# Sincronizar bucket
docker-compose exec minio mc mirror local/empreendedorismo backup/empreendedorismo-backup
Backup de Configurações
Variáveis de Ambiente
# Salvar docker-compose.yml (sem senhas reais)
cp docker-compose.yml docker-compose.yml.backup
# Exportar variáveis (apenas nomes, sem valores sensíveis)
docker-compose config --services
Nginx/Configs do Sistema
# Backup de configurações
tar -czvf configs_backup.tar.gz \
docker-compose.yml \
frontend/.env \
docs/docusaurus.config.ts
Recuperação
Restaurar Banco de Dados
# Parar aplicações que usam o banco
docker-compose stop backend celery-worker celery-worker-emails
# Dropar banco existente (CUIDADO!)
docker-compose exec db psql -U postgres -c "DROP DATABASE IF EXISTS empreendedorismo;"
docker-compose exec db psql -U postgres -c "CREATE DATABASE empreendedorismo;"
# Restaurar backup
cat backup_20240101_120000.sql | docker-compose exec -T db psql -U postgres empreendedorismo
# Ou se comprimido
gunzip -c backup_20240101_120000.sql.gz | docker-compose exec -T db psql -U postgres empreendedorismo
# Reiniciar aplicações
docker-compose start backend celery-worker celery-worker-emails
Restaurar MinIO
# Copiar arquivos de volta
docker-compose exec minio mc cp --recursive /backup/ local/empreendedorismo/
Recuperação de Desastre Completa
-
Provisionar nova infraestrutura
- Servidor com Docker instalado
- Clonar repositório do código
-
Restaurar configurações
cp docker-compose.yml.backup docker-compose.yml
# Editar senhas e configurações -
Iniciar containers base
docker-compose up -d db redis minio -
Restaurar banco de dados
# Aguardar PostgreSQL iniciar
sleep 30
gunzip -c backup_latest.sql.gz | docker-compose exec -T db psql -U postgres empreendedorismo -
Restaurar arquivos MinIO
docker-compose exec backend python manage.py setup_minio
# Restaurar arquivos do backup -
Iniciar aplicação
docker-compose up -d -
Verificar funcionamento
curl http://localhost:8000/api/health/
curl http://localhost:9501/
Testes de Recuperação
É recomendado testar a recuperação periodicamente:
- Mensal: Restaurar backup em ambiente de teste
- Trimestral: Simulação de desastre completo
- Documentar: Registrar tempo de recuperação (RTO) e ponto de recuperação (RPO)
Retenção de Backups
| Tipo | Retenção |
|---|---|
| Diário | 7 dias |
| Semanal | 4 semanas |
| Mensal | 12 meses |
| Anual | 3 anos |