Initial commit
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# MinIO Credentials
|
||||
MINIO_ROOT_USER=admin
|
||||
MINIO_ROOT_PASSWORD=change-this-password-please
|
||||
MINIO_BUCKET=course-plat
|
||||
@@ -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.
|
||||
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
# backup-minio.sh - Script de backup do MinIO no servidor
|
||||
# Uso: ./backup-minio.sh
|
||||
# Agendar no crontab: 0 2 * * * /caminho/para/backup-minio.sh
|
||||
|
||||
set -e
|
||||
|
||||
# ============ CONFIGURAÇÃO ============
|
||||
BACKUP_DIR="/var/backups/minio" # Onde salvar os backups no servidor
|
||||
RETENTION_DAYS=7 # Quantos dias manter
|
||||
VOLUME_NAME="course-plat_minio_data" # Nome do volume Docker
|
||||
COMPRESSION="gzip" # gzip ou none
|
||||
|
||||
# Criar diretório de backup se não existir
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# Data atual para o nome do arquivo
|
||||
DATE=$(date +%Y%m%d-%H%M%S)
|
||||
BACKUP_FILE="$BACKUP_DIR/minio-backup-$DATE.tar.gz"
|
||||
|
||||
echo "=========================================="
|
||||
echo "Backup MinIO iniciado em: $(date)"
|
||||
echo "=========================================="
|
||||
|
||||
# ============ FAZER BACKUP ============
|
||||
echo "Criando backup do volume $VOLUME_NAME..."
|
||||
|
||||
if [ "$COMPRESSION" = "gzip" ]; then
|
||||
docker run --rm \
|
||||
-v "$VOLUME_NAME:/data:ro" \
|
||||
-v "$BACKUP_DIR:/backup" \
|
||||
alpine tar czf "/backup/$(basename "$BACKUP_FILE")" -C /data .
|
||||
else
|
||||
docker run --rm \
|
||||
-v "$VOLUME_NAME:/data:ro" \
|
||||
-v "$BACKUP_DIR:/backup" \
|
||||
alpine tar cf "/backup/$(basename "$BACKUP_FILE")" -C /data .
|
||||
fi
|
||||
|
||||
# ============ VERIFICAR ============
|
||||
if [ -f "$BACKUP_FILE" ]; then
|
||||
SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
|
||||
echo "✓ Backup criado: $BACKUP_FILE ($SIZE)"
|
||||
else
|
||||
echo "✗ ERRO: Backup não foi criado!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ============ LIMPAR BACKUPS ANTIGOS ============
|
||||
echo "Limpando backups com mais de $RETENTION_DAYS dias..."
|
||||
find "$BACKUP_DIR" -name "minio-backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
||||
|
||||
# ============ LISTAR BACKUPS RESTANTES ============
|
||||
echo ""
|
||||
echo "Backups disponíveis:"
|
||||
ls -lh "$BACKUP_DIR"/minio-backup-*.tar.gz 2>/dev/null || echo "Nenhum backup encontrado."
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Backup concluído em: $(date)"
|
||||
echo "=========================================="
|
||||
@@ -0,0 +1,39 @@
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: course-plat-minio
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9000:9000" # API
|
||||
- "9001:9001" # Console (UI)
|
||||
environment:
|
||||
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
|
||||
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
# Opcional: cria bucket automaticamente ao iniciar
|
||||
minio-init:
|
||||
image: minio/mc:latest
|
||||
container_name: course-plat-minio-init
|
||||
depends_on:
|
||||
- minio
|
||||
entrypoint: >
|
||||
sh -c "
|
||||
sleep 5 &&
|
||||
mc alias set myminio http://minio:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin} &&
|
||||
mc mb myminio/${MINIO_BUCKET:-course-plat} --ignore-existing &&
|
||||
mc anonymous set none myminio/${MINIO_BUCKET:-course-plat} &&
|
||||
echo 'MinIO initialized! Bucket is private.'
|
||||
"
|
||||
restart: "no"
|
||||
|
||||
volumes:
|
||||
minio_data:
|
||||
driver: local
|
||||
Executable
+54
@@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
# pull-backup.sh - Script para baixar backups do servidor para seu PC
|
||||
# Uso: ./pull-backup.sh
|
||||
# Agendar no crontab do SEU PC: 0 3 * * * /caminho/para/pull-backup.sh
|
||||
|
||||
set -e
|
||||
|
||||
# ============ CONFIGURAÇÃO ============
|
||||
# Preencha com seus dados
|
||||
SERVER_USER="usuario" # Usuário SSH no servidor
|
||||
SERVER_HOST="seu-servidor.com" # IP ou domínio do servidor
|
||||
SERVER_BACKUP_DIR="/var/backups/minio" # Mesmo diretório do backup-minio.sh
|
||||
LOCAL_BACKUP_DIR="$HOME/backups/minio" # Onde salvar no seu PC
|
||||
KEEP_LOCAL_DAYS=30 # Quanto tempo manter no seu PC
|
||||
|
||||
# ============ CÓDIGO ============
|
||||
mkdir -p "$LOCAL_BACKUP_DIR"
|
||||
|
||||
echo "=========================================="
|
||||
echo "Baixando backups do MinIO"
|
||||
echo "De: $SERVER_USER@$SERVER_HOST:$SERVER_BACKUP_DIR"
|
||||
echo "Para: $LOCAL_BACKUP_DIR"
|
||||
echo "Iniciado em: $(date)"
|
||||
echo "=========================================="
|
||||
|
||||
# Baixar backups (somente os que ainda não temos)
|
||||
echo "Sincronizando arquivos..."
|
||||
rsync -avz --progress \
|
||||
-e "ssh -o StrictHostKeyChecking=no" \
|
||||
"$SERVER_USER@$SERVER_HOST:$SERVER_BACKUP_DIR/" \
|
||||
"$LOCAL_BACKUP_DIR/"
|
||||
|
||||
# ============ LIMPAR BACKUPS ANTIGOS (LOCAL) ============
|
||||
echo ""
|
||||
echo "Limpando backups locais com mais de $KEEP_LOCAL_DAYS dias..."
|
||||
find "$LOCAL_BACKUP_DIR" -name "minio-backup-*.tar.gz" -mtime +$KEEP_LOCAL_DAYS -delete
|
||||
|
||||
# ============ RESUMO ============
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Backups locais:"
|
||||
ls -lh "$LOCAL_BACKUP_DIR"/minio-backup-*.tar.gz 2>/dev/null | tail -5
|
||||
echo ""
|
||||
echo "Espaço usado:"
|
||||
du -sh "$LOCAL_BACKUP_DIR"
|
||||
echo ""
|
||||
echo "Concluído em: $(date)"
|
||||
echo "=========================================="
|
||||
|
||||
# ============ ALERTAS ============
|
||||
BACKUP_COUNT=$(ls -1 "$LOCAL_BACKUP_DIR"/minio-backup-*.tar.gz 2>/dev/null | wc -l)
|
||||
if [ "$BACKUP_COUNT" -eq 0 ]; then
|
||||
echo "⚠️ ATENÇÃO: Nenhum backup encontrado localmente!"
|
||||
fi
|
||||
Reference in New Issue
Block a user