gaojintao01 commited on
Commit
420c7cb
·
1 Parent(s): 7126dfc
Files changed (6) hide show
  1. .env.example +0 -0
  2. AGENTS.md +259 -0
  3. Dockerfile +2 -0
  4. entrypoint.sh +7 -2
  5. scripts/backup.sh +11 -2
  6. scripts/restore.sh +8 -3
.env.example ADDED
Binary file (5.17 kB). View file
 
AGENTS.md ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AI代理系统文档
2
+
3
+ ## 项目概述
4
+
5
+ 这是一个基于AnythingLLM的智能RAG(检索增强生成)系统,专为企业级知识管理和智能问答场景设计。该系统提供了完整的备份、恢复和监控功能,确保数据的安全性和服务的可靠性。
6
+
7
+ ## 系统架构
8
+
9
+ ### 核心组件
10
+
11
+ 1. **AnythingLLM核心引擎**
12
+ - 基于官方`mintplexlabs/anythingllm:latest`镜像
13
+ - 提供强大的文档处理和向量检索能力
14
+ - 支持多种文件格式和数据源
15
+
16
+ 2. **自动化备份系统**
17
+ - **实时数据保护**:SQLite数据库热备份
18
+ - **多重备份策略**:支持GitHub和WebDAV双备份
19
+ - **智能暂存机制**:使用临时目录进行安全的数据转储
20
+
21
+ 3. **智能恢复机制**
22
+ - **优先级备份恢复**:WebDAV → GitHub逐级回退
23
+ - **完整性验证**:确保备份数据的有效性
24
+ - **零停机恢复**:容器重启时自动恢复数据
25
+
26
+ ### 技术栈
27
+
28
+ ```mermaid
29
+ graph TB
30
+ A[Docker容器] --> B[AnythingLLM核心]
31
+ B --> C[文档处理引擎]
32
+ B --> D[向量检索系统]
33
+ C --> E[多格式文件支持]
34
+ D --> F[智能问答接口]
35
+
36
+ G[备份系统] --> H[实时监控]
37
+ G --> I[GitHub备份]
38
+ G --> J[WebDAV备份]
39
+ H --> K[健康检查]
40
+ I --> L[版本控制]
41
+ J --> M[云存储]
42
+
43
+ N[恢复系统] --> O[自动检测]
44
+ N --> P[数据验证]
45
+ N --> Q[无缝部署]
46
+ ```
47
+
48
+ ## 配置指南
49
+
50
+ ### 环境变量配置
51
+
52
+ #### 必需配置
53
+
54
+ | 变量名 | 描述 | 示例 |
55
+ |--------|------|------|
56
+ | `GITHUB_REPO` | GitHub仓库地址 | `username/repo-name` |
57
+ | `GITHUB_TOKEN` | GitHub个人访问令牌 | `ghp_xxxxxxxxxxxxxxxx` |
58
+
59
+ #### 可选配置
60
+
61
+ | 变量名 | 描述 | 示例 |
62
+ |--------|------|------|
63
+ | `WEBDAV_URL` | WebDAV服务地址 | `https://dav.example.com` |
64
+ | `WEBDAV_USER` | WebDAV用户名 | `backup_user` |
65
+ | `WEBDAV_PASS` | WebDAV密码 | `secure_password` |
66
+ | `BACKUP_INTERVAL` | 备份间隔(秒) | `3600` |
67
+ | `HEALTHCHECK_URL` | 健康检查URL | `https://api.example.com/health` |
68
+
69
+ ### 备份策略配置
70
+
71
+ #### GitHub备份
72
+
73
+ ```bash
74
+ # 环境变量设置
75
+ GITHUB_REPO="mycompany/knowledge-base"
76
+ GITHUB_TOKEN="ghp_your_github_token_here"
77
+ ```
78
+
79
+ #### WebDAV备份
80
+
81
+ ```bash
82
+ # 环境变量设置
83
+ WEBDAV_URL="https://dav.example.com/backup"
84
+ WEBDAV_USER="backup_user"
85
+ WEBDAV_PASS="your_webdav_password"
86
+ ```
87
+
88
+ ## 使用指南
89
+
90
+ ### 1. 初次部署
91
+
92
+ ```bash
93
+ # 构建镜像
94
+ docker build -t anythingllm-backup .
95
+
96
+ # 运行容器
97
+ docker run -d \
98
+ --name anythingllm-wiki \
99
+ -p 3001:3001 \
100
+ -e GITHUB_REPO="your/repo" \
101
+ -e GITHUB_TOKEN="your_token" \
102
+ -e WEBDAV_URL="https://your-dav.com" \
103
+ -e WEBDAV_USER="user" \
104
+ -e WEBDAV_PASS="pass" \
105
+ -v anythingllm-data:/data \
106
+ anythingllm-backup
107
+ ```
108
+
109
+ ### 2. 数据管理
110
+
111
+ #### 文档上传
112
+ 1. 访问应用界面:`http://your-server:3001`
113
+ 2. 在工作空间中上传文档
114
+ 3. 系统自动建立向量索引
115
+
116
+ #### 智能问答
117
+ - 支持自然语言查询
118
+ - 自动上下文理解
119
+ - 多文档关联检索
120
+
121
+ ### 3. 监控与维护
122
+
123
+ #### 健康检查
124
+ ```bash
125
+ # 查看容器日志
126
+ docker logs anythingllm-wiki
127
+
128
+ # 检查备份状态
129
+ docker logs anythingllm-wiki | grep "Backup"
130
+ ```
131
+
132
+ #### 数据备份验证
133
+ ```bash
134
+ # 检查GitHub备份
135
+ curl -H "Authorization: token $GITHUB_TOKEN" \
136
+ https://api.github.com/repos/$GITHUB_REPO/commits
137
+
138
+ # 检查WebDAV备份
139
+ rclone ls webdav:your-backup-path
140
+ ```
141
+
142
+ ## 高级配置
143
+
144
+ ### 自定义备份频率
145
+
146
+ ```bash
147
+ # 每小时备份一次(默认)
148
+ BACKUP_INTERVAL=3600
149
+
150
+ # 每30分钟备份一次
151
+ BACKUP_INTERVAL=1800
152
+
153
+ # 每天备份一次
154
+ BACKUP_INTERVAL=86400
155
+ ```
156
+
157
+ ### 多备份源配置
158
+
159
+ 系统支持同时配置多个备份目标:
160
+
161
+ ```bash
162
+ # 同时启用GitHub和WebDAV备份
163
+ GITHUB_REPO="company/kb"
164
+ GITHUB_TOKEN="token123"
165
+ WEBDAV_URL="https://dav.company.com"
166
+ WEBDAV_USER="backup"
167
+ WEBDAV_PASS="secure123"
168
+ ```
169
+
170
+ ### 恢复优先级
171
+
172
+ 系统按以下优先级尝试恢复:
173
+ 1. **WebDAV备份**(首选,速度更快)
174
+ 2. **GitHub备份**(备选,版本控制)
175
+ 3. **全新启动**(无备份时)
176
+
177
+ ## 故障排除
178
+
179
+ ### 常见问题
180
+
181
+ #### 备份失败
182
+ ```bash
183
+ # 检查网络连接
184
+ ping github.com
185
+
186
+ # 验证凭据
187
+ curl -H "Authorization: token $GITHUB_TOKEN" \
188
+ https://api.github.com/user
189
+
190
+ # 查看详细日志
191
+ docker logs anythingllm-wiki --tail 100
192
+ ```
193
+
194
+ #### 恢复失败
195
+ ```bash
196
+ # 检查备份完整性
197
+ rclone check webdav:backup-path /tmp/check
198
+
199
+ # 手动恢复
200
+ docker run --rm -it \
201
+ -e GITHUB_REPO="your/repo" \
202
+ -e GITHUB_TOKEN="your_token" \
203
+ anythingllm-backup \
204
+ /app/scripts/restore.sh
205
+ ```
206
+
207
+ ### 性能优化
208
+
209
+ #### 内存优化
210
+ ```bash
211
+ # 增加容器内存限制
212
+ docker run -m 2g ...
213
+
214
+ # 调整备份并发
215
+ # 编辑backup.sh中的rsync参数
216
+ ```
217
+
218
+ #### 存储优化
219
+ ```bash
220
+ # 使用SSD存储类
221
+ - storage:
222
+ name: anythingllm-ssd
223
+ class: fast-ssd
224
+ size: 50Gi
225
+ ```
226
+
227
+ ## 安全建议
228
+
229
+ ### 访问控制
230
+ - 使用强密码和��牌
231
+ - 定期轮换凭据
232
+ - 启用两因素认证
233
+
234
+ ### 数据加密
235
+ - 使用HTTPS传输
236
+ - 加密存储敏感配置
237
+ - 定期备份加密密钥
238
+
239
+ ### 网络安全
240
+ - 限制容器网络访问
241
+ - 使用防火墙规则
242
+ - 监控异常活动
243
+
244
+ ## 贡献指南
245
+
246
+ 欢迎提交问题和改进建议:
247
+
248
+ 1. 在GitHub上创建Issue
249
+ 2. 提交详细的错误描述
250
+ 3. 提供复现步骤
251
+ 4. 附上相关日志片段
252
+
253
+ ## 许可证
254
+
255
+ 本项目采用开源许可证,详见LICENSE文件。
256
+
257
+ ---
258
+
259
+ *最后更新:2025年10月13日*
Dockerfile CHANGED
@@ -10,12 +10,14 @@ USER root
10
  # util-linux: 提供 flock 文件锁工具
