Skip to content

Commit b753ee9

Browse files
feat(wiki): 支持集群级可配置并发生成并修复分布式抢锁
用数据库 slot 和实例心跳在多实例间正确分配同时生成配额,默认并发为 1。 Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 664be86 commit b753ee9

38 files changed

Lines changed: 2103 additions & 276 deletions

‎compose.pgsql.yaml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ services:
5959
# Wiki 生成并行数 (默认: 5)
6060
- WIKI_PARALLEL_COUNT=5
6161

62+
# 集群同时生成的仓库 Wiki 数量 (默认: 1,多实例共享这个上限)
63+
- WIKI_MAX_CONCURRENT_GENERATIONS=1
64+
6265
# 多语言支持 (逗号分隔,如: en,zh,ja,ko,es,fr,de,pt-br)
6366
- WIKI_LANGUAGES=en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar
6467
volumes:

‎compose.yaml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
# Wiki 生成并行数 (默认: 5)
7070
- WIKI_PARALLEL_COUNT=${WIKI_PARALLEL_COUNT:-5}
7171

72+
# 集群同时生成的仓库 Wiki 数量 (默认: 1,多实例共享这个上限)
73+
- WIKI_MAX_CONCURRENT_GENERATIONS=${WIKI_MAX_CONCURRENT_GENERATIONS:-1}
74+
7275
# 多语言支持 (逗号分隔,如: en,zh,ja,ko,es,fr,de,pt-br)
7376
- WIKI_LANGUAGES=${WIKI_LANGUAGES:-en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar}
7477
volumes:

‎docs/content/docs/configuration/environment-variables.mdx‎

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import { Callout } from "fumadocs-ui/components/callout";
1717

1818
| 变量 | 必需 | 默认值 | 描述 |
1919
|---|---|---|---|
20-
| `DB_TYPE` | 否 | `sqlite` | 数据库后端类型。支持的值:`sqlite`、`postgresql` |
21-
| `CONNECTION_STRING` | 否 | `Data Source=/data/opendeepwiki.db` | 数据库连接字符串。格式取决于 `DB_TYPE` |
20+
| `DB_TYPE` | 否 | `sqlite` | 数据库后端类型。支持的值:`sqlite`、`postgresql`(等价于 `Database__Type`) |
21+
| `CONNECTION_STRING` | 否 | `Data Source=/data/opendeepwiki.db` | 数据库连接字符串(等价于 `ConnectionStrings__Default`) |
2222

2323
对于 PostgreSQL,使用 Npgsql 连接字符串格式:
2424

@@ -57,8 +57,10 @@ JWT 发行者、受众和过期时间通过 `appsettings.json` 的 `Jwt` 部分
5757
| 变量 | 必需 | 默认值 | 描述 |
5858
|---|---|---|---|
5959
| `CHAT_API_KEY` | 是 | — | 聊天 AI 服务的 API 密钥 |
60-
| `ENDPOINT` | 是 | `https://api.routin.ai/v1` | 聊天 AI 服务端点 URL |
61-
| `CHAT_REQUEST_TYPE` | 否 | `OpenAI` | AI 提供商类型:`OpenAI`、`AzureOpenAI`、`Anthropic`、`OpenAIResponses` |
60+
| `ENDPOINT` | 是 | `https://api.routin.ai/v1`(内置默认) | 聊天 AI 服务端点 URL |
61+
| `CHAT_REQUEST_TYPE` | 否 | `OpenAI` | AI 提供商类型:`OpenAI`、`AzureOpenAI`、`Anthropic`、`OpenAIResponses`、`DeepSeekOpenAI` |
62+
63+
这些变量配置用于生成文档目录(目录)结构的 AI 模型。
6264

6365
## Wiki 生成 — 目录
6466

@@ -69,7 +71,7 @@ JWT 发行者、受众和过期时间通过 `appsettings.json` 的 `Jwt` 部分
6971
| `WIKI_CATALOG_MODEL` | 否 | `gpt-4o` | 目录生成的模型名称 |
7072
| `WIKI_CATALOG_ENDPOINT` | 是 | — | 目录生成的 API 端点 |
7173
| `WIKI_CATALOG_API_KEY` | 是 | — | 目录生成的 API 密钥 |
72-
| `WIKI_CATALOG_REQUEST_TYPE` | 否 | `OpenAI` | 提供商类型:`OpenAI`、`AzureOpenAI`、`Anthropic`、`OpenAIResponses` |
74+
| `WIKI_CATALOG_REQUEST_TYPE` | 否 | `OpenAI` | 提供商类型:`OpenAI`、`AzureOpenAI`、`Anthropic`、`OpenAIResponses`、`DeepSeekOpenAI` |
7375

