leowuming commited on
Commit
f6ab0dd
·
verified ·
1 Parent(s): 7af53a0

Create scripts/restore.sh

Browse files
Files changed (1) hide show
  1. scripts/restore.sh +63 -0
scripts/restore.sh ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "[Restore] Data restoration script started."
5
+
6
+ # --- 变量与暂存区定义 ---
7
+ LIVE_DATA_DIR="/app/server/storage"
8
+ LIVE_DB_FILE="/app/server/anythingllm.db"
9
+ STAGE_DIR="/tmp/restore_stage"
10
+ RESTORE_SOURCE="" # 将用于标记最终从哪里恢复
11
+
12
+ # --- 步骤 1: 强制清理线上旧数据和暂存区 ---
13
+ echo "[Restore] Forcing a clean slate..."
14
+ rm -rf "${LIVE_DATA_DIR}" "${LIVE_DB_FILE}" "${STAGE_DIR}"
15
+ mkdir -p "${STAGE_DIR}"
16
+
17
+ # --- 步骤 2: 尝试从 WebDAV 恢复到暂存区 ---
18
+ if [ -n "${WEBDAV_URL}" ]; then
19
+ echo "[Restore] Attempting to restore from WebDAV to staging area..."
20
+ if rclone copy "webdav:anythingllm_backup/" "${STAGE_DIR}/" --max-depth 20; then
21
+ # 检查关键文件是否存在,验证恢复是否有效
22
+ if [ -f "${STAGE_DIR}/anythingllm.db" ]; then
23
+ echo "[Restore] WebDAV restore to staging area successful."
24
+ RESTORE_SOURCE="${STAGE_DIR}"
25
+ else
26
+ echo "[Restore] WebDAV backup seems incomplete. Ignoring."
27
+ fi
28
+ else
29
+ echo "[Restore] WebDAV restore failed."
30
+ fi
31
+ fi
32
+
33
+ # --- 步骤 3: 如果 WebDAV 未成功,尝试从 GitHub 恢复 ---
34
+ if [ -z "${RESTORE_SOURCE}" ] && [ -n "${GITHUB_REPO}" ]; then
35
+ echo "[Restore] Attempting to restore from GitHub to staging area..."
36
+ if git clone https://${GITHUB_TOKEN}@github.com/${GITHUB_REPO##*//github.com/} "${STAGE_DIR}"; then
37
+ if [ -f "${STAGE_DIR}/anythingllm.db" ]; then
38
+ echo "[Restore] GitHub restore to staging area successful."
39
+ RESTORE_SOURCE="${STAGE_DIR}"
40
+ else
41
+ echo "[Restore] GitHub backup seems incomplete. Ignoring."
42
+ fi
43
+ else
44
+ echo "[Restore] GitHub restore failed."
45
+ fi
46
+ fi
47
+
48
+ # --- 步骤 4: 从选定的恢复源部署到线上位置 ---
49
+ if [ -n "${RESTORE_SOURCE}" ]; then
50
+ echo "[Restore] Deploying data from ${RESTORE_SOURCE} to live location..."
51
+ # 确保线上目录存在
52
+ mkdir -p "${LIVE_DATA_DIR}"
53
+ # 使用 rsync 安全地移动文件
54
+ rsync -a "${RESTORE_SOURCE}/storage/" "${LIVE_DATA_DIR}/"
55
+ mv "${RESTORE_SOURCE}/anythingllm.db" "${LIVE_DB_FILE}"
56
+ echo "[Restore] Deployment successful."
57
+ else
58
+ echo "[Restore] No valid remote backups found to restore from. Starting fresh."
59
+ fi
60
+
61
+ # --- 步骤 5: 清理暂存区 ---
62
+ echo "[Restore] Cleaning up staging area..."
63
+ rm -rf "${STAGE_DIR}"