Files
2026-08-31 14:10:20 -03:00

62 lines
2.0 KiB
Bash
Executable File

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