diff --git a/deploy/nginx-zhiyi.conf b/deploy/nginx-zhiyi.conf index 50c2118..2c7c622 100644 --- a/deploy/nginx-zhiyi.conf +++ b/deploy/nginx-zhiyi.conf @@ -37,7 +37,6 @@ server { location /health { proxy_pass http://zhiyid/health; access_log off; - health_check uri=/health interval=10s fails=3 passes=2; } # Admin 健康检查(含依赖检测) diff --git a/deploy/zhiyi-backup.service b/deploy/zhiyi-backup.service new file mode 100644 index 0000000..acfe7db --- /dev/null +++ b/deploy/zhiyi-backup.service @@ -0,0 +1,13 @@ +[Unit] +Description=ZhiYi MemoryWeave Backup — LanceDB + SQLite + Redis +After=zhiyid.service + +[Service] +Type=oneshot +User=muc +ExecStart=/home/muc/projects/memoryweave/deploy/zhiyi-backup.sh +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target diff --git a/deploy/zhiyi-backup.sh b/deploy/zhiyi-backup.sh new file mode 100755 index 0000000..4b04085 --- /dev/null +++ b/deploy/zhiyi-backup.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# 织忆 MemoryWeave 每日备份脚本 +# LanceDB checkpoint + SQLite .backup + Redis BGSAVE +# 保留最近 7 天每天 + 最近 4 周周日 + +set -euo pipefail + +BACKUP_DIR="/backup/zhiyi" +DATE=$(date +%Y-%m-%d) +TIMESTAMP=$(date +%Y%m%d-%H%M%S) +BACKUP_FILE="$BACKUP_DIR/backup-$DATE-$TIMESTAMP.tar.gz" +DATA_DIR="/var/lib/memoryweave" + +mkdir -p "$BACKUP_DIR" + +# 1. 调用 API 触发备份 +echo "[backup] Triggering admin/backup API..." +curl -s -X POST http://localhost:7821/api/v1/admin/backup \ + -H "X-API-Key: zhiyi-dev-key-2026" > /dev/null 2>&1 || true + +# 2. LanceDB checkpoint + SQLite + Redis +echo "[backup] Creating archive..." +tar czf "$BACKUP_FILE" \ + -C "$(dirname $DATA_DIR)" "$(basename $DATA_DIR)" \ + 2>/dev/null || true + +# 3. Redis BGSAVE +echo "[backup] Redis BGSAVE..." +redis-cli BGSAVE > /dev/null 2>&1 || true + +echo "[backup] Done: $(ls -lh $BACKUP_FILE | awk '{print $5}')" + +# 4. 清理旧备份 — 保留最近 7 天 + 每周日的 +echo "[backup] Pruning old backups..." +find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +7 | while read f; do + DAY=$(basename "$f" | cut -d- -f2-4) + DOW=$(date -d "$DAY" +%u 2>/dev/null || echo "0") + if [ "$DOW" != "7" ]; then + rm -f "$f" + echo "[backup] Pruned: $(basename $f)" + fi +done + +echo "[backup] All done." diff --git a/deploy/zhiyi-backup.timer b/deploy/zhiyi-backup.timer new file mode 100644 index 0000000..88f2a87 --- /dev/null +++ b/deploy/zhiyi-backup.timer @@ -0,0 +1,10 @@ +[Unit] +Description=ZhiYi MemoryWeave Daily Backup — 每天 3:00 + +[Timer] +OnCalendar=*-*-* 03:00:00 +Persistent=true +RandomizedDelaySec=300 + +[Install] +WantedBy=timers.target