# Sistema de Backup em Cloud - Occto Engenharia Sistema completo de backup e restore com upload automático para cloud (MinIO/S3). ## 🎯 Funcionalidades - ✅ Criar backups locais (PostgreSQL + MinIO) - ✅ **Upload automático** para cloud (MinIO/S3) - ✅ Download de backups - ✅ Restore local com um clique - ✅ **Script universal** de restore para qualquer servidor ## 📱 Interface Admin Acesse `https://seu-dominio.com/admin/configuracoes` → Aba "Backup" ### Botões disponíveis: - ☁️ **Upload** - Enviar backup para cloud - 🔄 **Restaurar** - Restaurar backup no banco atual - ⬇️ **Baixar** - Download do arquivo `.tar.gz` - 🗑️ **Deletar** - Remover backup local ## 🚀 Restauração Rápida (Curly Magic) ### Opção 1: Via URL do Cloud (Recomendado) ```bash bash <(curl -s https://seu-dominio.com/restore-from-cloud.sh) \ --backup-url "http://seu-minio:9000/backups/backup-2025-11-29.tar.gz" \ --postgres-password "sua_senha_postgres" \ --minio-endpoint "seu-minio" ``` ### Opção 2: Arquivo Local ```bash bash scripts/restore-from-cloud.sh \ --backup-file "backup-2025-11-29.tar.gz" \ --postgres-password "sua_senha_postgres" ``` ### Opção 3: Com Docker Compose ```bash # 1. Coloque o backup.tar.gz no projeto # 2. Execute o script bash scripts/restore-from-cloud.sh \ --backup-file "backup-2025-11-29.tar.gz" \ --postgres-password "sua_senha" \ --postgres-host "postgres" \ --postgres-db "occto_db" ``` ## 📋 Parâmetros do Script | Parâmetro | Padrão | Descrição | |-----------|--------|-----------| | `--backup-url` | - | URL do backup (HTTP, S3, etc) | | `--backup-file` | - | Nome do arquivo (obrigatório) | | `--postgres-password` | `adminpassword` | Senha do PostgreSQL | | `--postgres-db` | `occto_db` | Nome do banco | | `--postgres-host` | `postgres` | Host do PostgreSQL | | `--postgres-user` | `admin` | Usuário do PostgreSQL | | `--minio-endpoint` | `minio` | Host do MinIO | ## 🔧 Integração com MinIO O sistema automaticamente: 1. Cria bucket `backups` se não existir 2. Faz upload do `.tar.gz` para `backups/` 3. Gera URL acessível do arquivo ### Configurar MinIO (Docker) ```yaml # docker-compose.yml minio: image: minio/minio:latest environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: adminpassword ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/minio_data command: server /minio_data --console-address ":9001" ``` ## 🛡️ Segurança - ⚠️ O script remove o banco antigo antes de restaurar - ⚠️ Pede confirmação antes de restaurar - ✅ Valida arquivo antes de extrair - ✅ Limpa arquivos temporários automaticamente ## 📊 Exemplo de Uso Completo ```bash # 1. Ir para o projeto cd /seu/projeto/occto # 2. Criar backup via admin UI (opcional) # Ou fazer manual: ./scripts/create-backup.sh # 3. Upload para cloud (via UI ou manual) curl -X POST http://localhost:3000/api/backup/upload \ -H "Content-Type: application/json" \ -d '{"filename": "backup-2025-11-29.tar.gz"}' # 4. Em outro servidor, restaurar: bash <(curl -s http://localhost:3000/restore-from-cloud.sh) \ --backup-url "http://seu-minio:9000/backups/backup-2025-11-29.tar.gz" \ --postgres-password "nova_senha" # 5. Reiniciar aplicação docker-compose restart ``` ## 🐛 Troubleshooting ### "Arquivo não encontrado" ```bash # Verificar arquivos disponíveis ls -lah .backups/ ``` ### "Erro ao conectar PostgreSQL" ```bash # Testar conexão PGPASSWORD="senha" psql -h postgres -U admin -d occto_db -c "SELECT 1" ``` ### "MinIO connection refused" ```bash # Verificar se MinIO está rodando docker ps | grep minio ``` ### Restaurar manualmente ```bash # Se o script falhar, fazer passo a passo tar -xzf backup-2025-11-29.tar.gz PGPASSWORD="senha" psql -h postgres -U admin -d occto_db < database.sql docker cp minio-data/. seu-container-minio:/data/ docker restart seu-container-minio ``` ## 📝 Estrutura do Backup ``` backup-2025-11-29.tar.gz ├── database.sql # Dump completo do PostgreSQL └── minio-data/ ├── [todos os buckets e arquivos] └── [estrutura original do MinIO] ``` ## 🔄 Automation (Cron) Para fazer backups automáticos a cada dia: ```bash # Adicionar ao crontab 0 2 * * * cd /seu/projeto && ./scripts/create-backup.sh && curl -X POST http://localhost:3000/api/backup/upload -d '{"filename":"backup-$(date +\%Y-\%m-\%d).tar.gz"}' ``` ## 📞 Suporte Para dúvidas ou problemas, verifique: 1. Logs: `docker logs seu-container-next` 2. Espaço em disco: `df -h` 3. Permissões: `ls -la .backups/` --- **Última atualização:** 29 de Novembro de 2025