158 lines
4.1 KiB
Markdown
158 lines
4.1 KiB
Markdown
# 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.
|