LobeChat本地数据库Clerk版本部署指南
本指南详细介绍如何自定义构建并部署LobeChat服务端数据库版本,同时集成Clerk身份验证服务和Cloudflare R2存储服务。
前期准备
在开始之前,请确保您具备以下条件:
- Linux服务器(本例使用CentOS)
- 安装Git、Docker和Docker Compose
- GitHub账号
- Docker Hub账号
- Cloudflare账号(用于R2存储服务)
- Clerk账号
- 域名
配置Clerk身份验证服务
步骤1:创建Clerk应用
- 前往Clerk官网注册并创建新应用。
步骤2:获取环境变量
2.1 添加公、私钥环境变量
- 在Clerk控制面板的"API Keys"页面获取以下密钥:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
CLERK_SECRET_KEY
- 将这些值添加到环境变量中。
2.2 在Clerk中创建并配置Webhook
- 在Clerk控制面板中添加新的Webhook端点。
- 设置endpoint URL为:
https://your-project.com/api/webhooks/clerk
订阅以下用户事件:
user.created
user.updated
user.deleted
2.3 将Webhook秘钥添加到环境变量
- 在Webhook详情页面获取秘钥。
- 添加到环境变量:
CLERK_WEBHOOK_SECRET
环境变量总览
完成以上步骤后,您已经成功配置了Clerk身份验证服务,并获取了所有必要的环境变量:
♾️ text 代码:NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_live_xxxxxxxxxxx CLERK_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxxxxxxxx CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxx
配置Cloudflare R2存储服务
配置并获取S3存储桶
- 登录Cloudflare账户,进入R2存储服务界面。
- 创建新的存储桶。
获取存储桶相关环境变量
- 在R2存储桶的设置中,找到桶配置信息。
- 记录以下环境变量:
S3_BUCKET=lobechat
S3_ENDPOINT=https://xxxxx.r2.cloudflarestorage.com
S3_PUBLIC_DOMAIN=https://s3-for-lobechat.your-domain.com
获取S3密钥环境变量
- 在R2控制面板中创建API令牌。
- 记录Access Key ID和Secret Access Key。
配置跨域
- 在R2存储桶设置中配置CORS规则。
- 允许您的应用域名的请求。
[
{
"AllowedOrigins": ["https://your-project.vercel.app"],
"AllowedMethods": ["GET", "PUT", "HEAD", "POST", "DELETE"],
"AllowedHeaders": ["*"]
}
]
环境变量总览
完成上述步骤后,您应该有以下环境变量:
♾️ shell 代码:# S3 秘钥
S3_ACCESS_KEY_ID=9998d6757e276cf9f1edbd325b7083a6
S3_SECRET_ACCESS_KEY=55af75d8eb6b99f189f6a35f855336ea62cd9c4751a5cf4337c53c1d3f497ac2
# 存储桶的名称
S3_BUCKET=lobechat
# 存储桶的请求端点
S3_ENDPOINT=https://0b33a03b5c993fd2f453379dc36558e5.r2.cloudflarestorage.com
# 存储桶对外的访问域名
S3_PUBLIC_DOMAIN=https://s3-dev.your-domain.com
# 桶的区域,如 us-west-1,一般来说不需要添加,但某些服务商则需要配置
# S3_REGION=us-west-1
部署LobeChat服务
步骤1:克隆LobeChat仓库
♾️ bash 代码:git clone https://github.com/lobehub/lobe-chat.git
cd lobe-chat
步骤2:修改Dockerfile
- 重命名
Dockerfile.database
为Dockerfile
。
rm -rf Dockerfile
mv Dockerfile.database Dockerfile
vim Dockerfile
- 添加必要的clear环境变量。
# Sentry
ENV NEXT_PUBLIC_SENTRY_DSN="" \
SENTRY_ORG="" \
SENTRY_PROJECT=""
#添加在这个位置即可
# clear
ENV NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_Z3Jvd24tdHVuYS03MC5jbGVyay5hY2NvdW50cy5kZXYk
ENV CLERK_WEBHOOK_SECRET=whsec_eF8VfCRwiGvz8mGD2roYQ8GgxYzVnqFs
步骤3:构建自定义Docker镜像
♾️ bash 代码:docker build -t your-dockerhub-username/lobe-chat-database:custom .
步骤4:准备Docker Compose文件
创建docker-compose.yml
文件,包含PostgreSQL和LobeChat服务配置。
♾️ yaml 代码:这里我们可以新建一个文件夹,后续可以方便的迁移整个服务。
cd / && mkdir lobe-chat-datebase && cd lobe-chat-datebase && vim docker-compose.yml
version: '3.3'
services:
postgres:
image: pgvector/pgvector:pg16
container_name: lobe-postgres
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
- lobe-network
ports:
- "5432:5432"
lobe-chat:
image: your-dockerhub-username/lobe-chat-database:custom #你构建的镜像名称
container_name: lobe-chat
environment:
- APP_URL=https://your-app-url.com
- DATABASE_URL=postgres://postgres:mysecretpassword@postgres:5432/postgres
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_live_xxxxxxxxxxx
- CLERK_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxxxxxxxx
- CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxx
- KEY_VAULTS_SECRET=xxxx
- S3_SECRET_ACCESS_KEY=xxxxx
- S3_ACCESS_KEY_ID=xxxxx
- S3_PUBLIC_DOMAIN=xxxxx
- S3_ENDPOINT=xxxxxxx
- S3_BUCKET=xxxxxxx
- DATABASE_DRIVER=node
- NEXT_PUBLIC_SERVICE_MODE=xxxxxxx
networks:
- lobe-network
ports:
- "3212:3210"
depends_on:
- postgres
networks:
lobe-network:
driver: bridge
步骤5:启动服务
♾️ bash 代码:docker-compose up -d
注意事项
- 确保服务器防火墙设置正确。
- 使用安全的方式管理敏感信息。
- 定期备份数据库。
- 代码修改后需要重新构建镜像。
结论
通过本指南,您已经成功部署了LobeChat服务端数据库版本,并集成了Clerk身份验证和Cloudflare R2存储服务。这种部署方式虽然需要更多手动配置,但提供了更大的灵活性和控制力。
如果在部署过程中遇到任何问题,欢迎查阅LobeChat的官方文档或在社区中寻求帮助。祝您部署顺利!