type
status
date
slug
summary
tags
category
password
icon
AI 摘要
0 Preface
Lobe Chat 是现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架,支持语音合成、多模态、可扩展的(function call)插件系统。
笔者厌倦了使用代理连接国外的 AI 服务,也烦于在各大模型服务商来回切换,故想将将各类 AIGC 接口整合到一体便于个人使用。
本次部署记录分为两个部分,分别是
客户端版本
和 服务端数据库版
,其中客户端版本几乎无需成本,而服务端版本则至少要求一台服务器。1 Client
部署该版本的操作十分简单,故其记录也将简化
1.1 前期准备
1.2 复刻项目
将 LobeChat 的项目复刻到自己的 GitHub 账户中,根据自己的需求可对项目代码进行修改。
1.3 部署项目
在 Vercel 平台并导入自己 GitHub 账户的 LobeChat 仓库,以此新建一个 Next.js 框架的项目。
图中的环境变量根据需要设置,例如我仅有 Google Gemini 的 API 则可以提前设置
GOOGLE_API_KEY
这一个变量。1.4 其他事项
以上步骤完成后,即代表部署完毕,便可开始使用。
绑定自定义域名(可选):Vercel 分配的域名 DNS 在某些区域被污染了,绑定自定义域名即可直连。
2 Server
本章将详细介绍如何在 Vercel 中部署服务端数据库版 LobeChat,包括:
- 数据库配置;
- 身份验证服务配置;
- S3 存储服务的设置步骤
2.1 配置数据库
本次记录使用 Vercel 平台集成的 Postgres 数据库实例,即使用 Vercel / Neon 等 Serverless Postgres 实例。
2.1.1 连接数据库实例
在 Vercel 的部署环境变量中,添加
DATABASE_URL
等环境变量,将上一步准备好的 Postgres 数据库连接 URL 填入其中。数据库连接 URL 的通常格式为 postgres://username:password@host:port/database
。2.1.2 进入服务端数据库
指定 service mode 为 server,
NEXT_PUBLIC_SERVICE_MODE=server
,否则不会进入服务端数据库。2.1.3 添加存储密钥
在完成数据库
DATABASE_URL
环境变量添加后,需要添加一个 KEY_VAULTS_SECRET
环境变量。该变量用于加密用户存储的 apikey 等敏感信息,可以使用 openssl rand -base64 32 生成一个随机的 32 位字符串 作为密钥。2.1.4 添加应用链接
该部分最后需要添加
APP_URL
环境变量,用于指定 LobeChat 应用的 URL 地址,如本次部署地址 https://chat.forimagine.eu.org
。2.2 配置身份验证服务
服务端数据库需要搭配用户身份验证服务才可以正常使用,因此需要配置对应的身份验证服务。
2.2.1 添加公私钥
前往 Clerk 注册并创建应用,获取相应的 Public Key 和 Secret Key。
添加
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
和 CLERK_SECRET_KEY
环境变量。2.2.2 创建并配置 Webhook
由于需要让 Clerk 完全接管用户鉴权与管理,因此在 Clerk 用户生命周期变更时(创建、更新、删除)中通知我们的应用并存储落库。我们通过 Clerk 提供的 Webhook 来实现这一诉求。
我们需要在 Clerk 的 Webhooks 中添加一个端点(Endpoint),告诉 Clerk 当用户发生变更时,向这个端点发送通知。
在 endppint 中填写你的 Vercel 项目的 URL,如
https://chat.forimagine.eu.org/api/webhooks/clerk
。然后在订阅事件(Subscribe to events)中,勾选 user 的三个事件(user.created
、user.deleted
、user.updated
),然后点击创建。创建完毕后,可以在右下角找到该 Webhook 的秘钥。这个秘钥所对应的环境变量名为
CLERK_WEBHOOK_SECRET
。2.3 配置存储服务
在服务端数据库中我们需要配置 S3 存储服务来存储文件,若非自己部署的存储服务则建议通过官方文档来设置。
本次部署记录使用的是通过 MinIO 自定义部署的兼容 S3 的存储服务。S3 所指代的是指兼容 S3 存储方案,即支持 Amazon S3 API 的对象存储系统,常见例如 Cloudflare R2 、阿里云 OSS 等均支持 S3 兼容 API。
2.3.1 部署 MinIO
本次部署记录使用的是 Ubuntu 系统:
配置环境变量,创建文件:
文件添加以下配置:
创建服务配置文件:
启动 MiniIO 服务:
2.3.2 创建存储桶和访问用户
此步建议参考官方文档——使用 Docker Compose 部署 LobeChat 服务端数据库版本
1)创建一个存储桶
chat-bucket1
,并设置访问策略 Access Policy:注意修改桶名称和跨域配置2)新建一个用户及其 Access Key,注意需要给予其读写权限:
此时可以获取
S3_ACCESS_KEY_ID
和 S3_SECRET_ACCESS_KEY
两个变量2.3.3 Nginx 反代 MinIO API 端口
由于通过 Vercel 部署服务端 LobeChat 时不支持直接使用 IP:port 地址作为请求端点,因而需要在服务器对这一端口进行反向代理。反向代理是指将客户端的请求转发到后端服务器,并将后端服务器的响应返回给客户端,通常用于负载均衡、隐藏后端服务器等。
1)编辑Nginx配置文件:
2)添加反向代理配置:
3)启用配置并重启Nginx:
4)完成以上步骤后,即获取了存储桶的请求端点和对外访问域名:
S3_ENDPOINT
和 S3_PUBLIC_DOMAIN
,即为添加的自定义域名,该域名转发到指定 IP 的端口。3 Finished
通过上述步骤之后,我们应该就完成了客户端或服务端数据库的配置。接下来我们可以将 LobeChat 部署到 Vercel 上,然后访问你的 Vercel 链接,验证客户端或服务端数据库是否正常工作。