type
status
date
slug
summary
tags
category
icon
password
前提以及避坑
使用docker部署,需要有自己的域名,又cloudflare,auth0账号,linux服务器
服务器虽然默认打开的https的入端口443,但是后续分块上传的时候可能用的是特殊的通信方式不得而知,因此打开tcp协议的入端口443很有必要,这样会允许所有基于 TCP 的流量,而不限定协议类型。—这一步没问题则可以分块成功
注意构建知识库的时候要导入utf-8的编码格式;
分块之后还要进行向量化,向量化失败的话原因就是因为用的api key不对,所有厂商的api key都轻易能支持对话服务,价格还不一样,有的价格很便宜,但是满足对话需求足够了,但是这种api key在不为人知的地方显然没有完全支持openai的官方api接口,这就是导致向量化失败的原因;
我之前一直用的deepbrick作为第三方api key供应商,这家只把key用来对话,没发现有什么问题,而且及其耐用,这次向量化搭建知识库的时候才意识到为什么这么便宜;
目前试下来使用openai的官方api key或者aihubmix 的key都没有问题可以正常向量化;
注意向量化的价格相对于对话来说会陡增,且效果看个人,毕竟知识简单的分块,并不是真的构建一个知识图谱,服务端版本最有用的功能感觉还是对话分支;
S3对象存储系统配置
S3 (Simple Storage Service) 是 Amazon Web Services (AWS) 提供的一种对象存储服务。它允许用户存储和检索任何量的数据,具有高度的可扩展性、可用性、耐久性和安全性。S3 使用对象存储方式,这意味着数据被存储为对象,每个对象有一个唯一的ID和相关的元数据。S3 常用于备份、归档、内容分发、大数据分析等场景。配置s3存储是为了为了构建自己的知识库;
这里使用cloudflare的R2存储,S3和R2提供相同的 API,不只是cloudflare,Alibaba Cloud OSS,MinIO等很多存储系统都兼容S3 API;
记得增加CORS策略
之后得到如下参数:
S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEY,S3_BUCKET,S3_ENDPOINT
身份验证服务配置
服务端选择使用nextauth进行身份验证,选择auth0作为提供该服务的平台;
NextAuth.js 是一个用于 Next.js 应用程序的开源认证库,它提供了易于集成的身份验证解决方案,它可以和多个商业化的身份验证平台进行集成比如Auth0,Cloudflare Zero Trust,Logto等;
这里使用auth0作为验证平台;
参考配置 Auth0 身份验证服务
得到
NEXT_AUTH_SECRET,NEXT_AUTH_SSO_PROVIDERS,NEXTAUTH_URL,AUTH_AUTH0_ID,AUTH_AUTH0_SECRET,AUTH_AUTH0_ISSUER
这些参数auth0后续设置
auth0默认配置好后是允许自行注册,和谷歌登陆的,有可能导致网站被大量访问;auth0不能直接修改用户头像
禁用自助注册和谷歌登陆:
- 登录到Auth0管理控制台。导航到“Authentication” > “Database”。选择正在使用的数据库连接。在“Settings”选项卡中,找到“Disable Sign Ups”选项,并将其启用。保存更改。
- 在”Applications” > “Connections”里关闭谷歌登陆
- 在”User management” > “Users”里可以手动添加用户
更改user头像
- 在dashboard-Applications-APIs-API exployer中获得超长的
MGMT_API_ACCESS_TOKEN
- 在dashboard-Applications-Applications-选择你的application-settings中获得
Domain
比如dev-g***********1.jp.auth0.com
- 在dashboard-User Management-Users中找到
user_id
- 随便找个地方输入下面代码即可更改头像,本质上是通过api更改更改Users的Raw Json
购买openai 的apikey
得到
OPENAI_PROXY_URL,OPENAI_API_KEY
部署lobechat-database server
配置docker网络和本地postgres数据库
额外补充
lobechat数据库版本的数据是存储在服务器因此需要配置数据库,而lobechat的非数据库版本数据是存储在用户本地,存储咋浏览器的存储系统中,谷歌浏览器的话则是IndexedDB
路径通常是
创建一个配置文件
配置文件填写以下内容:
NEXT_AUTH_SECRET,KEY_VAULTS_SECRET
这两个参数可以直接通过 openssl rand -base64 32
生成数据库连接 URL
postgres://
:表示这是一个 PostgreSQL 数据库的连接协议。
postgres
:postgres数据库的默认就有的用户名。可以自定义其他用户
yourpassword
:数据库用户名postgres
的密码,和 Docker 命令中设置的一致。
@my-postgres:5432
:指定数据库服务器的主机和端口。my-postgres
是容器的名字可以自定义,通过 Docker 网络可以通过这个名字访问容器。5432
是 PostgreSQL 默认的端口。
/postgres
:指定要连接的数据库名称可以自定义。postgres
是默认就有的数据库名。
安装镜像启动容器
之后就可以在服务端的3210端口进入lobechat,通过nginx反代就可以通过域名访问
自动更新脚本
将下面的脚本保存为
/root/lobechat.sh
,之后crontab -e
命令,加入一行代码0 1 * * * /root/lobechat.sh
,即可实现每日一点钟自动更新数据备份
按照上面的更新步骤删除旧容器和镜像创建新容器镜像,这个步骤并不会丢失数据,但是如果是更换主机,或者重新安装数据库,则需要自己备份数据,下面的步骤可以自己写成自动化脚本,不过就几行命令也没啥必要我就不写了
用vscode可视化查看数据库
lobechat数据库版本无法在前端时导出数据,因此需要直接对数据库进行操作,先看一下postgres数据库里面长什么样子;
在vscode中下载如图所示下面的几个插件:




然后在vscode中按照图示点击

如图填写即可,lobechat默认使用用户postgres的postgres数据库,当然记得在自己的服务器控制台打开5432端口

连接之后就可以查看数据库里到底有什么内容,比如users,右键点击show table records即可

数据导出和备份
进入数据库容器内部
导出备份数据
退出数据库至容器内部(不要退出到到服务器主机了),然后
导入备份数据
假设主机上已经有了/root/lobechat_backup.sql的文件
- 作者:JIAHE
- 链接:https://blog.jiaheliu.top/Technical-Notes/lobechat-database-server-deploy
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。