Skip to content

自动备份网站

自动备份网站 #50

Workflow file for this run

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