Initial commit
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user