#!/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 "=========================================="