7476
## Wiki 生成 — 内容
7577

@@ -80,7 +82,7 @@ JWT 发行者、受众和过期时间通过 `appsettings.json` 的 `Jwt` 部分
8082
| `WIKI_CONTENT_MODEL` | 否 | `gpt-4o` | 内容生成的模型名称 |
8183
| `WIKI_CONTENT_ENDPOINT` | 是 | — | 内容生成的 API 端点 |
8284
| `WIKI_CONTENT_API_KEY` | 是 | — | 内容生成的 API 密钥 |
83-
| `WIKI_CONTENT_REQUEST_TYPE` | 否 | `OpenAI` | 提供商类型:`OpenAI`、`AzureOpenAI`、`Anthropic`、`OpenAIResponses` |
85+
| `WIKI_CONTENT_REQUEST_TYPE` | 否 | `OpenAI` | 提供商类型:`OpenAI`、`AzureOpenAI`、`Anthropic`、`OpenAIResponses`、`DeepSeekOpenAI` |
8486

8587
## Wiki 生成 — 翻译(可选)
8688

@@ -98,6 +100,7 @@ JWT 发行者、受众和过期时间通过 `appsettings.json` 的 `Jwt` 部分
98100
| 变量 | 必需 | 默认值 | 描述 |
99101
|---|---|---|---|
100102
| `WIKI_PARALLEL_COUNT` | 否 | `5` | 并行文档生成任务数。更高的值加快生成但使用更多资源 |
103+
| `WIKI_MAX_CONCURRENT_GENERATIONS` | 否 | `1` | 整个集群同时进行仓库 Wiki 生成的上限。多实例共享这个配额 |
101104
| `WIKI_LANGUAGES` | 否 | `en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar` | 多语言 wiki 生成的目标语言逗号分隔列表 |
102105
| `REPOSITORIES_DIRECTORY` | 否 | `/data` | 用于存储克隆仓库文件的目录 |
103106
| `WIKI_MAX_OUTPUT_TOKENS` | 否 | `32000` | 单次 AI 生成的最大输出 Token 数,防止回复过长 |
@@ -123,14 +126,36 @@ JWT 发行者、受众和过期时间通过 `appsettings.json` 的 `Jwt` 部分
123126
| `IncrementalUpdate:RetryBaseDelayMs` | `1000` | 重试之间的基础延迟(毫秒),使用指数退避 |
124127
| `IncrementalUpdate:ManualTriggerPriority` | `100` | 手动触发的更新任务的优先级值 |
125128

129+
## 仓库导入与存储
130+
131+
| 变量 | 必需 | 默认值 | 描述 |
132+
|---|---|---|---|
133+
| `REPOSITORIES_DIRECTORY` | 否 | `/data` | 用于存储克隆仓库文件的目录 |
134+
| `RepositoryAnalyzer__AllowedLocalPathRoots__0` | 否 | — | 允许导入的本地目录根路径白名单(本地目录导入功能必需) |
135+
| `RepositoryAnalyzer__LocalDirectoryImportMode` | 否 | `Copy` | 本地目录导入模式:`Copy`(复制)或 `Reference`(引用) |
136+
| `RepositoryAnalyzer__CleanupAfterProcessing` | 否 | `false` | 处理完成后是否清理工作区 |
137+
126138
## 功能标志
127139

128140
| 变量 | 必需 | 默认值 | 描述 |
129141
|---|---|---|---|
142+
| `MCP_ENABLED` | 否 | `true` | 是否启用 MCP 端点 |
130143
| `MCP_STREAMABLE` | 否 | — | 为外部 AI 服务配置 MCP Streamable HTTP 端点。格式:`serviceName=url,serviceName2=url2` |
131144

132145
详见 [MCP 协议](/docs/mcp)。
133146

