ci: local backup
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
name: Backup Docker Volumes
|
||||
name: Backup Docker Volumes (Remote)
|
||||
|
||||
on:
|
||||
schedule:
|
||||
@@ -13,102 +13,121 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Debug - List available volumes
|
||||
- name: Setup SSH
|
||||
run: |
|
||||
echo "Available Docker volumes:"
|
||||
docker volume ls
|
||||
echo ""
|
||||
echo "Looking for gitea-related volumes:"
|
||||
docker volume ls | grep -i gitea || echo "No gitea volumes found with grep"
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
|
||||
chmod 600 ~/.ssh/id_rsa
|
||||
ssh-keyscan -H ${{ secrets.BACKUP_HOST }} >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Create backup directory
|
||||
- name: Create backup on remote server
|
||||
run: |
|
||||
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
|
||||
echo "BACKUP_DATE=$BACKUP_DATE" >> $GITHUB_ENV
|
||||
mkdir -p backups/$BACKUP_DATE
|
||||
echo "Backup directory created: $(pwd)/backups/$BACKUP_DATE"
|
||||
|
||||
- name: Backup Gitea Data Volume
|
||||
run: |
|
||||
# Finde den korrekten Volume-Namen
|
||||
ssh ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
|
||||
BACKUP_DATE='"$BACKUP_DATE"'
|
||||
BACKUP_DIR="/tmp/backups/$BACKUP_DATE"
|
||||
|
||||
echo "Creating backup directory: $BACKUP_DIR"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
echo "Listing available volumes:"
|
||||
docker volume ls
|
||||
|
||||
# Backup Gitea Data
|
||||
echo "Backing up gitea-data..."
|
||||
VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-data$' | head -n1)
|
||||
if [ -z "$VOLUME_NAME" ]; then
|
||||
echo "ERROR: gitea-data volume not found!"
|
||||
exit 1
|
||||
fi
|
||||
echo "Found volume: $VOLUME_NAME"
|
||||
if [ -n "$VOLUME_NAME" ]; then
|
||||
docker run --rm \
|
||||
-v "$VOLUME_NAME":/source:ro \
|
||||
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
||||
-v "$BACKUP_DIR":/backup \
|
||||
alpine tar czf /backup/gitea-data.tar.gz -C /source .
|
||||
ls -lh backups/$BACKUP_DATE/gitea-data.tar.gz
|
||||
echo "✓ gitea-data backed up"
|
||||
else
|
||||
echo "⚠ gitea-data volume not found"
|
||||
fi
|
||||
|
||||
- name: Backup Gitea Database Volume
|
||||
run: |
|
||||
# Backup Gitea Database
|
||||
echo "Backing up gitea-database..."
|
||||
VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-database$' | head -n1)
|
||||
if [ -z "$VOLUME_NAME" ]; then
|
||||
echo "ERROR: gitea-database volume not found!"
|
||||
exit 1
|
||||
fi
|
||||
echo "Found volume: $VOLUME_NAME"
|
||||
if [ -n "$VOLUME_NAME" ]; then
|
||||
docker run --rm \
|
||||
-v "$VOLUME_NAME":/source:ro \
|
||||
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
||||
-v "$BACKUP_DIR":/backup \
|
||||
alpine tar czf /backup/gitea-database.tar.gz -C /source .
|
||||
ls -lh backups/$BACKUP_DATE/gitea-database.tar.gz
|
||||
echo "✓ gitea-database backed up"
|
||||
else
|
||||
echo "⚠ gitea-database volume not found"
|
||||
fi
|
||||
|
||||
- name: Backup MinIO Data Volume
|
||||
run: |
|
||||
# Backup MinIO Data
|
||||
echo "Backing up minio-data..."
|
||||
VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'minio-data$' | head -n1)
|
||||
if [ -z "$VOLUME_NAME" ]; then
|
||||
echo "ERROR: minio-data volume not found!"
|
||||
exit 1
|
||||
fi
|
||||
echo "Found volume: $VOLUME_NAME"
|
||||
if [ -n "$VOLUME_NAME" ]; then
|
||||
docker run --rm \
|
||||
-v "$VOLUME_NAME":/source:ro \
|
||||
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
||||
-v "$BACKUP_DIR":/backup \
|
||||
alpine tar czf /backup/minio-data.tar.gz -C /source .
|
||||
ls -lh backups/$BACKUP_DATE/minio-data.tar.gz
|
||||
|
||||
- name: Backup Gitea Runner Data Volume
|
||||
run: |
|
||||
VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-runner-data$' | head -n1)
|
||||
if [ -z "$VOLUME_NAME" ]; then
|
||||
echo "ERROR: gitea-runner-data volume not found!"
|
||||
exit 1
|
||||
echo "✓ minio-data backed up"
|
||||
else
|
||||
echo "⚠ minio-data volume not found"
|
||||
fi
|
||||
echo "Found volume: $VOLUME_NAME"
|
||||
|
||||
# Backup Gitea Runner Data
|
||||
echo "Backing up gitea-runner-data..."
|
||||
VOLUME_NAME=$(docker volume ls --format '{{.Name}}' | grep 'gitea-runner-data$' | head -n1)
|
||||
if [ -n "$VOLUME_NAME" ]; then
|
||||
docker run --rm \
|
||||
-v "$VOLUME_NAME":/source:ro \
|
||||
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
||||
-v "$BACKUP_DIR":/backup \
|
||||
alpine tar czf /backup/gitea-runner-data.tar.gz -C /source .
|
||||
ls -lh backups/$BACKUP_DATE/gitea-runner-data.tar.gz
|
||||
echo "✓ gitea-runner-data backed up"
|
||||
else
|
||||
echo "⚠ gitea-runner-data volume not found"
|
||||
fi
|
||||
|
||||
- name: Create backup manifest
|
||||
run: |
|
||||
cd backups/$BACKUP_DATE
|
||||
# Create manifest
|
||||
cd "$BACKUP_DIR"
|
||||
cat > manifest.txt << EOF
|
||||
Backup created: $(date)
|
||||
Backup date: $BACKUP_DATE
|
||||
Hostname: $(hostname)
|
||||
|
||||
Files:
|
||||
$(ls -lh)
|
||||
$(ls -lh *.tar.gz 2>/dev/null || echo "No backup files created")
|
||||
|
||||
Checksums (SHA256):
|
||||
$(sha256sum *.tar.gz)
|
||||
$(sha256sum *.tar.gz 2>/dev/null || echo "No files to checksum")
|
||||
EOF
|
||||
|
||||
echo "Backup manifest:"
|
||||
cat manifest.txt
|
||||
|
||||
echo "Total backup size: $(du -sh $BACKUP_DIR)"
|
||||
ENDSSH
|
||||
|
||||
- name: Download backups from remote server
|
||||
run: |
|
||||
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
|
||||
mkdir -p backups
|
||||
|
||||
echo "Downloading backups from remote server..."
|
||||
scp -r ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }}:/tmp/backups/$BACKUP_DATE backups/
|
||||
|
||||
echo "Downloaded files:"
|
||||
ls -lh backups/$BACKUP_DATE/
|
||||
|
||||
- name: Upload backup artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docker-volumes-backup-${{ env.BACKUP_DATE }}
|
||||
path: backups/${{ env.BACKUP_DATE }}/
|
||||
path: backups/
|
||||
retention-days: 30
|
||||
|
||||
- name: Cleanup and summary
|
||||
- name: Cleanup remote backups
|
||||
if: always()
|
||||
run: |
|
||||
echo "Backup completed successfully!"
|
||||
echo "Total backup size: $(du -sh backups/$BACKUP_DATE)"
|
||||
rm -rf backups/
|
||||
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
|
||||
ssh ${{ secrets.BACKUP_USER }}@${{ secrets.BACKUP_HOST }} "rm -rf /tmp/backups/$BACKUP_DATE"
|
||||
echo "Remote backup cleaned up"
|
||||
|
||||
Reference in New Issue
Block a user