diff --git a/servers/production/devops/.gitea/workflows/backup-volumes.yml b/servers/production/devops/.gitea/workflows/backup-volumes.yml new file mode 100644 index 0000000..9086187 --- /dev/null +++ b/servers/production/devops/.gitea/workflows/backup-volumes.yml @@ -0,0 +1,89 @@ +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 + container: + image: docker:latest + volumes: + - /var/run/docker.sock:/var/run/docker.sock + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apk add --no-cache tar gzip + + - 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 devops_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 devops_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 devops_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 devops_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 old backups (keep last 7 days) + run: | + echo "Backup completed successfully!" + echo "Total backup size: $(du -sh /tmp/backups/$BACKUP_DATE)"