147+
## Graphify 图谱产物(可选)
148+
149+
后端 Docker 镜像内置 `graphifyy` CLI。配置以下变量即可启用:
150+
151+
| 变量 | 描述 |
152+
|---|---|
153+
| `GRAPHIFY_BACKEND` | Graphify 后端类型 |
154+
| `GRAPHIFY_MODEL` | Graphify 使用的模型 |
155+
| `GRAPHIFY_OUTPUT_ROOT` | 产物输出目录(Docker 中默认 `/data/graphify-artifacts`) |
156+
| `GRAPHIFY_OPENAI_BASE_URL` / `GRAPHIFY_OPENAI_API_KEY` | OpenAI 兼容凭证 |
157+
| `OPENAI_BASE_URL` / `OPENAI_API_KEY`、`OLLAMA_BASE_URL` / `OLLAMA_MODEL` 等 | 各提供商回退凭证 |
158+
134159
## ASP.NET Core 运行时
135160

136161
| 变量 | 必需 | 默认值 | 描述 |
@@ -146,7 +171,8 @@ JWT 发行者、受众和过期时间通过 `appsettings.json` 的 `Jwt` 部分
146171
|---|---|---|---|
147172
| `NODE_ENV` | 否 | `production` | Node.js 环境模式 |
148173
| `API_PROXY_URL` | 是 | `http://localhost:5265` | 前端代理的后端 API URL。在 Docker 中,使用服务名称:`http://opendeepwiki:8080` |
149-
| `SITE_URL` | 否 | `http://localhost:3000` | 公开站点 URL,用于 sitemap、robots.txt、canonical URL 和社交分享元数据。生产环境应配置为实际访问域名 |
174+
| `SITE_URL` | 否 | `http://localhost:8090` | 公开站点 URL,用于 sitemap、robots.txt、canonical URL 和社交分享元数据。生产环境应配置为实际访问域名 |
175+
| `SITEMAP_REVALIDATE_SECONDS` | 否 | `3600` | sitemap 缓存 TTL(秒) |
150176

151177
## 示例:最小 `.env` 文件
152178

@@ -175,5 +201,5 @@ WIKI_LANGUAGES=en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar
175201
```
176202

177203
<Callout type="info">
178-
OpenDeepWiki 在启动时自动从项目根目录或应用目录加载 `.env` 文件。无需额外配置。
204+
OpenDeepWiki 在启动时自动从当前目录或应用程序目录加载 `.env` 文件(`Program.cs` 中的 `LoadEnvFile`)。无需额外配置。
179205
</Callout>

‎docs/content/docs/deployment/docker-compose.mdx‎

Lines changed: 68 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ import { Callout } from "fumadocs-ui/components/callout";
77

88
# Docker Compose 部署
99

10-
OpenDeepWiki 在项目根目录提供 `compose.yaml`,定义了两个服务:后端 API 和前端 web 应用。
10+
OpenDeepWiki 在项目根目录提供 `compose.yaml`,定义了两个服务:后端 API 和前端 web 应用。PostgreSQL 用户可直接使用 `compose.pgsql.yaml`。
1111

1212
## 服务架构
1313

14-
| 服务 | 端口 | 描述 |
15-
|---|---|---|
16-
| `opendeepwiki` | `8080` | 带有 AI 处理的 ASP.NET Core 后端 API |
17-
| `web` | `3000` | Next.js 前端应用 |
14+
| 服务 | 容器端口 | 默认宿主机映射 | 描述 |
15+
|---|---|---|---|
16+
| `opendeepwiki` | `8080` | `8081:8080` | 带有 AI 处理的 ASP.NET Core 后端 API |
17+
| `web` | `3000` | `8090:3000` | Next.js 前端应用 |
1818

19-
前端依赖于后端,并在其健康检查通过后才启动。
19+
> 端口映射以仓库中 `compose.yaml` 的实际内容为准,可按需修改。前端通过内部网络使用 `API_PROXY_URL=http://opendeepwiki:8080` 访问后端。
2020
2121
## 快速部署
2222

@@ -27,13 +27,15 @@ cd OpenDeepWiki
2727

2828
# 编辑 compose.yaml 中的环境变量(见下文)
2929
# 然后启动所有服务
30-
docker-compose up -d
30+
docker compose up -d
3131
```
3232

33-
在 `http://localhost:3000` 访问应用。
33+
在 `http://localhost:8090` 访问应用。
3434