11
  # sqlite3: 用于安全的数据库在线备份
12
  # rsync: 用于高效、安全地在目录间同步文件
 
13
  RUN apt-get update && apt-get install -y --no-install-recommends \
14
  git \
15
  rclone \
16
  util-linux \
17
  sqlite3 \
18
  rsync \
 
19
  && rm -rf /var/lib/apt/lists/*
20
 
21
  # 4. 创建脚本目录
 
10
  # util-linux: 提供 flock 文件锁工具
11
  # sqlite3: 用于安全的数据库在线备份
12
  # rsync: 用于高效、安全地在目录间同步文件
13
+ # curl: 用于健康检查
14
  RUN apt-get update && apt-get install -y --no-install-recommends \
15
  git \
16
  rclone \
17
  util-linux \
18
  sqlite3 \
19
  rsync \
20
+ curl \
21
  && rm -rf /var/lib/apt/lists/*
22
 
23
  # 4. 创建脚本目录
entrypoint.sh CHANGED
@@ -5,12 +5,17 @@ echo "[Entrypoint] Starting container setup..."
5
 
6
  # 步骤 1: 执行数据恢复脚本
7
  echo "[Entrypoint] Running data restoration script..."
8
- /app/scripts/restore.sh
 
 
9
 
10
  # 步骤 2: 在后台启动循环备份脚本
11
  echo "[Entrypoint] Starting background backup process..."
12
  /app/scripts/backup.sh &
13
 
14
- # 步骤 3: 启动 AnythingLLM 主应用
 
 
 
15
  echo "[Entrypoint] Handing over control to AnythingLLM server..."
16
  exec node /app/server/index.js
 
5
 
6
  # 步骤 1: 执行数据恢复脚本
7
  echo "[Entrypoint] Running data restoration script..."
8
+ if ! /app/scripts/restore.sh; then
9
+ echo "[Error] Data restoration failed, but continuing with startup..."
10
+ fi
11
 
12
  # 步骤 2: 在后台启动循环备份脚本
13
  echo "[Entrypoint] Starting background backup process..."
14
  /app/scripts/backup.sh &
15
 
16
+ # 步骤 3: 等待备份进程启动
17
+ sleep 2
18
+
19
+ # 步骤 4: 启动 AnythingLLM 主应用
20
  echo "[Entrypoint] Handing over control to AnythingLLM server..."
21
  exec node /app/server/index.js
scripts/backup.sh CHANGED
@@ -9,6 +9,7 @@ sleep 90
9
 
10
  # --- 主循环 ---
11
  while true; do
 
12
  flock -n /tmp/backup.lock bash -c '
13
  set -e
14
  echo "--- [$(date)] Starting Scheduled Backup ---"
@@ -25,7 +26,15 @@ while true; do
25
 
26
  # --- 步骤 2: 安全地创建数据库快照并复制到暂存区 ---
27
  echo "[Backup] Creating a safe snapshot of the SQLite database..."
 
 
 
 
28
  sqlite3 "${LIVE_DB_FILE}" ".backup '${STAGE_DIR}/anythingllm.db'"
 
 
 
 
29
 
30
  # --- 步骤 3: 将线上数据目录同步到暂存区 ---
31
  echo "[Backup] Syncing live data to the staging area..."
@@ -47,7 +56,7 @@ while true; do
47
  git init -b main
48
  git config --global user.email "backup-bot@example.com"
49
  git config --global user.name "Backup Bot"
50
- git remote add origin https://${GITHUB_TOKEN}@github.com/${GITHUB_REPO##*//github.com/}
51
  fi
