115 lines
3.9 KiB
YAML
115 lines
3.9 KiB
YAML
name: Backup Docker Volumes
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 2 * * *' # Täglich um 2 Uhr nachts
|
|
workflow_dispatch: # Manueller Trigger
|
|
|
|
jobs:
|
|
backup:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Debug - List available volumes
|
|
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"
|
|
|
|
- name: Create backup directory
|
|
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
|
|
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"
|
|
docker run --rm \
|
|
-v "$VOLUME_NAME":/source:ro \
|
|
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
|
alpine tar czf /backup/gitea-data.tar.gz -C /source .
|
|
ls -lh backups/$BACKUP_DATE/gitea-data.tar.gz
|
|
|
|
- name: Backup Gitea Database Volume
|
|
run: |
|
|
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"
|
|
docker run --rm \
|
|
-v "$VOLUME_NAME":/source:ro \
|
|
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
|
alpine tar czf /backup/gitea-database.tar.gz -C /source .
|
|
ls -lh backups/$BACKUP_DATE/gitea-database.tar.gz
|
|
|
|
- name: Backup MinIO Data Volume
|
|
run: |
|
|
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"
|
|
docker run --rm \
|
|
-v "$VOLUME_NAME":/source:ro \
|
|
-v $(pwd)/backups/$BACKUP_DATE:/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
|
|
fi
|
|
echo "Found volume: $VOLUME_NAME"
|
|
docker run --rm \
|
|
-v "$VOLUME_NAME":/source:ro \
|
|
-v $(pwd)/backups/$BACKUP_DATE:/backup \
|
|
alpine tar czf /backup/gitea-runner-data.tar.gz -C /source .
|
|
ls -lh backups/$BACKUP_DATE/gitea-runner-data.tar.gz
|
|
|
|
- name: Create backup manifest
|
|
run: |
|
|
cd backups/$BACKUP_DATE
|
|
cat > manifest.txt << EOF
|
|
Backup created: $(date)
|
|
Backup date: $BACKUP_DATE
|
|
|
|
Files:
|
|
$(ls -lh)
|
|
|
|
Checksums (SHA256):
|
|
$(sha256sum *.tar.gz)
|
|
EOF
|
|
cat manifest.txt
|
|
|
|
- name: Upload backup artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: docker-volumes-backup-${{ env.BACKUP_DATE }}
|
|
path: backups/${{ env.BACKUP_DATE }}/
|
|
retention-days: 30
|
|
|
|
- name: Cleanup and summary
|
|
run: |
|
|
echo "Backup completed successfully!"
|
|
echo "Total backup size: $(du -sh backups/$BACKUP_DATE)"
|
|
rm -rf backups/
|