1panel部署LobeChat服务端数据库版(飞牛OS部署)
LobeChat
它是什么?
LobeChat 是一个现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架,支持语音合成、多模态、可扩展的(function call)插件系统,一键免费拥有你自己的 ChatGPT/Gemini/Claude/Ollama 应用。
它的特性?
- 多模型服务商支持;
- 支持本地大语言模型 (LLM);
- 模型视觉识别 (Model Visual);
- TTS & STT 语音会话;
- Text to Image 文生图;
- 插件系统 (Function Calling);
- 助手市场 (GPTs);
- 支持本地 / 远程数据库;
- 支持多用户管理;
- 渐进式 Web 应用 (PWA);
- 移动设备适配;
- 自定义主题。
为什么要部署服务端数据库版?
1panel 默认带有客户端的一键安装,安装方式非常简单,点击1panel的应用商店-全部-AI/大模型-LobeChat -端口外部访问-安装(如果你使用的是openai则需要设置一下对应的数据)http://ip:40247/ 即可访问
默认安装的是客户端数据库模式 ,它与服务端数据库模式有什么区别?
先说以下两种数据库类型的区别,你就懂了。
特性 | 客户端数据库 (IndexedDB) | 服务端数据库 (PostgreSQL) |
---|---|---|
存储位置 | 浏览器本地 | 服务器 |
访问权限 | 仅限本地 | 多用户共享 |
数据量 | 小 | 大 |
用途 | 个人单浏览器 | 多地方共享使用 |
特点 | 简单、易用 | 功能强大、支持高并发 |
客户端数据库 (默认): 你的聊天记录、设置等都存储在你的浏览器里,换台电脑就没了,数据无法共享。
服务端数据库 (DB 版): 你的聊天记录、设置等都存储在服务器上,你可以用任何电脑登录 LobeChat 访问你的数据,数据可以跨设备共享。
安装需要什么前提?
- 1、docker手动安装:带有 PGVector 插件的 PostgreSQL 数据库
pgvector/pgvector:pg17
- 2、1panel商店安装:支持 S3 协议的对象存储服务 自建s3存储:
MinIO
- 3、1panel手动安装:受 LobeChat 支持的 SSO 登录鉴权服务 自建sso服务:
casdoor
- 4、docker手动安装:LobeChat 数据库版本自身
lobehub/lobe-chat-database
官方说明至少拥有如下四个服务,
通过1panel图形化手动安装LobeChat 服务端数据库版本
如果你会docker 请看官方教程,而不是此教程,此教程使用的是1panel图形化操作,对于不懂的人来说看的懂,但对于懂的人过于繁琐,docker只需要一句代码
首先是安装带有pgvector插件的PostgreSQL数据库
我们根据官方教程,使用docker容器新建一个数据库。
肯定有小伙伴疑惑,为什么不使用1panel的一键构建呢? 1Panel 的一键构建是不预装 pgvector 插件,这里我们手动安装,图形化也非常简单
拉取pgvector镜像
- 点击
容器
-点击镜像
-点击拉取镜像
- 输入镜像名(
pgvector/pgvector:pg17
)官方教程用的16版本 - 点击
拉取
1 - 创建pgvector容器
名称:PostgreSQL
镜像名: pgvector/pgvector:pg17
端口: 暴露端口:5432
需要注意如果占用,要修改服务器端口
网络:选择默认的1panel即可(1panel-network
)
ipv4:可不填
挂在卷:/opt/1panel/apps/PostgreSQL/data 容器目录:/var/lib/postgresql/data
环境变量:用户名,密码,挂载目录
POSTGRES_USER=PostgreSQL
POSTGRES_PASSWORD=PostgreSQL
PGDATA=/var/lib/postgresql/data
检测数据库是否可用
通过1panel内置的数据库功能,添加远程服务器,点击有验证,可用
连接上后新建一个数据库
连接PostgreSQL注意的地方
- 需关闭防火墙或者要手动开放端口(不然通过内网的ip是连不上的)
注:官方教程:使用 Docker 部署 LobeChat 数据库 · LobeChat... · LobeHub
2 - 支持 S3 协议的对象存储服务-MinIO
这里我们使用1panel一键安装
应用商店
-MinIO
- 如果端口占用请修改端口,我这里使用的是
端口:9001
-API端口:9000
端口外部访问
-安装
minIO配置
LobeChat 需要新建一个桶,和对应的秘钥即可。
内容:
- ACCESS_KEY
- SECRET_ACCESS_KEY
- 桶名称
- API域名
新建一个桶
Buckets
-Create Bucket
-输入Name
-lobechat
-Create Bucket
桶的访问权限改为公共
不设为公共则无法访问
Buckets
-lobechat
-点击Access Policy
-选择Public
新建一个秘钥
将会得到一个秘钥
桶名称: lobechat
Access Key:::r1TXawOyhP0oaUJqmYCR
Secret Key:::ftywcS58H48PnKETet3ulqvyOxCJc2B15PiXGMhS
API域名: http://192.168.2.2:9000(ip+端口)
检测minlo是否可用
可以获取筒即代表可用
3 - LobeChat 支持的 SSO 登录鉴权服务-casdoor
搭建casdoor
这里并没有使用1panel商店一件安装 ,是使用的Docker安装,
三个原因,1 是1panel商店一键安装需要mysql数据库支持,2是安装完后,casdoor服务和minIO服务不能互通,(不互通其实也不影响使用)(也可能是我的设置原因,暂且不使用商店一键安装)
3是换官方的all-in-one镜像不需要安装MySQL数据库
casdoor官方提供两个镜像,差异供大家参考
名称 | 描述 | 建议 |
---|---|---|
casdoor-all-in-one | 镜像中包含了Casdoor和MySQL数据库 | 此镜像已包含一个数据库,仅用于测试目的 (博主觉得是个人使用,使用这个镜像问题不大,目前没有遇到问题) |
casdoor | 镜像中只包含有Casdoor | 此镜像可以连接到您自己的数据库,并在生产中使用 |
在Docker中拉取镜像
- 名称:casdoor
- 镜像名: casbin/casdoor-all-in-one:latest
- 端口: 默认暴露端口:8000需要注意如果占用,要修改服务器端口 这里演示更改为8002
- 网络:选择默认的1panel即可
访问界面检测可用
- 默认登录用户名:admin 默认密码:123
设置casdoor应用
添加一个应用 身份认证
-应用
-添加
- 名称:lobechat
- 显示名称:lobechat
- Logo:https://pic1.imgdb.cn/item/67bb5978d0e0a243d402dc4e.webp
- 客户端ID::3fd6d6c63c53cfc9bfec(自动生成的不需要填写,下面要用)
- 客户端秘钥:f2b4d13cc01f2b3f13b82efb2e6d028303e6f19f(自动生成的不需要填写,下面要用)
重定向 URLs:http://192.168.2.2:3210/api/auth/callback/casdoor
重定向可以填多个,这里还可以添加上反代后的地址,方便外网使用
https://域名/api/auth/callback/casdoor(不支持中文域名,使用前需要转码)
(重定这里是填LobeChat服务地址,lobechat服务还没有搭建,所以不着急确定是否端口正确)
保存即可,其他什么都可以不用设置
注:官方教程:在 LobeChat 中配置 Casdoor 身份验证服务 · Lobe... · LobeHub
官方教程写的很繁杂,个人使用不建议参考。
4 - 开始安装LobeChat 数据库版
拉取lobechat镜像
搭建
- 点击
容器
-点击镜像
-点击拉取镜像
- 输入镜像名(
lobehub/lobe-chat-database:latest
) - 点击
拉取
- 名称:lobechat
- 镜像名: lobehub/lobe-chat-database:latest
- 端口: 默认暴露端口:
3210
需要注意如果占用,要修改服务器端口(修改的话,在设置casdoor应用中,重定向 URLs中也需要修改) - 网络:选择默认的1panel-network即可
- 环境变量: 重点中的重点,修改完后相关内容后,删除所有注释,放到环境变量中即可。
#你LobeChat访问的地址,请注意,端口号修改的话,需要保持一致 APP_URL=http://192.168.2.2:3210 #postgresql必须的环境变量 # 用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成(飞牛nas使用ssh登录后输入`openssl rand -base64 32`命令即可获取,保持默认也可) KEY_VAULTS_SECRET='*G7R4zFZk4mDaqvBIu3Yq4wD4tK/Ebzphx0HwDVrWX0Y=*' # postgresql 数据库连接字符串 # 格式:postgres://username:password@host:port/dbname,如果你的postgresql实例为 Docker 容器,请使用容器名,当然可以内网访问的也可以使用内网ip # DATABASE_URL=postgres://数据库用户名:数据库密码@192.168.2.2:4432/数据库名 # 这里的数据库名就是在搭建第一步的时候,最后设置的数据库 DATABASE_URL=postgres://postgresql:postgresql@192.168.2.2:4432/postgresql #Casdoor必须的环境变量 #加密敏感信息的秘钥,可以使用 openssl rand -base64 32 生成(飞牛nas使用ssh登录后输入`openssl rand -base64 32`命令即可获取,保持默认也可) NEXT_AUTH_SECRET=*G7R4zFZk4mDaqvBIu3Yq4wD4tK/Ebzphx0HwDVrWX0Y=* #你使用的sso的类型,不需要修改 NEXT_AUTH_SSO_PROVIDERS=casdoor #Casdoor中设置的应用中的客户端ID和客户端秘钥 AUTH_CASDOOR_ID=3fd6d6c63c53cfc9bfec AUTH_CASDOOR_SECRET=f2b4d13cc01f2b3f13b82efb2e6d028303e6f19f #填写casdoor访问地址即可 AUTH_CASDOOR_ISSUER=http://192.168.2.2:8002 #填写的lobechat的地址,请注意你的端口,要和前面APP_URL一样哦 NEXTAUTH_URL=http://192.168.2.2:3210/api/auth #debug,用来看日志反馈 NEXT_AUTH_DEBUG=1 #minIO,s3必须的环境变量 #id S3_ACCESS_KEY_ID=r1TXawOyhP0oaUJqmYCR #秘钥 S3_SECRET_ACCESS_KEY=ftywcS58H48PnKETet3ulqvyOxCJc2B15PiXGMhS #minIO访问的API地址,端口更改了请注意 S3_ENDPOINT=http://192.168.2.2:9000 #minIO,s3桶名 S3_BUCKET=lobechat #minIO,s3访问地址 S3_PUBLIC_DOMAIN=http://192.168.2.2:9001
访问服务是否安装成功
登录的账号密码为casdoor中的账号密码,
casdoor默认账号密码:账号:admin 密码:123
注:官方教程:使用 Docker 部署 LobeChat 数据库 · LobeChat... · LobeHub
倒数第二步
自行配置服务商即api
反代
现在是已经完成了本地部署,在外网情况下还是访问不了的
接下来就是配置反代内容,
- 1 用Lucky进行反向代理,这里就不教学了,网上很多教程了
名称 | 内网地址 | 外网反代地址 |
---|---|---|
lobechat服务 | http://192.168.2.2:3210 | https://lobechat.cn:10 |
Minio S3 API 服务 | http://192.168.2.2:9000 | https://Minio.cn:10 |
Casdoor API 服务 | http://192.168.2.2:8002 | https://Casdoor.cn:10 |
minio web服务(看需要,非必须) | http://192.168.2.2:9001 | https://minioweb.cn:10 |
2 Casdoor应用修改配置
在重定向中再添加反代后的域名
把域名加端口修改成自己的:https://Casdoor.cn:10/api/auth/callback/casdoor
然后保存并退出。(不支持中文域名,如是中文域名请转码使用)
3 修改lobechat容器中的环境变量,
把以上的反代后的lobechat服务、Minio S3 API 服务、Casdoor API 服务 添加到环境变量中
#你LobeChat访问的地址,请注意,端口号修改的话,需要保持一致
APP_URL=http://192.168.2.2:3210
APP_URL=https://lobechat.cn:10
#postgresql必须的环境变量
# 用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成(飞牛nas使用ssh登录后输入`openssl rand -base64 32`命令即可获取,保持默认也可)
KEY_VAULTS_SECRET='*G7R4zFZk4mDaqvBIu3Yq4wD4tK/Ebzphx0HwDVrWX0Y=*'
# postgresql 数据库连接字符串
# 格式:postgres://username:password@host:port/dbname,如果你的postgresql实例为 Docker 容器,请使用容器名,当然可以内网访问的也可以使用内网ip
# DATABASE_URL=postgres://数据库用户名:数据库密码@192.168.2.2:4432/数据库名
# 这里的数据库名就是在搭建第一步的时候,最后设置的数据库
DATABASE_URL=postgres://postgresql:postgresql@192.168.2.2:4432/postgresql
#Casdoor必须的环境变量
#加密敏感信息的秘钥,可以使用 openssl rand -base64 32 生成(飞牛nas使用ssh登录后输入`openssl rand -base64 32`命令即可获取,保持默认也可)
NEXT_AUTH_SECRET=*G7R4zFZk4mDaqvBIu3Yq4wD4tK/Ebzphx0HwDVrWX0Y=*
#你使用的sso的类型,不需要修改
NEXT_AUTH_SSO_PROVIDERS=casdoor
#Casdoor中设置的应用中的客户端ID和客户端秘钥
AUTH_CASDOOR_ID=3fd6d6c63c53cfc9bfec
AUTH_CASDOOR_SECRET=f2b4d13cc01f2b3f13b82efb2e6d028303e6f19f
#填写casdoor访问地址即可
AUTH_CASDOOR_ISSUER=http://192.168.2.2:8002
AUTH_CASDOOR_ISSUER=https://Casdoor.cn:10
#填写的lobechat的地址,请注意你的端口,要和前面APP_URL一样哦
NEXTAUTH_URL=http://192.168.2.2:3210/api/auth
NEXTAUTH_URL=https://lobechat.cn:10/api/auth
#debug,用来看日志反馈
NEXT_AUTH_DEBUG=1
#minIO,s3必须的环境变量
#id
S3_ACCESS_KEY_ID=r1TXawOyhP0oaUJqmYCR
#秘钥
S3_SECRET_ACCESS_KEY=ftywcS58H48PnKETet3ulqvyOxCJc2B15PiXGMhS
#minIO访问的API地址,端口更改了请注意
S3_ENDPOINT=http://192.168.2.2:9000
S3_ENDPOINT=https://Minio.cn:10
#minIO,s3桶名
S3_BUCKET=lobechat
#minIO,s3访问地址
S3_PUBLIC_DOMAIN=http://192.168.2.2:9001
#minIOweb访问地址非必须
S3_PUBLIC_DOMAIN=https://minioweb.cn:10
现在就是完全体了,可以内外网访问,登录注册都可以的。
祝大家折腾愉快~
文章参考学习:5ee博客