Initial commit

This commit is contained in:
Rafael Dias Martins
2026-08-31 14:10:20 -03:00
commit 8fcb5aac66
454 changed files with 60207 additions and 0 deletions
+157
View File
@@ -0,0 +1,157 @@
# MinIO + Backup Setup
Setup completo do MinIO com scripts de backup para VPS e download local.
## 📁 Estrutura
```
docker/minio/
├── docker-compose.yml # Serviço MinIO
├── backup-minio.sh # Script de backup (roda no servidor)
├── pull-backup.sh # Script para baixar backup (roda no seu PC)
└── .env.example # Variáveis de ambiente
```
## 🔒 Segurança
**Bucket é PRIVADO** por padrão. Arquivos são servidos via proxy da aplicação (`/api/files/...`), o que permite:
- Controle de autenticação
- Verificação de permissões
- Logs de acesso
## 🚀 Setup Inicial
### 1. Criar arquivo .env
```bash
cd docker/minio
cat > .env << 'EOF'
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=sua-senha-forte-aqui
MINIO_BUCKET=course-plat
EOF
```
### 2. Iniciar MinIO
```bash
docker compose up -d
```
### 3. Acessar
- **Console (UI)**: http://seu-servidor:9001
- **API**: http://seu-servidor:9000
## 💾 Backup Automático
### No Servidor (VPS)
1. Copiar o script para o servidor:
```bash
chmod +x backup-minio.sh
sudo cp backup-minio.sh /usr/local/bin/
```
2. Testar manualmente:
```bash
/usr/local/bin/backup-minio.sh
```
3. Adicionar ao crontab (backup todo dia às 2h da manhã):
```bash
crontab -e
# Adicionar linha:
0 2 * * * /usr/local/bin/backup-minio.sh >> /var/log/minio-backup.log 2>&1
```
### No Seu PC
1. Editar `pull-backup.sh` com seus dados:
```bash
SERVER_USER="seu-usuario"
SERVER_HOST="seu-servidor.com"
```
2. Dar permissão e testar:
```bash
chmod +x pull-backup.sh
./pull-backup.sh
```
3. Agendar no crontab do SEU PC (todo dia às 3h):
```bash
crontab -e
# Adicionar linha:
0 3 * * * /caminho/para/pull-backup.sh
```
## 🔄 Como Funciona
```
┌─────────────────┐ 02:00 ┌──────────────────┐
│ Servidor VPS │ ────────────────▶│ Backup Local │
│ (MinIO) │ backup-minio.sh│ (/var/backups/) │
└─────────────────┘ └──────────────────┘
│ 03:00
│ pull-backup.sh
┌──────────────────┐
│ Seu PC │
│ (Backup final) │
└──────────────────┘
```
## 📦 Restaurar Backup
### No servidor:
```bash
# Parar MinIO
docker compose down
# Restaurar volume
docker run --rm \
-v course-plat_minio_data:/data \
-v /var/backups/minio:/backup \
alpine tar xzf /backup/minio-backup-YYYYMMDD-HHMMSS.tar.gz -C /data
# Reiniciar
docker compose up -d
```
## ⚠️ Considerações
| Aspecto | Nota |
|---------|------|
| **Segurança** | Use chaves SSH para o rsync |
| **Backup external** | Considere também mandar para S3/Backblaze |
| **Teste** | Teste restaurar pelo menos uma vez |
| **Logs** | Verifique `/var/log/minio-backup.log` regularmente |
## 🔧 Variáveis do backup-minio.sh
```bash
BACKUP_DIR="/var/backups/minio" # Onde salvar no servidor
RETENTION_DAYS=7 # Dias para manter backup
VOLUME_NAME="course-plat_minio_data" # Nome do volume
```
## 🔧 Variáveis do pull-backup.sh
```bash
SERVER_USER="usuario" # Usuário SSH
SERVER_HOST="seu-servidor.com" # Host do servidor
SERVER_BACKUP_DIR="/var/backups/minio"
LOCAL_BACKUP_DIR="$HOME/backups/minio"
KEEP_LOCAL_DAYS=30 # Dias para manter localmente
```
## 🔗 URLs de Arquivos
| Onde | Formato |
|------|---------|
| **Banco de dados** | `proxy://iciv/ClassTypes/arquivo.pdf` |
| **Front-end** | `/api/files/iciv/ClassTypes/arquivo.pdf` |
Use `getFileUrl(url)` do `@/app/lib/utils/storage/fileUrl` para converter.