Initial MinIO setup with CI/CD
All checks were successful
Deploy MinIO Production / deploy (push) Successful in 32s

This commit is contained in:
Frank John Begornia
2026-01-06 09:47:50 +08:00
parent c3c3e38f28
commit c9d417bf14
4 changed files with 803 additions and 0 deletions

129
.gitea/workflows/backup.yml Normal file
View File

@@ -0,0 +1,129 @@
name: Backup MinIO Buckets
on:
schedule:
# Run daily at 2 AM
- cron: '0 2 * * *'
workflow_dispatch:
jobs:
backup:
runs-on: ubuntu-latest
container:
image: catthehacker/ubuntu:act-latest
steps:
# 1⃣ Setup SSH
- name: Setup SSH
shell: sh
env:
DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
run: |
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts
# 2⃣ Run backup on server
- name: Backup MinIO buckets
shell: sh
env:
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
run: |
ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF'
set -e
BACKUP_BASE="/var/backups/minio"
BACKUP_DIR="$BACKUP_BASE/$(date +%Y%m%d_%H%M%S)"
CONTAINER_NAME="crew-minio-prod"
echo "📦 Starting MinIO backup to $BACKUP_DIR"
sudo mkdir -p "$BACKUP_DIR"
sudo chown $USER:$USER "$BACKUP_DIR"
# Check if container is running
if ! docker ps --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then
echo "❌ MinIO container is not running"
exit 1
fi
echo "🔧 Installing MinIO client if needed"
docker exec $CONTAINER_NAME sh -c "
if ! command -v mc &> /dev/null; then
curl -sSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc
chmod +x /usr/local/bin/mc
fi
" || echo "mc already installed"
echo "⚙️ Configuring MinIO client"
docker exec $CONTAINER_NAME mc alias set backup http://localhost:9000 \
${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin123}
# Backup each bucket
BUCKETS="crewsportswear merchbay merchbay-admin crew-admin email-reports"
for BUCKET in $BUCKETS; do
echo "💾 Backing up bucket: $BUCKET"
# Create bucket directory
sudo mkdir -p "$BACKUP_DIR/$BUCKET"
sudo chown $USER:$USER "$BACKUP_DIR/$BUCKET"
# Export bucket to container temp
docker exec $CONTAINER_NAME mc mirror --overwrite backup/$BUCKET /tmp/backup_$BUCKET/
# Copy from container to host
docker cp $CONTAINER_NAME:/tmp/backup_$BUCKET/. "$BACKUP_DIR/$BUCKET/"
# Cleanup container temp
docker exec $CONTAINER_NAME rm -rf /tmp/backup_$BUCKET
# Count files
FILE_COUNT=$(find "$BACKUP_DIR/$BUCKET" -type f | wc -l)
echo " ✓ Backed up $FILE_COUNT files from $BUCKET"
done
echo "📊 Backup statistics"
du -sh "$BACKUP_DIR"
du -sh "$BACKUP_DIR"/*
echo "🗜️ Compressing backup"
cd "$BACKUP_BASE"
tar -czf "minio_backup_$(date +%Y%m%d_%H%M%S).tar.gz" "$(basename $BACKUP_DIR)"
echo "🧹 Removing uncompressed backup"
rm -rf "$BACKUP_DIR"
echo "🗑️ Cleaning old backups (keeping last 7 days)"
find "$BACKUP_BASE" -name "minio_backup_*.tar.gz" -type f -mtime +7 -delete
echo "📋 Current backups:"
ls -lh "$BACKUP_BASE"/minio_backup_*.tar.gz 2>/dev/null || echo "No compressed backups found"
echo "✅ Backup completed successfully!"
EOF
# 3⃣ Verify backup
- name: Verify backup
shell: sh
env:
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
run: |
ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF'
LATEST_BACKUP=$(ls -t /var/backups/minio/minio_backup_*.tar.gz 2>/dev/null | head -1)
if [ -f "$LATEST_BACKUP" ]; then
echo "✅ Latest backup verified:"
ls -lh "$LATEST_BACKUP"
BACKUP_SIZE=$(du -sh "$LATEST_BACKUP" | awk '{print $1}')
echo "📦 Backup size: $BACKUP_SIZE"
else
echo "❌ No backup file found!"
exit 1
fi
EOF