Pular para o conteúdo principal

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

ComponenteTipoFrequência Recomendada
PostgreSQLBanco de dadosDiário
MinIOArquivos/DocumentosDiário
Variáveis de ambienteConfiguraçãoA cada alteração
Código fonteGitContí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

  1. Provisionar nova infraestrutura

    • Servidor com Docker instalado
    • Clonar repositório do código
  2. Restaurar configurações

    cp docker-compose.yml.backup docker-compose.yml
    # Editar senhas e configurações
  3. Iniciar containers base

    docker-compose up -d db redis minio
  4. Restaurar banco de dados

    # Aguardar PostgreSQL iniciar
    sleep 30
    gunzip -c backup_latest.sql.gz | docker-compose exec -T db psql -U postgres empreendedorismo
  5. Restaurar arquivos MinIO

    docker-compose exec backend python manage.py setup_minio
    # Restaurar arquivos do backup
  6. Iniciar aplicação

    docker-compose up -d
  7. Verificar funcionamento

    curl http://localhost:8000/api/health/
    curl http://localhost:9501/

Testes de Recuperação

É recomendado testar a recuperação periodicamente:

  1. Mensal: Restaurar backup em ambiente de teste
  2. Trimestral: Simulação de desastre completo
  3. Documentar: Registrar tempo de recuperação (RTO) e ponto de recuperação (RPO)

Retenção de Backups

TipoRetenção
Diário7 dias
Semanal4 semanas
Mensal12 meses
Anual3 anos