@lobehub/lobehub 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.github/ISSUE_TEMPLATE/1_bug_report.yml +0 -11
  2. package/CHANGELOG.md +51 -0
  3. package/README.md +9 -13
  4. package/README.zh-CN.md +6 -8
  5. package/apps/desktop/Development.md +1 -1
  6. package/changelog/v2.json +18 -0
  7. package/docker-compose/local/docker-compose.yml +2 -2
  8. package/docker-compose/local/grafana/docker-compose.yml +3 -3
  9. package/docker-compose/local/logto/docker-compose.yml +3 -4
  10. package/docker-compose/local/zitadel/.env.example +3 -4
  11. package/docker-compose/local/zitadel/.env.zh-CN.example +1 -2
  12. package/docker-compose/local/zitadel/docker-compose.yml +3 -3
  13. package/docker-compose/production/grafana/docker-compose.yml +3 -3
  14. package/docker-compose/production/logto/.env.example +7 -9
  15. package/docker-compose/production/logto/.env.zh-CN.example +7 -9
  16. package/docker-compose/production/logto/docker-compose.yml +3 -3
  17. package/docker-compose/production/zitadel/.env.example +4 -6
  18. package/docker-compose/production/zitadel/.env.zh-CN.example +3 -5
  19. package/docker-compose/production/zitadel/docker-compose.yml +3 -3
  20. package/docs/development/basic/folder-structure.mdx +1 -2
  21. package/docs/development/basic/folder-structure.zh-CN.mdx +1 -2
  22. package/docs/self-hosting/advanced/auth/legacy.mdx +1 -1
  23. package/docs/self-hosting/advanced/auth/legacy.zh-CN.mdx +1 -1
  24. package/docs/self-hosting/advanced/auth/nextauth-to-betterauth.mdx +4 -0
  25. package/docs/self-hosting/advanced/auth/nextauth-to-betterauth.zh-CN.mdx +4 -0
  26. package/docs/self-hosting/advanced/auth/providers/casdoor.mdx +8 -0
  27. package/docs/self-hosting/advanced/auth/providers/casdoor.zh-CN.mdx +8 -0
  28. package/docs/self-hosting/advanced/auth.mdx +28 -1
  29. package/docs/self-hosting/advanced/auth.zh-CN.mdx +29 -2
  30. package/docs/self-hosting/advanced/upstream-sync.mdx +5 -5
  31. package/docs/self-hosting/advanced/upstream-sync.zh-CN.mdx +5 -5
  32. package/docs/self-hosting/environment-variables/auth.mdx +2 -334
  33. package/docs/self-hosting/environment-variables/auth.zh-CN.mdx +2 -307
  34. package/docs/self-hosting/environment-variables/basic.mdx +1 -1
  35. package/docs/self-hosting/environment-variables/basic.zh-CN.mdx +1 -1
  36. package/docs/self-hosting/environment-variables.mdx +1 -1
  37. package/docs/self-hosting/platform/docker-compose.mdx +837 -90
  38. package/docs/self-hosting/platform/docker-compose.zh-CN.mdx +809 -84
  39. package/docs/self-hosting/platform/docker.mdx +110 -111
  40. package/docs/self-hosting/platform/docker.zh-CN.mdx +103 -151
  41. package/docs/self-hosting/{server-database → platform}/dokploy.mdx +2 -2
  42. package/docs/self-hosting/{server-database → platform}/dokploy.zh-CN.mdx +2 -2
  43. package/docs/self-hosting/platform/repocloud.mdx +11 -10
  44. package/docs/self-hosting/platform/repocloud.zh-CN.mdx +13 -11
  45. package/docs/self-hosting/platform/sealos.mdx +79 -13
  46. package/docs/self-hosting/platform/sealos.zh-CN.mdx +92 -11
  47. package/docs/self-hosting/platform/vercel.mdx +323 -19
  48. package/docs/self-hosting/platform/vercel.zh-CN.mdx +318 -24
  49. package/docs/self-hosting/platform/zeabur.mdx +41 -37
  50. package/docs/self-hosting/platform/zeabur.zh-CN.mdx +34 -39
  51. package/docs/self-hosting/server-database.mdx +6 -6
  52. package/docs/self-hosting/server-database.zh-CN.mdx +5 -5
  53. package/locales/en-US/setting.json +2 -0
  54. package/locales/zh-CN/setting.json +2 -0
  55. package/package.json +2 -2
  56. package/packages/agent-runtime/src/agents/GeneralChatAgent.ts +18 -14
  57. package/packages/agent-runtime/src/types/generalAgent.ts +5 -4
  58. package/packages/types/src/user/preference.ts +2 -2
  59. package/scripts/_shared/checkDeprecatedAuth.js +16 -0
  60. package/src/features/ChatInput/ActionBar/Params/Controls.tsx +17 -1
  61. package/src/features/ModelSelect/index.tsx +1 -1
  62. package/src/libs/next/proxy/createRouteMatcher.test.ts +0 -8
  63. package/src/libs/trpc/middleware/userAuth.test.ts +0 -6
  64. package/src/locales/default/setting.ts +3 -0
  65. package/src/proxy.ts +0 -1
  66. package/src/server/routers/async/__tests__/caller.test.ts +2 -2
  67. package/src/server/routers/lambda/config/index.test.ts +0 -6
  68. package/src/server/services/agentRuntime/AgentRuntimeService.ts +4 -2
  69. package/src/store/chat/slices/aiChat/actions/streamingExecutor.ts +3 -0
  70. package/src/store/chat/slices/message/selectors/displayMessage.test.ts +21 -0
  71. package/src/store/chat/slices/message/selectors/displayMessage.ts +7 -2
  72. package/docs/self-hosting/platform/alibaba-cloud.mdx +0 -28
  73. package/docs/self-hosting/platform/alibaba-cloud.zh-CN.mdx +0 -25
  74. package/docs/self-hosting/platform/btpanel.mdx +0 -48
  75. package/docs/self-hosting/platform/btpanel.zh-CN.mdx +0 -51
  76. package/docs/self-hosting/platform/netlify.mdx +0 -91
  77. package/docs/self-hosting/platform/netlify.zh-CN.mdx +0 -86
  78. package/docs/self-hosting/platform/railway.mdx +0 -29
  79. package/docs/self-hosting/platform/railway.zh-CN.mdx +0 -29
  80. package/docs/self-hosting/platform/tencentcloud-lighthouse.mdx +0 -29
  81. package/docs/self-hosting/platform/tencentcloud-lighthouse.zh-CN.mdx +0 -26
  82. package/docs/self-hosting/server-database/docker-compose.mdx +0 -879
  83. package/docs/self-hosting/server-database/docker-compose.zh-CN.mdx +0 -854
  84. package/docs/self-hosting/server-database/docker.mdx +0 -154
  85. package/docs/self-hosting/server-database/docker.zh-CN.mdx +0 -153
  86. package/docs/self-hosting/server-database/netlify.mdx +0 -13
  87. package/docs/self-hosting/server-database/netlify.zh-CN.mdx +0 -16
  88. package/docs/self-hosting/server-database/railway.mdx +0 -13
  89. package/docs/self-hosting/server-database/railway.zh-CN.mdx +0 -15
  90. package/docs/self-hosting/server-database/repocloud.mdx +0 -33
  91. package/docs/self-hosting/server-database/repocloud.zh-CN.mdx +0 -32
  92. package/docs/self-hosting/server-database/sealos.mdx +0 -97
  93. package/docs/self-hosting/server-database/sealos.zh-CN.mdx +0 -112
  94. package/docs/self-hosting/server-database/vercel.mdx +0 -344
  95. package/docs/self-hosting/server-database/vercel.zh-CN.mdx +0 -337
  96. package/docs/self-hosting/server-database/zeabur.mdx +0 -76
  97. package/docs/self-hosting/server-database/zeabur.zh-CN.mdx +0 -67
