# 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.