3535
## 完整 compose.yaml 参考
3636

37+
以下是当前 `compose.yaml` 的关键结构(完整内容以文件为准):
38+
3739
```yaml
3840
services:
3941
opendeepwiki:
@@ -42,56 +44,57 @@ services:
4244
context: .
4345
dockerfile: src/OpenDeepWiki/Dockerfile
4446
ports:
45-
- "8080:8080"
47+
- "8081:8080"
4648
restart: unless-stopped
47-
healthcheck:
48-
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
49-
interval: 30s
50-
timeout: 10s
51-
retries: 3
52-
start_period: 15s
5349
environment:
5450
- ASPNETCORE_ENVIRONMENT=Production
5551
- URLS=http://+:8080
5652

5753
# 数据库
58-
- DB_TYPE=sqlite
59-
- CONNECTION_STRING=Data Source=/data/opendeepwiki.db
54+
- Database__Type=${DB_TYPE:-sqlite}
55+
- ConnectionStrings__Default=${CONNECTION_STRING:-Data Source=/data/opendeepwiki.db}
6056

6157
# JWT
62-
- JWT_SECRET_KEY=your-secret-key-change-in-production
58+
- JWT_SECRET_KEY=${JWT_SECRET_KEY:-OpenDeepWiki-Default-Secret-Key-Please-Change-In-Production-Environment-2024}
6359

64-
# 仓库存储
60+
# 仓库存储与本地目录导入白名单
6561
- REPOSITORIES_DIRECTORY=/data
62+
- RepositoryAnalyzer__AllowedLocalPathRoots__0=${LOCAL_IMPORT_ROOT:-/host/home/youruser}
6663

6764
# AI 服务(聊天)
68-
- CHAT_API_KEY=your-api-key
69-
- ENDPOINT=https://api.openai.com/v1
70-
- CHAT_REQUEST_TYPE=OpenAI
65+
- CHAT_API_KEY=${CHAT_API_KEY:-your-chat-api-key}
66+
- ENDPOINT=${ENDPOINT:-https://api.openai.com/v1}
67+
- CHAT_REQUEST_TYPE=${CHAT_REQUEST_TYPE:-OpenAI}
7168

7269
# Wiki 目录生成
73-
- WIKI_CATALOG_MODEL=gpt-4o
74-
- WIKI_CATALOG_ENDPOINT=https://api.openai.com/v1
75-
- WIKI_CATALOG_API_KEY=your-api-key
76-
- WIKI_CATALOG_REQUEST_TYPE=OpenAI
70+
- WIKI_CATALOG_MODEL=${WIKI_CATALOG_MODEL:-gpt-4o}
71+
- WIKI_CATALOG_ENDPOINT=${WIKI_CATALOG_ENDPOINT:-https://api.openai.com/v1}
72+
- WIKI_CATALOG_API_KEY=${WIKI_CATALOG_API_KEY:-your-catalog-api-key}
73+
- WIKI_CATALOG_REQUEST_TYPE=${WIKI_CATALOG_REQUEST_TYPE:-OpenAI}
7774

7875
# Wiki 内容生成
79-
- WIKI_CONTENT_MODEL=gpt-4o
80-
- WIKI_CONTENT_ENDPOINT=https://api.openai.com/v1
81-
- WIKI_CONTENT_API_KEY=your-api-key
82-
- WIKI_CONTENT_REQUEST_TYPE=OpenAI
76+
- WIKI_CONTENT_MODEL=${WIKI_CONTENT_MODEL:-gpt-4o}
77+
- WIKI_CONTENT_ENDPOINT=${WIKI_CONTENT_ENDPOINT:-https://api.openai.com/v1}
78+
- WIKI_CONTENT_API_KEY=${WIKI_CONTENT_API_KEY:-your-content-api-key}
79+
- WIKI_CONTENT_REQUEST_TYPE=${WIKI_CONTENT_REQUEST_TYPE:-OpenAI}
8380

8481
# Wiki 翻译(可选,回退到内容配置)
8582
# - WIKI_TRANSLATION_MODEL=gpt-4o
8683
# - WIKI_TRANSLATION_ENDPOINT=https://api.openai.com/v1
8784
# - WIKI_TRANSLATION_API_KEY=your-api-key
8885
# - WIKI_TRANSLATION_REQUEST_TYPE=OpenAI
8986

90-
# 并行生成数量
91-
- WIKI_PARALLEL_COUNT=5
92-
93-
# 多语言支持(逗号分隔)
94-
- WIKI_LANGUAGES=en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar
87+
# 并行生成数量 / 多语言支持
88+
- WIKI_PARALLEL_COUNT=${WIKI_PARALLEL_COUNT:-5}
89+
- WIKI_MAX_CONCURRENT_GENERATIONS=${WIKI_MAX_CONCURRENT_GENERATIONS:-1}
90+
- WIKI_LANGUAGES=${WIKI_LANGUAGES:-en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar}
91+
92+
# Graphify 图谱产物(可选)
93+
- GRAPHIFY_BACKEND=${GRAPHIFY_BACKEND:-}
94+
- GRAPHIFY_MODEL=${GRAPHIFY_MODEL:-}
95+
- GRAPHIFY_OUTPUT_ROOT=/data/graphify-artifacts
96+
- GRAPHIFY_OPENAI_BASE_URL=${GRAPHIFY_OPENAI_BASE_URL:-}
97+
- GRAPHIFY_OPENAI_API_KEY=${GRAPHIFY_OPENAI_API_KEY:-}
9598
volumes:
9699
- ./data:/data
97100

@@ -101,23 +104,25 @@ services:
101104
context: ./web
102105
dockerfile: Dockerfile
103106
ports:
104-
- "3000:3000"
107+
- "8090:3000"
105108
restart: unless-stopped
106-
depends_on:
107-
opendeepwiki:
108-
condition: service_healthy
109109
environment:
110110
- NODE_ENV=production
111-
- SITE_URL=${SITE_URL:-http://localhost:3000}
111+
- SITE_URL=${SITE_URL:-http://localhost:8090}
112112
- API_PROXY_URL=http://opendeepwiki:8080
113113
```
114114
115+
<Callout type="info">
116+
根目录提供 `.env.example`,可复制为 `.env` 后通过 `${VAR:-default}` 插值注入配置,无需直接修改 `compose.yaml`。
117+
</Callout>
118+
115119
## 环境变量
116120

