e1a17acbe4
backup-db.sh:ssh pangolin1 → sqlite3 online .backup 取 WAL 一致快照 + 远端 integrity_check → gzip 流回 → 存 NAS /volume1/docker/backups/pangolin,保留 30 天。 backup.yml:每日 02:00(北京)cron + 手动,ubuntu-latest,复用 DEPLOY_SSH_KEY, Telegram 通知。异地=家里 NAS≠VPS 机房。不在 pangolin1 装/常驻任何东西。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
37 lines
917 B
YAML
37 lines
917 B
YAML
name: DB Backup
|
|
|
|
on:
|
|
# 每日北京 02:00(= UTC 18:00)自动备份;也可手动触发。
|
|
schedule:
|
|
- cron: '0 18 * * *'
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: db-backup
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
backup:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Backup pangolin1 SQLite → NAS
|
|
env:
|
|
DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
|
|
run: bash scripts/ci/backup-db.sh
|
|
|
|
- name: Notify (Telegram)
|
|
if: always()
|
|
env:
|
|
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
|
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
|
|
run: |
|
|
. scripts/ci/notify.sh
|
|
if [ "${{ job.status }}" = "success" ]; then
|
|
notify_ok "pangolin1 SQLite 备份成功(NAS)"
|
|
else
|
|
notify_fail "pangolin1 SQLite 备份失败"
|
|
fi
|