4.6 KiB
4.6 KiB
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 <(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 scripts/restore-from-cloud.sh \
--backup-file "backup-2025-11-29.tar.gz" \
--postgres-password "sua_senha_postgres"
Opção 3: Com Docker Compose
# 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:
- Cria bucket
backupsse não existir - Faz upload do
.tar.gzparabackups/ - Gera URL acessível do arquivo
Configurar MinIO (Docker)
# 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
# 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"
# Verificar arquivos disponíveis
ls -lah .backups/
"Erro ao conectar PostgreSQL"
# Testar conexão
PGPASSWORD="senha" psql -h postgres -U admin -d occto_db -c "SELECT 1"
"MinIO connection refused"
# Verificar se MinIO está rodando
docker ps | grep minio
Restaurar manualmente
# 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:
# 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:
- Logs:
docker logs seu-container-next - Espaço em disco:
df -h - Permissões:
ls -la .backups/
Última atualização: 29 de Novembro de 2025