b42a70ff3b
backup.yml 原 runs-on ubuntu-latest 无对应 runner、落盘 NAS 路径在 mac runner 不存在,长期跑不起来。 改为 runs-on mac + scripts/ci/backup-db.sh:复用 lib-forgejo 的 ssh 封装连 EC2, 在 EC2 端从 production.env 读 DSN 密码 mysqldump(零额外 secret),流回本机 ~/jiu-db-backups gzip 落盘、保留 30 天、完整性校验,恢复每日 02:00 定时 + Telegram 成败通知。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx
36 lines
1.1 KiB
YAML
36 lines
1.1 KiB
YAML
name: DB Backup
|
|
|
|
on:
|
|
# 每日定时备份(北京时间 02:00)。手动触发亦可。
|
|
schedule:
|
|
- cron: '0 18 * * *' # UTC 18:00 = 北京时间 02:00
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: db-backup
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
backup:
|
|
runs-on: mac
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Dump MySQL to local backup dir
|
|
env:
|
|
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }}
|
|
EC2_HOST: ${{ secrets.EC2_HOST }}
|
|
EC2_USER: ${{ secrets.EC2_USER }}
|
|
run: sh scripts/ci/backup-db.sh
|
|
|
|
- name: Notify (Telegram)
|
|
if: always()
|
|
env:
|
|
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
|
|
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
|
|
run: |
|
|
if [ "${{ job.status }}" = "success" ]; then ICON="✅"; LABEL="数据库备份成功"; else ICON="❌"; LABEL="数据库备份失败"; fi
|
|
curl -f -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \
|
|
-d "chat_id=${TELEGRAM_CHAT_ID}" \
|
|
--data-urlencode "text=${ICON} 岩美 ${LABEL}" > /dev/null || true
|