52
  git add .
53
  if ! git diff-index --quiet HEAD --; then
@@ -70,6 +79,6 @@ while true; do
70
  fi
71
 
72
  echo "--- [$(date)] Backup Finished ---"
73
- '
74
  sleep ${BACKUP_INTERVAL:-3600}
75
  done
 
9
 
10
  # --- 主循环 ---
11
  while true; do
12
+ # 将环境变量传递给flock内部
13
  flock -n /tmp/backup.lock bash -c '
14
  set -e
15
  echo "--- [$(date)] Starting Scheduled Backup ---"
 
26
 
27
  # --- 步骤 2: 安全地创建数据库快照并复制到暂存区 ---
28
  echo "[Backup] Creating a safe snapshot of the SQLite database..."
29
+ if [ ! -f "${LIVE_DB_FILE}" ]; then
30
+ echo "[Error] Database file not found: ${LIVE_DB_FILE}"
31
+ exit 1
32
+ fi
33
  sqlite3 "${LIVE_DB_FILE}" ".backup '${STAGE_DIR}/anythingllm.db'"
34
+ if [ $? -ne 0 ]; then
35
+ echo "[Error] Failed to create database backup"
36
+ exit 1
37
+ fi
38
 
39
  # --- 步骤 3: 将线上数据目录同步到暂存区 ---