@@ -1,15 +1,14 @@
1
1
  ---
2
2
  title: 通过 Docker Compose 部署 LobeHub
3
- description: 学习如何使用 Docker Compose 部署 LobeHub 服务,包括安装 Docker 容器环境和自动更新脚本设置。
3
+ description: 学习如何使用 Docker Compose 部署 LobeHub 服务,包括各种服务的配置教程。
4
4
  tags:
5
5
  - Docker Compose
6
6
  - LobeHub
7
7
  - Docker 容器
8
- - 自动更新脚本
9
8
  - 部署指引
10
9
  ---
11
10
 
12
- # Docker Compose 部署指引
11
+ # 使用 Docker Compose 部署 LobeHub 服务端数据库版本
13
12
 
14
13
  <div style={{display:"flex", gap: 4}}>
15
14
  [![][docker-release-shield]][docker-release-link]
@@ -19,111 +18,837 @@ tags:
19
18
  [![][docker-pulls-shield]][docker-pulls-link]
20
19
  </div>
21
20
 
22
- 我们提供了 [Docker 镜像](https://hub.docker.com/r/lobehub/lobe-chat) ,供你在自己的私有设备上部署 LobeHub 服务。
21
+ ## 快速启动
22
+
23
+ <Callout type="info">
24
+ **系统兼容性说明**
25
+
26
+ - 支持 Unix 环境(Linux/macOS)的一键部署
27
+
28
+ - Windows 用户需通过 [WSL 2](https://aka.ms/wsl) 运行
29
+
30
+ - 一键启动脚本为首次部署专用,非首次部署请参考 [自定义部署](#自定义部署) 章节
31
+
32
+ - 端口占用检查:确保 `3210`、`8000`、`9000`、`9001` 端口可用
33
+ </Callout>
34
+
35
+ 执行以下命令初始化部署环境,目录 `lobe-chat-db` 将用于存放你的配置文件和后续的数据库文件。
36
+
37
+ ```sh
38
+ mkdir lobe-chat-db && cd lobe-chat-db
39
+ ```
40
+
41
+ 获取并执行部署脚本:
42
+
43
+ ```sh
44
+ bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN
45
+ ```
46
+
47
+ 脚本支持以下部署模式,请根据你的需求选择相应的模式,并继续阅读文档的剩余部分。
48
+
49
+ - [本地模式(默认)](#本地模式):仅能在本地访问,不支持局域网 / 公网访问,适用于初次体验;
50
+ - [端口模式](#端口模式):支持局域网 / 公网的 `http` 访问,适用于无域名或内部办公场景使用;
51
+ - [域名模式](#域名模式):支持局域网 / 公网在使用反向代理下的 `http/https` 访问,适用于个人或团队日常使用;
52
+
53
+ <Callout type="info">
54
+ 在脚本的选项提示 `(选项1/选项2)[选项1]` 中:`(选项1 / 选项2)`
55
+ 代表可以选择的选项,`[选项1]`代表默认选项,直接回车即可选择默认选项。
56
+ </Callout>
57
+
58
+ ### 本地模式
23
59
 
24
60
  <Steps>
25
- ### 安装 Docker 容器环境
26
-
27
- (如果已安装,请跳过此步)
28
-
29
- <Tabs items={['Ubuntu', 'CentOS']}>
30
- <Tab>
31
- ```fish
32
- $ apt install docker.io
33
- ```
34
- </Tab>
35
-
36
- <Tab>
37
- ```fish
38
- $ yum install docker
39
- ```
40
- </Tab>
41
- </Tabs>
42
-
43
- ### 运行 Docker Compose 部署指令
44
-
45
- 使用 `docker-compose` 时配置文件如下:
46
-
47
- ```yml
48
- version: '3.8'
49
-
50
- services:
51
- lobe-chat:
52
- image: lobehub/lobe-chat
53
- container_name: lobe-chat
54
- restart: always
55
- ports:
56
- - '3210:3210'
57
- environment:
58
- OPENAI_API_KEY: sk-xxxx
59
- OPENAI_PROXY_URL: https://api-proxy.com/v1
61
+ ### 在交互式脚本中完成剩余配置
62
+
63
+ 持续回车采用默认配置。
64
+
65
+ ### 查看配置生成报告
66
+
67
+ 你需要在脚本运行结束后查看配置生成报告,包括 Casdoor 管理员的帐号、用户账号和它们的初始登录密码。
68
+
69
+ <Callout type="warning">请使用用户账号登录 LobeHub,管理员账号仅用于管理 Casdoor。</Callout>
70
+
71
+ ```log
72
+ 安全密钥生成结果如下:
73
+ LobeHub:
74
+ - URL: http://localhost:3210
75
+ - Username: user
76
+ - Password: c66f8c
77
+ Casdoor:
78
+ - URL: http://localhost:8000
79
+ - Username: admin
80
+ - Password: c66f8c
81
+ Minio:
82
+ - URL: http://localhost:9000
83
+ - Username: admin
84
+ - Password: 8c82ea41
60
85
  ```
61
86
 
62
- 运行以下命令启动 Lobe Chat 服务:
87
+ ### 启动 Docker
63
88
 
64
- ```bash
65
- $ docker-compose up -d
89
+ ```sh
90
+ docker compose up -d
66
91
  ```
67
92
 
68
- ### Crontab 自动更新脚本(可选)
93
+ ### 检查日志
69
94
 
70
- 类似地,你可以使用以下脚本来自动更新 Lobe Chat,使用 `Docker Compose` 时,环境变量无需额外配置。
95
+ ```sh
96
+ docker logs -f lobe-chat
97
+ ```
71
98
 
72
- ```bash
73
- #!/bin/bash
74
- # auto-update-lobe-chat.sh
99
+ 如果你在容器中看到了以下日志,则说明已经启动成功:
75
100
 
76
- # Set proxy (optional)
77
- export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
101
+ ```log
102
+ [Database] Start to migration...
103
+ ✅ database migration pass.
104
+ -------------------------------------
105
+ ▲ Next.js 14.x.x
106
+ - Local: http://localhost:3210
107
+ - Network: http://0.0.0.0:3210
108
+
109
+ ✓ Starting...
110
+ ✓ Ready in 95ms
111
+ ```
78
112
 
79
- # Pull the latest image and store the output in a variable
80
- output=$(docker pull lobehub/lobe-chat:latest 2>&1)
113
+ ### 访问应用
81
114
 
82
- # Check if the pull command was executed successfully
83
- if [ $? -ne 0 ]; then
84
- exit 1
85
- fi
115
+ 通过 [http://localhost:3210](http://localhost:3210) 访问你的 LobeHub 服务。应用的账号密码在步骤`2`的报告中。
116
+ </Steps>
86
117
 
87
- # Check if the output contains a specific string
88
- echo "$output" | grep -q "Image is up to date for lobehub/lobe-chat:latest"
118
+ ### 端口模式
89
119
 
90
- # If the image is already up to date, do nothing
91
- if [ $? -eq 0 ]; then
92
- exit 0
93
- fi
120
+ <Steps>
121
+ ### 在交互式脚本中完成剩余配置
94
122
 
95
- echo "Detected Lobe-Chat update"
123
+ 在端口模式中,你需要根据脚本提示完成:
96
124
 
97
- # Remove the old container
98
- echo "Removed: $(docker rm -f Lobe-Chat)"
125
+ - 服务器 IP 地址设置:以便局域网 / 公网访问。
126
+ - 安全密钥重新生成:我们强烈建议你重新生成安全密钥,如果你缺少脚本所需的密钥生成库,我们建议你参考 [自定义部署](#自定义部署) 章节对密钥进行修改。
99
127
 
100
- # You may need to navigate to the directory where `docker-compose.yml` is located first
101
- # cd /path/to/docker-compose-folder
128
+ ### 查看配置生成报告
102
129
 
103
- # Run the new container
104
- echo "Started: $(docker-compose up)"
130
+ 你需要在脚本运行结束后查看配置生成报告,包括 Casdoor 管理员的帐号、用户账号和它们的初始登录密码。
105
131
 
106
- # Print the update time and version
107
- echo "Update time: $(date)"
108
- echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
132
+ <Callout type="warning">请使用用户账号登录 LobeHub,管理员账号仅用于管理 Casdoor。</Callout>
109
133
 
110
- # Clean up unused images
111
- docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
112
- echo "Removed old images."
134
+ ```log
135
+ 安全密钥生成结果如下:
136
+ LobeHub:
137
+ - URL: http://your_server_ip:3210
138
+ - Username: user
139
+ - Password: 837e26
140
+ Casdoor:
141
+ - URL: http://your_server_ip:8000
142
+ - Username: admin
143
+ - Password: 837e26
144
+ Minio:
145
+ - URL: http://your_server_ip:9000
146
+ - Username: admin
147
+ - Password: dbac8440
113
148
  ```
114
149
 
115
- This script can also be used in Crontab, but ensure that your Crontab can find the correct Docker command. It is recommended to use absolute paths.
150
+ ### 启动 Docker
116
151
 
117
- Configure Crontab to execute the script every 5 minutes:
152
+ ```sh
153
+ docker compose up -d
154
+ ```
118
155
 
119
- ```bash
120
- */5 * * * * /path/to/auto-update-lobe-chat.sh >> /path/to/auto-update-lobe-chat.log 2>&1
156
+ ### 检查日志
157
+
158
+ ```sh
159
+ docker logs -f lobe-chat
121
160
  ```
161
+
162
+ 如果你在容器中看到了以下日志,则说明已经启动成功:
163
+
164
+ ```log
165
+ [Database] Start to migration...
166
+ ✅ database migration pass.
167
+ -------------------------------------
168
+ ▲ Next.js 14.x.x
169
+ - Local: http://your_server_ip:3210
170
+ - Network: http://0.0.0.0:3210
171
+ ✓ Starting...
172
+ ✓ Ready in 95ms
173
+ ```
174
+
175
+ ### 访问应用
176
+
177
+ 你可以通过 `http://your_server_ip:3210` 访问你的 LobeHub 服务。应用的账号密码在步骤`2`的报告中。
178
+
179
+ <Callout type="warning">
180
+ 请注意,如果你的服务能够被公网访问,我们强烈建议你参考 [文档](https://lobehub.com/zh/docs/self-hosting/advanced/auth/providers/casdoor) 关闭注册功能。
181
+ </Callout>
182
+ </Steps>
183
+
184
+ ### 域名模式
185
+
186
+ <Steps>
187
+ ### 完成反向代理配置
188
+
189
+ 在域名模式中,你需要完成反向代理配置,并确保局域网 / 公网能访问到以下服务。请使用反向代理将以下服务端口映射到域名:
190
+
191
+ | 域名 | 反代端口 | 是否必选 |
192
+ | ---------------------- | ------ | ---- |
193
+ | `lobe.example.com` | `3210` | 必选 |
194
+ | `auth.example.com` | `8000` | 必选 |
195
+ | `minio.example.com` | `9000` | 必选 |
196
+ | `minio-ui.example.com` | `9001` | |
197
+
198
+ <Callout type="important">
199
+ 如果你使用如 [宝塔面板](https://www.bt.cn/) 等面板软件进行反向代理配置,
200
+ 你需要确保其对 `.well-known` 路径的请求不进行拦截,以确保 Casdoor 的 OAuth2 配置能够正常工作。
201
+ 这里提供一份针对 Casdoor 服务的 Nginx server 块的路径白名单配置:
202
+
203
+ ```nginx
204
+ location /.well-known/openid-configuration {
205
+ proxy_pass http://localhost:8000; # 转发到 localhost:8000
206
+ proxy_set_header Host $host; # 保留原始主机头
207
+ proxy_set_header X-Real-IP $remote_addr; # 保留客户端真实IP
208
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 保留转发的IP
209
+ proxy_set_header X-Forwarded-Proto $scheme; # 保留请求协议
210
+ }
211
+ ```
212
+
213
+ ⚠️ 请不要在此类面板软件的反向代理设置中开启任何形式的缓存,以免影响服务的正常运行。
214
+ 详情请见 [https://github.com/lobehub/lobe-chat/discussions/5986](https://github.com/lobehub/lobe-chat/discussions/5986)
215
+ </Callout>
216
+
217
+ ### 在交互式脚本中完成剩余配置
218
+
219
+ 在域名模式中,你需要根据脚本提示完成:
220
+
221
+ - LobeHub 服务的域名设置:`lobe.example.com`
222
+ - Minio 服务的域名设置:`minio.example.com`
223
+ - Casdoor 服务的域名设置:`auth.example.com`
224
+ - 选择访问协议:`http` 或 `https`
225
+ - 安全密钥重新生成:我们强烈建议你重新生成安全密钥,如果你缺少脚本所需的密钥生成库,我们建议你参考 [自定义部署](#自定义部署) 章节对密钥进行修改。
226
+
227
+ <Callout type="warning">
228
+ 以下问题可能导致你的服务无法正常访问:
229
+
230
+ - 此处的域名配置需要与步骤`1`中的反向代理配置保持一致。
231
+
232
+ - 如果你使用 Cloudflare 的域名解析服务并开启了 `全程代理`,请使用 `https` 协议。
233
+
234
+ - 如果你使用了 HTTPS 协议,请确保你的域名证书已经正确配置,一键部署默认不支持自签发证书。
235
+ </Callout>
236
+
237
+ ### 查看配置生成报告
238
+
239
+ 你需要在脚本运行结束后查看配置生成报告,包括 Casdoor 管理员的初始登录密码。
240
+
241
+ <Callout type="warning">请使用用户账号登录 LobeHub,管理员账号仅用于管理 Casdoor。</Callout>
242
+
243
+ ```log
244
+ 安全密钥生成结果如下:
245
+ LobeHub:
246
+ - URL: https://lobe.example.com
247
+ - Username: user
248
+ - Password: 837e26
249
+ Casdoor:
250
+ - URL: https://auth.example.com
251
+ - Username: admin
252
+ - Password: 837e26
253
+ Minio:
254
+ - URL: https://minio.example.com
255
+ - Username: admin
256
+ - Password: dbac8440
257
+ ```
258
+
259
+ ### 启动 Docker
260
+
261
+ ```sh
262
+ docker compose up -d
263
+ ```
264
+
265
+ ### 检查日志
266
+
267
+ ```sh
268
+ docker logs -f lobe-chat
269
+ ```
270
+
271
+ 如果你在容器中看到了以下日志,则说明已经启动成功:
272
+
273
+ ```log
274
+ [Database] Start to migration...
275
+ ✅ database migration pass.
276
+ -------------------------------------
277
+ ▲ Next.js 14.x.x
278
+ - Local: https://localhost:3210
279
+ - Network: http://0.0.0.0:3210
280
+ ✓ Starting...
281
+ ✓ Ready in 95ms
282
+ ```
283
+
284
+ ### 访问应用
285
+
286
+ 你可以通过 `https://lobe.example.com` 访问你的 LobeHub 服务。应用的账号密码在步骤`3`的报告中。
287
+
288
+ <Callout type="warning">
289
+ 请注意,如果你的服务能够被公网访问,我们强烈建议你参考 [文档](https://lobehub.com/zh/docs/self-hosting/advanced/auth/providers/casdoor) 关闭注册功能。
290
+ </Callout>
122
291
  </Steps>
123
292
 
124
- [docker-pulls-link]: https://hub.docker.com/r/lobehub/lobe-chat
125
- [docker-pulls-shield]: https://img.shields.io/docker/pulls/lobehub/lobe-chat?color=45cc11&labelColor=black&style=flat-square
126
- [docker-release-link]: https://hub.docker.com/r/lobehub/lobe-chat
127
- [docker-release-shield]: https://img.shields.io/docker/v/lobehub/lobe-chat?color=369eff&label=docker&labelColor=black&logo=docker&logoColor=white&style=flat-square&sort=semver
128
- [docker-size-link]: https://hub.docker.com/r/lobehub/lobe-chat
129
- [docker-size-shield]: https://img.shields.io/docker/image-size/lobehub/lobe-chat?color=369eff&labelColor=black&style=flat-square&sort=semver
293
+ ## 自定义部署
294
+
295
+ 该章节主要为你介绍在不同的网络环境下自定义部署 LobeHub 服务必须要修改的配置。在开始前,你可以先下载 [Docker Compose 配置文件](https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/local/docker-compose.yml) 以及 [环境变量配置文件](https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/local/.env.zh-CN.example)。
296
+
297
+ ```sh
298
+ curl -O https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/local/docker-compose.yml
299
+ curl -O https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/local/.env.zh-CN.example
300
+ mv .env.zh-CN.example .env
301
+ ```
302
+
303
+ <Callout type="info">
304
+ 本章节并不包含所有完整变量,剩余的变量可以查阅
305
+ [使用服务端数据库部署](/zh/docs/self-hosting/server-database) 。
306
+ </Callout>
307
+
308
+ ### 预备知识
309
+
310
+ 一般来讲,想要完整的运行 LobeHub 数据库版本,你需要至少拥有如下四个服务
311
+
312
+ - LobeHub 数据库版本自身
313
+ - 带有 PGVector 插件的 PostgreSQL 数据库
314
+ - 支持 S3 协议的对象存储服务
315
+ - 受 LobeHub 支持的 SSO 登录鉴权服务
316
+
317
+ 这些服务可以通过自建或者在线云服务组合搭配,以满足不同层次的部署需求。本文中,我们提供了完全基于开源自建服务的 Docker Compose 配置,你可以直接使用这份配置文件来启动 LobeHub 数据库版本,也可以对之进行修改以适应你的需求。
318
+
319
+ 我们默认使用 [MinIO](https://github.com/minio/minio) 作为本地 S3 对象存储服务,使用 [Casdoor](https://github.com/casdoor/casdoor) 作为本地鉴权服务。
320
+
321
+ <Callout type="warning">
322
+ 如果你的网络拓扑较为复杂,请先确保在你的网络环境中这些服务能够正常通讯。
323
+ </Callout>
324
+
325
+ ### 必要配置
326
+
327
+ 以下我们将介绍运行这些服务的必要配置:
328
+
329
+ 1. Casdoor
330
+
331
+ - LobeHub 需要与 Casdoor 通讯,因此你需要配置 Casdoor 的 Issuer 。
332
+
333
+ ```env
334
+ AUTH_CASDOOR_ISSUER=https://auth.example.com
335
+ ```
336
+
337
+ 该配置会影响 LobeHub 的登录鉴权服务,你需要确保 Casdoor 服务的地址正确。你可以在 [常见问题](#常见问题) 中找到该配置错误的常见现象及解决方案。
338
+
339
+ - 同时,你也需要在 Casdoor 中允许回调地址为 LobeHub 的地址:
340
+
341
+ 请在 Casdoor 的 Web 面板的 `身份认证 -> 应用` -> `<应用ID,默认为 app-built-in>` -> `重定向URL` 中添加一行:
342
+
343
+ ```
344
+ https://auth.example.com/api/auth/callback/casdoor
345
+ ```
346
+
347
+ - Casdoor 需要在环境变量中提供访问的 Origin 信息:
348
+
349
+ ```env
350
+ origin=https://auth.example.com
351
+ ```
352
+
353
+ 2. MinIO
354
+
355
+ - LobeHub 需要为 LLM 服务提供商提供文件对象的公网访问地址,因此你需要配置 MinIO 的 Endpoint 。
356
+
357
+ ```env
358
+ S3_PUBLIC_DOMAIN=https://minio.example.com
359
+ S3_ENDPOINT=https://minio.example.com
360
+ ```
361
+
362
+ 3. PostgreSQL
363
+
364
+ 该配置位于 `docker-compose.yml` 文件中,你需要配置数据库的名称和密码:
365
+
366
+ ```yaml
367
+ services:
368
+ lobe:
369
+ environment:
370
+ - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
371
+ ```
372
+
373
+ ## 常见问题
374
+
375
+ #### 无法正常登陆
376
+
377
+ 请根据容器日志检查是否存在以下错误
378
+
379
+ ```sh
380
+ docker logs -f lobe-chat
381
+ ```
382
+
383
+ - r3: "response" is not a conform Authorization Server Metadata response (unexpected HTTP status code)
384
+
385
+ ```log
386
+ lobe-chat | [auth][error] r3: "response" is not a conform Authorization Server Metadata response (unexpected HTTP status code)
387
+ ```
388
+
389
+ 成因:该问题一般是由于你的反向代理配置不正确导致的,你需要确保你的反向代理配置不会拦截 Casdoor 的 OAuth2 配置请求。
390
+
391
+ 解决方案:
392
+
393
+ - 请参考 [域名模式](#域名模式) 章节中的反向代理配置注意事项。
394
+
395
+ - 一个直接的排查方式,你可以直接访问 `https://auth.example.com/.well-known/openid-configuration`,如果
396
+
397
+ - 返回了非 JSON 格式的数据,则说明你的反向代理配置错误。
398
+ - 如果返回的 JSON 格式数据中的 `"issuer": "URL"` 字段不是你配置的 `https://auth.example.com`,则说明你的环境变量配置错误。
399
+
400
+ - TypeError: fetch failed
401
+
402
+ ```log
403
+ lobe-chat | [auth][error] TypeError: fetch failed
404
+ ```
405
+
406
+ 成因:LobeHub 无法访问鉴权服务。
407
+
408
+ 解决方案:
409
+
410
+ - 请检查你的鉴权服务是否正常运行,以及 LobeHub 所在的网络是否能够访问到鉴权服务。
411
+
412
+ - 一个直接的排查方式,你可以在 LobeHub 容器的终端中,使用 `curl` 命令访问你的鉴权服务 `https://auth.example.com/.well-known/openid-configuration`,如果返回了 JSON 格式的数据,则说明你的鉴权服务正常运行。
413
+
414
+ #### 反向代理下 OAuth 令牌交换失败
415
+
416
+ 如果在反向代理后使用 Docker 时 OAuth 认证在令牌交换阶段失败,这通常是由默认的 `MIDDLEWARE_REWRITE_THROUGH_LOCAL=1` 设置引起的,该设置会将 URL 重写为 `127.0.0.1:3210`。
417
+
418
+ **解决方案**: 在 `.env` 文件中设置 `MIDDLEWARE_REWRITE_THROUGH_LOCAL=0` 并重启 Docker 容器:
419
+
420
+ ```bash
421
+ docker compose down
422
+ docker compose up -d
423
+ ```
424
+
425
+ ## 拓展配置
426
+
427
+ 为了完善你的 LobeHub 服务,你可以根据你的需求进行以下拓展配置。
428
+
429
+ ### 使用 MinIO 存储 Casdoor 头像
430
+
431
+ 允许用户在 Casdoor 中更换头像
432
+
433
+ 1. 你需要首先在 `buckets` 中创建一个名为 `casdoor` 的桶,选择自定义策略,复制并粘贴如下内容(如果你修改了桶名,请自行查找替换)
434
+
435
+ ```json
436
+ {
437
+ "Statement": [
438
+ {
439
+ "Effect": "Allow",
440
+ "Principal": {
441
+ "AWS": ["*"]
442
+ },
443
+ "Action": ["s3:GetBucketLocation"],
444
+ "Resource": ["arn:aws:s3:::casdoor"]
445
+ },
446
+ {
447
+ "Effect": "Allow",
448
+ "Principal": {
449
+ "AWS": ["*"]
450
+ },
451
+ "Action": ["s3:ListBucket"],
452
+ "Resource": ["arn:aws:s3:::casdoor"],
453
+ "Condition": {
454
+ "StringEquals": {
455
+ "s3:prefix": ["files/*"]
456
+ }
457
+ }
458
+ },
459
+ {
460
+ "Effect": "Allow",
461
+ "Principal": {
462
+ "AWS": ["*"]
463
+ },
464
+ "Action": ["s3:PutObject", "s3:DeleteObject", "s3:GetObject"],
465
+ "Resource": ["arn:aws:s3:::casdoor/**"]
466
+ }
467
+ ],
468
+ "Version": "2012-10-17"
469
+ }
470
+ ```
471
+
472
+ 2. 创建一个新的访问密钥,将生成的 `Access Key` 和 `Secret Key` 存储之
473
+
474
+ 3. 在 Casdoor 的 `身份认证 -> 提供商` 中关联 MinIO S3 服务,以下是一个示例配置:
475
+
476
+ ![casdoor](/blog/assets18bb134dbc5792d6a624199cca8bf7d3.webp)
477
+
478
+ 其中,客户端 ID、客户端密钥为上一步创建的访问密钥中的 `Access Key` 和 `Secret Key`,`192.168.31.251` 应当被替换为 `your_server_ip`。
479
+
480
+ 4. 在 Casdoor 的 `身份认证 -> 应用` 中,对 `app-built-in` 应用添加提供商,选择 `minio`,保存并退出
481
+
482
+ 5. 你可以在 Casdoor 的 `身份认证 -> 资源` 中,尝试上传文件以测试配置是否正确
483
+
484
+ ### 生产部署下从 `logto` 迁移至 `Casdoor`
485
+
486
+ 适用于已经在生产环境下使用 `logto` 作为登录鉴权服务的用户
487
+
488
+ <Callout type="info">
489
+ 由于使用[Logto](https://logto.io/) 作为登录鉴权服务存在比较大的不稳定性。 因此,下文基于发布到 IP
490
+ 模式的教程,实现了使用 Casdoor 作为鉴权服务提供商的域名发布方案。
491
+ 本文剩余部分也将以其为例进行说明。如果你使用其他诸如 Logto
492
+ 等其他登录鉴权服务,流程应当相近,但请注意不同的登录鉴权服务的端口配置可能有所差异。
493
+ </Callout>
494
+
495
+ 在下文中,我们假设在上述服务之外,你还运行了一层 **Nginx** 来进行反向代理、配置 SSL。
496
+
497
+ 域名和配套服务端口说明如下:
498
+
499
+ - `lobe.example.com`:为你的 LobeHub 服务端域名,需要反向代理到 LobeHub 服务端口,默认为 `3210`
500
+ - `auth.example.com`:为你的 Logto UI 域名,需要反向代理到 Logto WebUI 服务端口,默认为 `8000`
501
+ - `minio.example.com`:为你的 MinIO API 域名,需要反向代理到 MinIO API 服务端口,默认为 `9000`
502
+ - `minio-ui.example.com`:可选,为你的 MinIO UI 域名,需要反向代理到 MinIO WebUI 服务端口,默认为 `9001`
503
+
504
+ #### 配置文件
505
+
506
+ ```sh
507
+ bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN
508
+ docker compose up -d
509
+ ```
510
+
511
+ 注意保存此时生成的新密码!
512
+
513
+ 运行后会获得三个文件
514
+
515
+ - init\_data.json
516
+ - docker-compose.yml
517
+ - .env
518
+
519
+ 接下来,修改配置文件以实现域名发布
520
+
521
+ 1. 修改 `docker-compose.yml` 文件
522
+
523
+ 1. 修改 `minio`的`MINIO_API_CORS_ALLOW_ORIGIN`字段。
524
+
525
+ ```yaml
526
+ 'MINIO_API_CORS_ALLOW_ORIGIN=https://lobe.example.com'
527
+ ```
528
+
529
+ 2. 修改`casdoor`的`origin`字段。
530
+
531
+ ```yaml
532
+ origin: 'https://auth.example.com'
533
+ ```
534
+
535
+ 3. 修改`lobe`的`environment`字段。
536
+
537
+ ```yaml
538
+ # - 'APP_URL=http://localhost:3210'
539
+ - 'APP_URL=https://lobe.example.com'
540
+
541
+ - 'AUTH_SSO_PROVIDERS=casdoor'
542
+ - 'KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ='
543
+ - 'AUTH_SECRET=NX2kaPE923dt6BL2U8e9oSre5RfoT7hg'
544
+ # - 'AUTH_URL=http://localhost:${LOBE_PORT}/api/auth'
545
+ - 'AUTH_URL=https://lobe.example.com/api/auth'
546
+
547
+ # - 'AUTH_CASDOOR_ISSUER=http://localhost:${CASDOOR_PORT}'
548
+ - 'AUTH_CASDOOR_ISSUER=https://auth.example.com'
549
+
550
+ - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
551
+ # - 'S3_ENDPOINT=http://localhost:${MINIO_PORT}'
552
+ - 'S3_ENDPOINT=https://minio.example.com'
553
+
554
+ - 'S3_BUCKET=${MINIO_LOBE_BUCKET}'
555
+ # - 'S3_PUBLIC_DOMAIN=http://localhost:${MINIO_PORT}'
556
+ - 'S3_PUBLIC_DOMAIN=https://minio.example.com'
557
+
558
+ - 'S3_ENABLE_PATH_STYLE=1'
559
+ - 'LLM_VISION_IMAGE_USE_BASE64=1'
560
+ ```
561
+
562
+ 2. 修改 `.env` 文件
563
+
564
+ <Callout type="info">为了安全起见,修改 `.env` 文件中的 ROOT USER 的字段</Callout>
565
+
566
+ ```sh
567
+ # MinIO S3 configuration
568
+ MINIO_ROOT_USER=XXXX
569
+ MINIO_ROOT_PASSWORD=XXXX
570
+ ```
571
+
572
+ #### Postgres 数据库配置
573
+
574
+ 你可以使用下述指令检查日志:
575
+
576
+ ```sh
577
+ docker logs -f lobe-chat
578
+ ```
579
+
580
+ <Callout type="tip">
581
+ 在我们官方的 Docker 镜像中,会在启动镜像前自动执行数据库 schema 的 migration
582
+ ,我们的官方镜像承诺「空数据库 ->
583
+ 完整表」这一段自动建表的稳定性。因此我们建议你的数据库实例使用一个空表实例,进而省去手动维护表结构或者
584
+ migration 的麻烦。
585
+ </Callout>
586
+
587
+ 如果你在建表的时候出现了问题,你可以尝试使用如下命令强制移除数据库容器并重新启动:
588
+
589
+ ```sh
590
+ docker compose down # 停止服务
591
+ sudo rm -rf ./data # 移除挂载的数据库数据
592
+ docker compose up -d # 重新启动
593
+ ```
594
+
595
+ #### 登录鉴权服务配置
596
+
597
+ 你需要首先访问 WebUI 来进行配置:
598
+
599
+ - 如果你按照前文配置了反向代理,打开 `https://auth.example.com`
600
+ - 否则,请在进行端口映射后,打开 `http://localhost:8000`
601
+
602
+ 登录管理员账户
603
+
604
+ - 默认用户名为 admin
605
+ - 默认密码为 下载配置文件时生成的随机密码。如忘记可到 `init_data.json` 文件中找回
606
+
607
+ 登入后执行如下操作
608
+
609
+ 1. 在 `用户管理 -> 组织` 中,添加一个新的组织。名称与显示名称为 `Lobe Users`。其余保持默认即可。
610
+ 2. 在 `身份认证 -> 应用` 中,添加一个新的应用。
611
+
612
+ - 名称与显示名称为 `LobeHub`。
613
+ - 组织为 `Lobe Users`。
614
+ - 重定向 URLS 中添加一行 为 `https://lobe.example.com/api/auth/callback/casdoor`。
615
+ - 关闭除密码外的登录方式 。
616
+ - 将客户端 ID 和客户端密钥分别填入 `.env`中的 `AUTH_CASDOOR_ID` 和 `AUTH_CASDOOR_SECRET` 中。
617
+ - (可选) 仿照`built-in`应用的配置,来设计登录和注册的页面外观。
618
+ - 保存并退出。
619
+
620
+ <Callout type="info">
621
+ 通过上述步骤,可以避免默认情况下所有用户均为管理员导致的不安全的情况。
622
+ </Callout>
623
+
624
+ #### S3 对象存储服务配置
625
+
626
+ 本文以 MinIO 为例,解释配置过程,如果你使用的是其他 S3 服务商,请参照其文档进行配置。
627
+
628
+ <Callout type="warning">
629
+ 请记得注意配置对应 S3 服务商的 CORS 跨域配置,以确保 LobeHub 能够正常访问 S3 服务。
630
+
631
+ 在本文中,你需要允许 `https://lobe.example.com` 的跨域请求。这既可以在 MinIO WebUI 的 `Configuration - API - Cors Allow Origin` 中配置,也可以在 Docker Compose 中的 `minio - environment - MINIO_API_CORS_ALLOW_ORIGIN` 中配置。
632
+
633
+ 如果你使用第二种方法(这也是默认的方法)进行配置,你将无法再在 MinIO WebUI 中配置。
634
+ </Callout>
635
+
636
+ 你需要首先访问 WebUI 来进行配置:
637
+
638
+ - 如果你按照前文配置了反向代理,打开 `https://minio-ui.example.com`
639
+ - 否则,请在进行端口映射后,打开 `http://localhost:9001`
640
+
641
+ 1. 在登录界面输入你设置的 `MINIO_ROOT_USER` 和 `MINIO_ROOT_PASSWORD`,然后点击登录
642
+
643
+ 2. 在左侧面板 User / Access Keys 处,点击 `Create New Access Key`,无需额外修改,将生成的 `Access Key` 和 `Secret Key` 填入你的 `.env` 文件中的 `S3_ACCESS_KEY_ID` 和 `S3_SECRET_ACCESS_KEY` 中
644
+
645
+ <Image alt="创建 MinIO 访问密钥" src="/blog/assetsfa2c650be15522ac2fd71a3e434a1b2e.webp" />
646
+
647
+ 3. 重启 LobeHub 服务:
648
+
649
+ ```sh
650
+ docker compose up -d
651
+ ```
652
+
653
+ 至此,你已经成功部署了 LobeHub 数据库版本,你可以通过 `https://lobe.example.com` 访问你的 LobeHub 服务。
654
+
655
+ #### 使用 `INTERNAL_APP_URL` 配置内部服务器通信
656
+
657
+ <Callout type="info">
658
+ 如果你在 CDN(如 Cloudflare)或反向代理后部署 LobeHub,你可以配置内部服务器到服务器通信以绕过 CDN / 代理层,以获得更好的性能。
659
+ </Callout>
660
+
661
+ 你可以配置 `INTERNAL_APP_URL` 环境变量:
662
+
663
+ ```yaml
664
+ environment:
665
+ - 'APP_URL=https://lobe.example.com' # 浏览器访问的公开 URL
666
+ - 'INTERNAL_APP_URL=http://localhost:3210' # 服务器到服务器调用的内部 URL
667
+ ```
668
+
669
+ **工作原理:**
670
+
671
+ - `APP_URL`:用于浏览器 / 客户端访问、OAuth 回调、webhook 等(通过 CDN / 代理)
672
+ - `INTERNAL_APP_URL`:用于内部服务器到服务器通信(绕过 CDN / 代理)
673
+
674
+ 如果未设置 `INTERNAL_APP_URL`,它将默认为 `APP_URL`。
675
+
676
+ **配置选项:**
677
+
678
+ - `http://localhost:3210` - 如果使用 Docker 主机网络模式
679
+ - `http://lobe:3210` - 如果使用 Docker 网络与服务名称
680
+ - `http://127.0.0.1:3210` - 备用本地主机地址
681
+
682
+ <Callout type="tip">
683
+ 对于使用 `network_mode: 'service:network-service'` 的 Docker Compose 部署,请使用 `http://localhost:3210` 作为 `INTERNAL_APP_URL`。
684
+ </Callout>
685
+
686
+ #### 配置文件
687
+
688
+ 为方便一键复制,在此汇总基于 casdoor 鉴权方案的域名方式下生产部署配置服务端数据库所需要的示例配置文件。
689
+
690
+ - `.env`
691
+
692
+ ```sh
693
+ # Proxy, if you need it
694
+ # HTTP_PROXY=http://localhost:7890
695
+ # HTTPS_PROXY=http://localhost:7890
696
+
697
+ # Other environment variables, as needed. You can refer to the environment variables configuration for the client version.
698
+ # OPENAI_API_KEY=sk-xxxx
699
+ # OPENAI_PROXY_URL=https://api.openai.com/v1
700
+ # OPENAI_MODEL_LIST=...
701
+
702
+ # ===========================
703
+ # ====== Preset config ======
704
+ # ===========================
705
+ # if no special requirements, no need to change
706
+ LOBE_PORT=3210
707
+ CASDOOR_PORT=8000
708
+ MINIO_PORT=9000
709
+
710
+ # Postgres related, which are the necessary environment variables for DB
711
+ LOBE_DB_NAME=LobeHub
712
+ POSTGRES_PASSWORD=uWNZugjBqixf8dxC
713
+
714
+ # Casdoor secret
715
+ AUTH_CASDOOR_ID=943e627d79d5dd8a22a1
716
+ AUTH_CASDOOR_SECRET=6ec24ac304e92e160ef0d0656ecd86de8cb563f1
717
+
718
+ # MinIO S3 configuration
719
+ MINIO_ROOT_USER=Joe
720
+ MINIO_ROOT_PASSWORD=Crj1570768
721
+
722
+ # Configure the bucket information of MinIO
723
+ MINIO_LOBE_BUCKET=lobe
724
+ S3_ACCESS_KEY_ID=dB6Uq9CYZPdWSZouPyEd
725
+ S3_SECRET_ACCESS_KEY=aPBW8CVULkh8bw1GatlT0GjLihcXHLNwRml4pieS
726
+ ```
727
+
728
+ - `docker-compose.yml`
729
+
730
+ ```yaml
731
+ name: lobehub
732
+ services:
733
+ network-service:
734
+ image: alpine
735
+ container_name: lobe-network
736
+ ports:
737
+ - '${MINIO_PORT}:${MINIO_PORT}' # MinIO API
738
+ - '9001:9001' # MinIO Console
739
+ - '${CASDOOR_PORT}:${CASDOOR_PORT}' # Casdoor
740
+ - '${LOBE_PORT}:3210' # LobeHub
741
+ command: tail -f /dev/null
742
+ networks:
743
+ - lobe-network
744
+
745
+ postgresql:
746
+ image: pgvector/pgvector:pg17
747
+ container_name: lobe-postgres
748
+ ports:
749
+ - '5432:5432'
750
+ volumes:
751
+ - './data:/var/lib/postgresql/data'
752
+ environment:
753
+ - 'POSTGRES_DB=${LOBE_DB_NAME}'
754
+ - 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
755
+ healthcheck:
756
+ test: ['CMD-SHELL', 'pg_isready -U postgres']
757
+ interval: 5s
758
+ timeout: 5s
759
+ retries: 5
760
+ restart: always
761
+ networks:
762
+ - lobe-network
763
+
764
+ minio:
765
+ image: minio/minio
766
+ container_name: lobe-minio
767
+ network_mode: 'service:network-service'
768
+ volumes:
769
+ - './s3_data:/etc/minio/data'
770
+ environment:
771
+ - 'MINIO_ROOT_USER=${MINIO_ROOT_USER}'
772
+ - 'MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}'
773
+ # - 'MINIO_API_CORS_ALLOW_ORIGIN=http://localhost:${LOBE_PORT}'
774
+ - 'MINIO_API_CORS_ALLOW_ORIGIN=https://lobe.example.com'
775
+ restart: always
776
+ command: >
777
+ server /etc/minio/data --address ":${MINIO_PORT}" --console-address ":9001"
778
+
779
+ casdoor:
780
+ image: casbin/casdoor
781
+ container_name: lobe-casdoor
782
+ entrypoint: /bin/sh -c './server --createDatabase=true'
783
+ network_mode: 'service:network-service'
784
+ depends_on:
785
+ postgresql:
786
+ condition: service_healthy
787
+ environment:
788
+ RUNNING_IN_DOCKER: 'true'
789
+ driverName: 'postgres'
790
+ dataSourceName: 'user=postgres password=${POSTGRES_PASSWORD} host=postgresql port=5432 sslmode=disable dbname=casdoor'
791
+ # origin: 'http://localhost:${CASDOOR_PORT}'
792
+ origin: 'https://auth.example.com'
793
+ runmode: 'dev'
794
+ volumes:
795
+ - ./init_data.json:/init_data.json
796
+
797
+ lobe:
798
+ image: lobehub/lobehub
799
+ container_name: lobehub
800
+ network_mode: 'service:network-service'
801
+ depends_on:
802
+ postgresql:
803
+ condition: service_healthy
804
+ network-service:
805
+ condition: service_started
806
+ minio:
807
+ condition: service_started
808
+ casdoor:
809
+ condition: service_started
810
+
811
+ environment:
812
+ # - 'APP_URL=http://localhost:3210'
813
+ - 'APP_URL=https://lobe.example.com'
814
+
815
+ - 'AUTH_SSO_PROVIDERS=casdoor'
816
+ - 'KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ='
817
+ - 'AUTH_SECRET=NX2kaPE923dt6BL2U8e9oSre5RfoT7hg'
818
+ # - 'AUTH_URL=http://localhost:${LOBE_PORT}/api/auth'
819
+ - 'AUTH_URL=https://lobe.example.com/api/auth'
820
+
821
+ # - 'AUTH_CASDOOR_ISSUER=http://localhost:${CASDOOR_PORT}'
822
+ - 'AUTH_CASDOOR_ISSUER=https://auth.example.com'
823
+
824
+ - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
825
+ # - 'S3_ENDPOINT=http://localhost:${MINIO_PORT}'
826
+ - 'S3_ENDPOINT=https://minio.example.com'
827
+
828
+ - 'S3_BUCKET=${MINIO_LOBE_BUCKET}'
829
+ # - 'S3_PUBLIC_DOMAIN=http://localhost:${MINIO_PORT}'
830
+ - 'S3_PUBLIC_DOMAIN=https://minio.example.com'
831
+
832
+ - 'S3_ENABLE_PATH_STYLE=1'
833
+ - 'LLM_VISION_IMAGE_USE_BASE64=1'
834
+ env_file:
835
+ - .env
836
+ restart: always
837
+
838
+ volumes:
839
+ data:
840
+ driver: local
841
+ s3_data:
842
+ driver: local
843
+
844
+ networks:
845
+ lobe-network:
846
+ driver: bridge
847
+ ```
848
+
849
+ [docker-pulls-link]: https://hub.docker.com/r/lobehub/lobehub
850
+ [docker-pulls-shield]: https://img.shields.io/docker/pulls/lobehub/lobehub?color=45cc11&labelColor=black&style=flat-square
851
+ [docker-release-link]: https://hub.docker.com/r/lobehub/lobehub
852
+ [docker-release-shield]: https://img.shields.io/docker/v/lobehub/lobehub?color=369eff&label=docker&labelColor=black&logo=docker&logoColor=white&style=flat-square&sort=semver
853
+ [docker-size-link]: https://hub.docker.com/r/lobehub/lobehub
854
+ [docker-size-shield]: https://img.shields.io/docker/image-size/lobehub/lobehub?color=369eff&labelColor=black&style=flat-square&sort=semver