LobeChat服务端数据库版本搭建全解析
AI大爆发阶段,各种AI现在层出不穷,但是很少有能调用第三方模型的,coze虽然官方宣传后期支持,但是目前没有
LobeChat 默认使用客户端数据库(IndexedDB)方式,这种模式虽然能正常使用,但是多端没有办法同步,并且不支持知识库、文件管理功能,所以前段时间,他又开发出来了服务端数据库版本(下简称 DB 版)。DB版本的LobeChat 采用了 Postgres 作为后端存储数据库。
前提:
- 默认搭建服务器已经安装好docker和docker-compose还有Nginx
- 已经注册好了 ChatGPT-API-KEY 或者 Claude API ( 如果没有可以私信我,长期提供OpenAI-API和Claude-API )
- 有准备好的域名,且域名可以进行二级域名解析
当前环境:阿里云99元的独享ECS ,2C2G
老规矩,这种工具型应用的搭建,最好使用docker-compose来搭建,以后哪怕长时间不管了更新也清楚方便。
基础-客户端数据库版本搭建(DB版可以跳过)
不推荐使用基础版客户端数据库,当然如果只是本地使用,不考虑丢机器人助手和对话信息的话,简单部署的话也可以使用。
本版本部署有一系列部署方案,一般使用这个版本的,都是为了方便快速使用的,在当前这个docker大部分镜像被禁用的情况下,只推荐使用Vercel一键搭建,然后到阿里云购买一个域名绑定到domain中。
Vercel部署流程
-
获取你的 OpenAI API Key
-
直接使用 GitHub 账号登录即可,记得在环境变量页填入
OPENAI_API_KEY
(必填) andACCESS_CODE
(推荐-使用密码)。 -
部署完毕后,即可开始使用了。
-
绑定阿里云注册的自定义域名
Vercel 分配的域名 DNS 在某些区域被污染了,绑定自定义域名即可直连。 -
访问域名即可进入独属于你自己的LobeChat。
服务端数据库版本(DB版本-域名模式)
DB版本因为中间环境较为复杂且需要安装的支持应用较多,所以推荐使用docker-compose方式部署。
DB版本包含本机、IP、域名方式,本机不符合DB特性,IP没办法快速访问,故使用域名版本!
Docker-compose方式部署
因为政策问题,现在国内的docker镜像源基本死了个七七八八,更别说的docker-hub的了,所以需要换docker源
修改docker镜像源
#2024-11-18可用镜像源(网络中获取)
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://0c105db5188026850f80c001def654a0.mirror.swr.myhuaweicloud.com",
"https://5tqw56kt.mirror.aliyuncs.com",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn/",
"http://mirror.azure.cn/",
"https://hub.rat.dev/",
"https://docker.ckyl.me/",
"https://docker.chenby.cn",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io"
]
}
wq保存后执行:
systemctl daemon-reload
systemctl restart docker
重启docker后再进行操作
准备搭建
一般来讲,想要完整的运行 LobeChat 数据库版本,你需要至少拥有如下四个服务
- LobeChat 数据库版本自身
- 带有 PGVector 插件的 PostgreSQL 数据库
- 支持 S3 协议的对象存储服务
- 受 LobeChat 支持的 SSO 登录鉴权服务
这些服务可以通过自建或者在线云服务组合搭配,以满足不同层次的部署需求。
本文中,我们提供了完全基于开源自建服务的 Docker Compose 配置,你可以直接使用这份配置文件来启动 LobeChat 数据库版本,也可以对之进行修改以适应你的需求。
我们默认使用 MinIO 作为本地 S3 对象存储服务,使用 Logto 作为本地鉴权服务。
开始搭建
docker-compose.yml下载
#在当前目录下执行来下载
curl -fsSL https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/production/logto/docker-compose.yml > docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/lobehub/lobe-chat/HEAD/docker-compose/production/logto/.env.zh-CN.example > .env
如果上面文件下载不下来,可以公众号中回复lobechat,即可下载,放置到服务器即可!
为了快速上手,此 docker-compose.yml
内置了大量的 Secret/Password 的敏感字段配置,仅适用于快速演示或个人本地使用。请勿直接用于线上生产环境!否则遇到安全问题请自行负责!
新建目录
假设局域网 / 公网需要运行 LobeChat 服务的机器 IP 为 your_server_ip
。
新建一个 lobe-chat-db
目录,用于存放你的配置文件和后续的数据库文件。
mkdir lobe-chat-db
cd lobe-chat-db
下载容器镜像并启动
docker compose up -d
## 检查日志
docker logs -f lobe-chat
如果你在容器中看到了以下日志,则说明已经启动成功:
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
▲ Next.js x.x.x
- Local: http://localhost:3210
- Network: http://0.0.0.0:3210
✓ Starting...
✓ Ready in 95ms
你可以通过 http://IP:3210
访问你的 LobeChat 服务。
至此,你已经完成部署 LobeChat 数据库版本的50% ,然后你会发现虽然能访问,但是登陆会报错,莫慌我们一步步解决。
Nginx配置域名反向代理
在Nginx中加入域名反向代理映射到配套服务端口说明如下:
-
lobe.example.com
:为你的 LobeChat 服务端域名,需要反向代理到 LobeChat 服务端口,默认为3210
-
lobe-auth-api.example.com
:为你的 Logto 服务端域名,需要反向代理到 Logto API 服务端口,默认为3001
-
lobe-auth-ui.example.com
:为你的 Logto UI 域名,需要反向代理到 Logto WebUI 服务端口,默认为3002
-
lobe-s3-api.example.com
:为你的 MinIO API 域名,需要反向代理到 MinIO API 服务端口,默认为9000
-
lobe-s3-ui.example.com
:可选(不推荐把minio-ui映射到外网),为你的 MinIO UI 域名,需要反向代理到 MinIO WebUI 服务端口,默认为9001
Nginx反向代理示例:
#lobe-chat应用
server {
listen 443 ssl;
server_name lobe.xxxx.com;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:3210;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection 'upgrade';
proxy_set_header Upgrade $http_upgrade;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
#Logto-API
server {
listen 443 ssl;
server_name lobe-auth-api.xxxx.com;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection 'upgrade';
proxy_set_header Upgrade $http_upgrade;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
#Logto-UI
server {
listen 443 ssl;
server_name lobe-auth-ui.xxxx.com;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:3002;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection 'upgrade';
proxy_set_header Upgrade $http_upgrade;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
#S3-Minio-API
server {
listen 443 ssl;
server_name lobe-s3-api.xxxx.com;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection 'upgrade';
proxy_set_header Upgrade $http_upgrade;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
}
域名解析至服务器
示例:阿里云
-
lobe.example.com
-
lobe-auth-api.example.com
-
lobe-auth-ui.example.com
-
lobe-s3-api.example.com
-
lobe-s3-ui.example.com
:可选
使用A记录将如上二级域名解析至你的服务器
为域名配置SSL
我们使用Certbot为如上域名挨个生成SSL证书,如果不了解Certbot的可以看我之前的文章。
登录鉴权服务配置
本文以 Logto 为例,解释配置过程,如果你使用的是其他登录鉴权服务商,请参照其文档进行配置。
请记得注意配置对应登录鉴权服务提供商的 CORS 跨域配置,以确保 LobeChat 能够正常访问登录鉴权服务。
在本文中,你需要允许
https://lobe.example.com
的跨域请求。
你需要首先访问 WebUI 来进行配置:
- 如果你按照前文配置了反向代理,打开
https://lobe-auth-ui.example.com
- 否则,请在进行端口映射后,打开
http://localhost:3002
- 注册一个新账户,首个注册的账户将自动成为管理员
- 修改为中文显示
- 在
Applications
里创建一个Next.js (App Router)
应用,名称随意 - 配置
Redirect URI
为https://lobe.example.com/api/auth/callback/logto
,Post sign-out redirect URI
为https://lobe.example.com/
- 点击确定后,再配置
CORS allowed origins
为https://lobe.example.com
- 获取
App ID
和App secrets
,填入你的.env
文件中的AUTH_LOGTO_ID
和AUTH_LOGTO_SECRET
中 - 配置你的
.env
文件中AUTH_LOGTO_ISSUER
为https://lobe-auth-api.example.com/oidc
- 可选,在左侧
登录体验
面板的注册与登录
中关闭启动用户注册
,禁止用户自行注册。如果你禁止了用户自行注册,那么你只能在左侧User Management
里手动添加用户。
这样鉴权服务就配置完成了
请注意,管理员账户不等同于注册用户,不要用你的管理员账户登录 LobeChat,那样只会报错!
S3对象存储服务配置
本文以 MinIO 为例,解释配置过程,如果你使用的是其他 S3 服务商,请参照其文档进行配置。
请记得注意配置对应 S3 服务商的 CORS 跨域配置,以确保 LobeChat 能够正常访问 S3 服务。
在本文中,你需要允许
https://lobe.example.com
的跨域请求。这既可以在 MinIO WebUI 的Configuration - API - Cors Allow Origin
中配置,也可以在 Docker Compose 中的minio - environment - MINIO_API_CORS_ALLOW_ORIGIN
中配置。如果你使用第二种方法(这也是默认的方法)进行配置,你将无法再在 MinIO WebUI 中配置。
你需要首先访问 WebUI 来进行配置:
- 如果你按照前文配置了反向代理,打开
https://lobe-s3-ui.example.com
- 否则,请在进行端口映射后,打开
http://localhost:9001
-
在登录界面输入你设置的
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
,然后点击登录 -
在左侧面板 Administer / Buckets 中点击
Create Bucket
,输入lobe
(对应你的S3_BUCKET
环境变量),然后点击Create
-
选中你的桶,点击 Summary - Access Policy,编辑,选择
Custom
,输入minio-bucket-config.json
中的内容(可以公众号中回复lobechat,即可下载)并保存(同样默认你的桶名为lobe
):
-
在左侧面板 Service Accounts 处,点击
Create Service Account
,无需额外修改,点击 Create ,将生成的Access Key
和Secret Key
填入你的.env
文件中的S3_ACCESS_KEY_ID
和S3_SECRET_ACCESS_KEY
中
启动服务
你能看到这里,说明默认你已经完成了 LobeChat 数据库版本的各种前置应用搭建,那么就差执行了
#先执行
docker compose down
并将前面为了下载容器所创建的s3_data/ 、 data/ 都删除,然后执行
docker compose up -d
至此,你就可以通过 https://lobe.example.com
访问你的 LobeChat DB服务啦!
下面就是在.env中配置你想要api接口或者key之类,注意!每次修改完成后,需要docker compose up -d 来重创建lobe-chat
LobeChat 环境变量配置指南 · LobeChat Docs · LobeHub
长篇教程,总有疏忽之处,如有错误欢迎指正!
常见问题:
minio启动出错:
lobe-minio | ERROR Unable to initialize backend: format.json file: expected format-type: fs, found: xl-single
原因:
启动命令中挂载的/home/minio/data已经被minio占用了。(以前启动的minio挂载过)
解决:
找到.minio.sys 文件夹将其删了
NextAuth Error报错
原因:
.env中的nextauth未配置正确,可以查看是不是https没配
登陆Logto时直接显示 Invalid client YOUR_LOGTO_ID
原因:Logto未进行配置
解决:先进入Logto按上面的登陆鉴权服务配置好,获取了key和id并配置到.env中
文件上传不了
原因:S3配置有误或https未配置
解决:检查S3配置