自动备份网站 #50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 自动备份网站 | |
| on: | |
| schedule: | |
| - cron: '0 4 */3 * *' | |
| workflow_dispatch: | |
| jobs: | |
| backup: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: 检出代码 | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: 安装 HTTrack | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y httrack webhttrack | |
| - name: 创建备份目录 | |
| run: | | |
| mkdir -p backups | |
| - name: 设置日期变量 | |
| id: date | |
| run: | | |
| echo "date=$(date +'%Y%m%d_%H%M%S')" >> $GITHUB_OUTPUT | |
| - name: 创建临时目录 | |
| run: | | |
| mkdir -p /tmp/httrack-backup | |
| - name: 执行 HTTrack 备份 | |
| run: | | |
| BACKUP_DIR="/tmp/httrack-backup/deep-forest-club-${{ steps.date.outputs.date }}" | |
| mkdir -p "$BACKUP_DIR" | |
| cd /tmp/httrack-backup | |
| httrack "https://deep-forest-club.wikidot.com/system:list-all-pages" -O "$BACKUP_DIR" \ | |
| --mirror \ | |
| --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \ | |
| --depth=3 \ | |
| --stay-on-same-domain \ | |
| --robots=0 \ | |
| --verbose | |
| echo "备份完成,保存在: $BACKUP_DIR" | |
| - name: 检查备份是否成功 | |
| run: | | |
| BACKUP_DIR="/tmp/httrack-backup/deep-forest-club-${{ steps.date.outputs.date }}" | |
| if [ -d "$BACKUP_DIR" ] && [ "$(ls -A $BACKUP_DIR)" ]; then | |
| echo "备份成功,目录不为空" | |
| else | |
| echo "备份可能失败,目录为空" | |
| exit 1 | |
| fi | |
| - name: 压缩备份文件 | |
| run: | | |
| cd /tmp/httrack-backup | |
| BACKUP_NAME="deep-forest-club-${{ steps.date.outputs.date }}" | |
| tar -czf "$GITHUB_WORKSPACE/backups/${BACKUP_NAME}.tar.gz" "$BACKUP_NAME" | |
| - name: 生成备份信息 | |
| run: | | |
| cd $GITHUB_WORKSPACE/backups | |
| BACKUP_FILE="deep-forest-club-${{ steps.date.outputs.date }}.tar.gz" | |
| cat > backup_info_${{ steps.date.outputs.date }}.md << EOF | |
| # 备份信息 | |
| - **备份时间**: ${{ steps.date.outputs.date }} | |
| - **备份文件**: ${BACKUP_FILE} | |
| - **备份大小**: $(du -h ${BACKUP_FILE} | cut -f1) | |
| - **网站**: https://deep-forest-club.wikidot.com/ | |
| EOF | |
| - name: 更新软链接 | |
| run: | | |
| cd $GITHUB_WORKSPACE/backups | |
| rm -f latest-backup.tar.gz latest-backup-info.md | |
| ln -s "deep-forest-club-${{ steps.date.outputs.date }}.tar.gz" "latest-backup.tar.gz" | |
| ln -s "backup_info_${{ steps.date.outputs.date }}.md" "latest-backup-info.md" | |
| - name: 清理旧备份(仅保留最近10个) | |
| run: | | |
| cd $GITHUB_WORKSPACE/backups | |
| # 删除超出的压缩包:按时间排序(ls -t),保留前10个,从第11个开始删除 | |
| ls -t deep-forest-club-*.tar.gz | tail -n +11 | xargs -r rm -- | |
| # 删除超出的信息文件:同理保留最近10个 | |
| ls -t backup_info_*.md | tail -n +11 | xargs -r rm -- | |
| echo "清理完成。当前备份目录下剩余文件:" | |
| ls -lh | |
| - name: 提交备份到仓库 | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| git add backups/ | |
| if git diff --staged --quiet; then | |
| echo "没有新的备份文件需要提交" | |
| else | |
| git commit -m "自动备份网站 - ${{ steps.date.outputs.date }}" | |
| git pull --rebase origin master | |
| git push origin master | |
| fi | |
| - name: 上传备份文件作为工作流附件 | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: deep-forest-club-backup-${{ steps.date.outputs.date }} | |
| path: backups/deep-forest-club-${{ steps.date.outputs.date }}.tar.gz | |
| retention-days: 30 | |
| - name: 清理临时文件 | |
| run: | | |
| rm -rf /tmp/httrack-backup |