Files
homelab/.gitea/workflows/backup-volumes.yml
2025-10-27 22:06:24 +01:00

82 lines
2.7 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: Create backup directory
run: |
mkdir -p /tmp/backups
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
echo "BACKUP_DATE=$BACKUP_DATE" >> $GITHUB_ENV
echo "BACKUP_DIR=/tmp/backups/$BACKUP_DATE" >> $GITHUB_ENV
mkdir -p /tmp/backups/$BACKUP_DATE
- name: Backup Gitea Data Volume
run: |
docker run --rm \
-v homelab_gitea-data:/source:ro \
-v /tmp/backups/$BACKUP_DATE:/backup \
alpine tar czf /backup/gitea-data.tar.gz -C /source .
echo "Gitea data backup created: $(ls -lh /tmp/backups/$BACKUP_DATE/gitea-data.tar.gz)"
- name: Backup Gitea Database Volume
run: |
docker run --rm \
-v homelab_gitea-database:/source:ro \
-v /tmp/backups/$BACKUP_DATE:/backup \
alpine tar czf /backup/gitea-database.tar.gz -C /source .
echo "Gitea database backup created: $(ls -lh /tmp/backups/$BACKUP_DATE/gitea-database.tar.gz)"
- name: Backup MinIO Data Volume
run: |
docker run --rm \
-v homelab_minio-data:/source:ro \
-v /tmp/backups/$BACKUP_DATE:/backup \
alpine tar czf /backup/minio-data.tar.gz -C /source .
echo "MinIO data backup created: $(ls -lh /tmp/backups/$BACKUP_DATE/minio-data.tar.gz)"
- name: Backup Gitea Runner Data Volume
run: |
docker run --rm \
-v homelab_gitea-runner-data:/source:ro \
-v /tmp/backups/$BACKUP_DATE:/backup \
alpine tar czf /backup/gitea-runner-data.tar.gz -C /source .
echo "Gitea runner data backup created: $(ls -lh /tmp/backups/$BACKUP_DATE/gitea-runner-data.tar.gz)"
- name: Create backup manifest
run: |
cd /tmp/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: /tmp/backups/${{ env.BACKUP_DATE }}/
retention-days: 30
- name: Cleanup and summary
run: |
echo "Backup completed successfully!"
echo "Total backup size: $(du -sh /tmp/backups/$BACKUP_DATE)"