Files
octto-engenharia/docs/BACKUP_CLOUD.md

180 lines
4.6 KiB
Markdown

# 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