40
  echo "[Backup] Syncing live data to the staging area..."
 
56
  git init -b main
57
  git config --global user.email "backup-bot@example.com"
58
  git config --global user.name "Backup Bot"
59
+ git remote add origin https://${GITHUB_TOKEN}@github.com/${GITHUB_REPO}
60
  fi
61
  git add .
62
  if ! git diff-index --quiet HEAD --; then
 
79
  fi
80
 
81
  echo "--- [$(date)] Backup Finished ---"
82
+ ' "${BACKUP_INTERVAL:-3600}"
83
  sleep ${BACKUP_INTERVAL:-3600}
84
  done
scripts/restore.sh CHANGED
@@ -11,8 +11,13 @@ 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
@@ -33,7 +38,7 @@ fi
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}"
 
11
 
12
  # --- 步骤 1: 强制清理线上旧数据和暂存区 ---
13
  echo "[Restore] Forcing a clean slate..."
14
+ rm -rf "${LIVE_DATA_DIR}" "${LIVE_DB_FILE}" "${STAGE_DIR}" || {
15
+ echo "[Warning] Failed to clean some directories, continuing anyway..."
16
+ }
17
+ mkdir -p "${STAGE_DIR}" || {
18
+ echo "[Error] Failed to create staging directory"
19
+ exit 1
20
+ }
21
 
22
  # --- 步骤 2: 尝试从 WebDAV 恢复到暂存区 ---
23
  if [ -n "${WEBDAV_URL}" ]; then
 
38
  # --- 步骤 3: 如果 WebDAV 未成功,尝试从 GitHub 恢复 ---
39
  if [ -z "${RESTORE_SOURCE}" ] && [ -n "${GITHUB_REPO}" ]; then
40
  echo "[Restore] Attempting to restore from GitHub to staging area..."
41
+ if git clone https://${GITHUB_TOKEN}@github.com/${GITHUB_REPO} "${STAGE_DIR}"; then
42
  if [ -f "${STAGE_DIR}/anythingllm.db" ]; then
43
  echo "[Restore] GitHub restore to staging area successful."
44
  RESTORE_SOURCE="${STAGE_DIR}"