117121
### 必需变量
118122

119123
| 变量 | 描述 | 示例 |
120124
|---|---|---|
125+
| `JWT_SECRET_KEY` | JWT 签名密钥(生产环境必须更改) | 长随机字符串 |
121126
| `CHAT_API_KEY` | 聊天 AI 服务的 API 密钥 | `sk-...` |
122127
| `ENDPOINT` | 聊天 AI 服务端点 | `https://api.openai.com/v1` |
123128
| `WIKI_CATALOG_API_KEY` | 目录生成的 API 密钥 | `sk-...` |
@@ -131,13 +136,17 @@ services:
131136
|---|---|---|
132137
| `DB_TYPE` | `sqlite` | 数据库类型:`sqlite` 或 `postgresql` |
133138
| `CONNECTION_STRING` | `Data Source=/data/opendeepwiki.db` | 数据库连接字符串 |
134-
| `JWT_SECRET_KEY` | 内置默认值 | JWT 签名密钥(生产环境需更改) |
135139
| `WIKI_CATALOG_MODEL` | `gpt-4o` | 目录生成模型 |
136140
| `WIKI_CONTENT_MODEL` | `gpt-4o` | 内容生成模型 |
137-
| `CHAT_REQUEST_TYPE` | `OpenAI` | AI 提供商类型 |
141+
| `CHAT_REQUEST_TYPE` | `OpenAI` | AI 提供商类型:`OpenAI`、`AzureOpenAI`、`OpenAIResponses`、`Anthropic`、`DeepSeekOpenAI` |
138142
| `WIKI_PARALLEL_COUNT` | `5` | 并行 wiki 生成任务数 |
143+
| `WIKI_MAX_CONCURRENT_GENERATIONS` | `1` | 集群同时生成的仓库 Wiki 数量,多实例共享 |
139144
| `WIKI_LANGUAGES` | `en,zh,zh-tw,ja,ko,es,fr,de,pt-br,pl,ru,ar` | 支持的语言(逗号分隔) |
140-
| `SITE_URL` | `http://localhost:3000` | 公开站点 URL,用于 sitemap、robots.txt、canonical URL 和社交分享元数据 |
145+
| `SITE_URL` | `http://localhost:8090` | 公开站点 URL,用于 sitemap、robots.txt、canonical URL 和社交分享元数据 |
146+
| `SITEMAP_REVALIDATE_SECONDS` | `3600` | sitemap 缓存 TTL(秒) |
147+
| `LOCAL_IMPORT_ROOT` | — | 允许导入的本地目录根路径(本地目录导入白名单) |
148+
| `MCP_ENABLED` | `true` | 是否启用 MCP 端点 |
149+
| `GRAPHIFY_*` 系列 | — | Graphify 图谱产物配置(Backend、Model、OpenAI 凭证等) |
141150

