feat: add cloud backup upload and universal restore script
This commit is contained in:
179
docs/BACKUP_CLOUD.md
Normal file
179
docs/BACKUP_CLOUD.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user