4.1 KiB
4.1 KiB
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
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
docker compose up -d
3. Acessar
- Console (UI): http://seu-servidor:9001
- API: http://seu-servidor:9000
💾 Backup Automático
No Servidor (VPS)
- Copiar o script para o servidor:
chmod +x backup-minio.sh
sudo cp backup-minio.sh /usr/local/bin/
- Testar manualmente:
/usr/local/bin/backup-minio.sh
- Adicionar ao crontab (backup todo dia às 2h da manhã):
crontab -e
# Adicionar linha:
0 2 * * * /usr/local/bin/backup-minio.sh >> /var/log/minio-backup.log 2>&1
No Seu PC
- Editar
pull-backup.shcom seus dados:
SERVER_USER="seu-usuario"
SERVER_HOST="seu-servidor.com"
- Dar permissão e testar:
chmod +x pull-backup.sh
./pull-backup.sh
- Agendar no crontab do SEU PC (todo dia às 3h):
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:
# 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
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
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.