142151
<Callout type="warn">
143152
在生产环境中始终更改 `JWT_SECRET_KEY`。默认密钥仅用于开发。
@@ -163,7 +172,7 @@ volumes:
163172

164173
## 健康检查
165174

166-
后端包含内置的健康检查端点:
175+
后端内置健康检查端点 `/health`。`compose.pgsql.yaml` 中配置了健康检查与依赖顺序:
167176

168177
```yaml
169178
healthcheck:
@@ -174,48 +183,40 @@ healthcheck:
174183
start_period: 15s
175184
```
176185

177-
前端在此健康检查通过后才启动,确保 API 已准备好接受请求。
186+
PostgreSQL 编排中,后端在数据库 `service_healthy` 后才启动。SQLite 默认编排未启用 `depends_on` 条件,前端启动失败时检查后端是否就绪即可。
178187

179188
## 构建镜像
180189

181190
```bash
182191
# 构建所有镜像
183-
docker-compose build
192+
docker compose build
184193
185-
# 为特定架构构建
186-
docker-compose build --build-arg ARCH=arm64 # Apple Silicon、AWS Graviton
187-
docker-compose build --build-arg ARCH=amd64 # Intel/AMD x86_64
194+
# 为特定架构构建(通过 Makefile)
195+
make build-arm # ARM64:Apple Silicon、AWS Graviton
196+
make build-amd # AMD64:Intel/AMD x86_64
188197
189198
# 构建单个服务
190-
docker-compose build opendeepwiki # 仅后端
191-
docker-compose build web # 仅前端
192-
```
193-
194-
如果已安装 `make`:
195-
196-
```bash
197-
make build # 构建全部
198-
make build-arm # ARM 架构
199-
make build-amd # AMD 架构
199+
docker compose build opendeepwiki # 仅后端
200+
docker compose build web # 仅前端
200201
```
201202

202203
## 常见操作
203204

204205
```bash
205206
# 后台启动
206-
docker-compose up -d
207+
docker compose up -d
207208
208209
# 查看日志
209-
docker-compose logs -f
210+
docker compose logs -f
210211
211212
# 查看特定服务的日志
212-
docker-compose logs -f opendeepwiki
213+
docker compose logs -f opendeepwiki
213214
214215
# 重启服务
215-
docker-compose restart
216+
docker compose restart
216217
217218
# 停止服务
218-
docker-compose down
219+
docker compose down
219220
```
220221

221222
## 一键部署
@@ -232,14 +233,14 @@ docker-compose down
232233

233234
- 验证 AI API 密钥有效且端点可达
234235
- 检查 `CONNECTION_STRING` 与你的数据库类型匹配
235-
- 查看日志:`docker-compose logs opendeepwiki`
236+
- 查看日志:`docker compose logs opendeepwiki`
236237

237238
### 前端显示连接错误
238239

239-
- 确保后端健康检查通过:`docker-compose ps`
240+
- 确保后端已启动:`docker compose ps`
240241
- `API_PROXY_URL` 必须指向后端容器:`http://opendeepwiki:8080`
241242

242243
### 磁盘空间不足
243244

244245
- 克隆的仓库存储在 `./data` 中。通过 web UI 或 API 清理旧仓库
245-
- 对于大型部署,考虑从 SQLite 切换到 [PostgreSQL](/docs/deployment/database)
246+
- 对于大型部署,考虑从 SQLite 切换到 [PostgreSQL](/docs/deployment/database)(可直接使用 `compose.pgsql.yaml`)

0 commit comments

Comments
 (0)