Docker部署LobeChat服务端数据库版本
2024-12-05
1. 前言
LobeChat 是一款支持多模型服务商、智能体商店、具备丰富插件的大模型 API 调用的 WebUI
目前 LobeChat 的自部署方式包括客户端数据库和服务端数据库模式两种,之前一直使用部署在 Vercel 的客户端数据库版本,好处是不需要使用数据库,缺点是数据不支持跨设备同步。随着 LobeChat 的持续开发,一些新特性如文件上传、知识库、创建子话题等特性属于服务端数据库独有,于是决定在服务器上部署 LobeChat 的服务端数据库版本
2. 前置条件
准备一台至少 2G 内存的云服务器,推荐使用海外服务器,这样请求 OpenAI、Google 等海外服务商 API 也不需要使用代理了,服务器提前安装好最新版的 Docker
根据官方文档,想要完整的运行 LobeChat 数据库版本需要至少拥有如下四个服务
-
LobeChat 数据库版本自身
-
带有 PGVector 插件的 PostgreSQL 数据库
-
支持 S3 协议的对象存储服务
-
受 LobeChat 支持的 SSO 登录鉴权服务
官方默认使用 MinIO 作为本地 S3 对象存储服务,使用 Casdoor 作为本地鉴权服务,这里为了节省服务器资源,本文采用 Cloudflare R2 作为对象存储服务,使用 Auth0 作为鉴权服务
3. 安装
3.1. 配置 Cloudflare R2
此部分内容按照官方文档 S3_ACCESS_KEY_ID
、S3_SECRET_ACCESS_KEY
、S3_BUCKET
、S3_ENDPOINT
、S3_PUBLIC_DOMAIN
3.2. 配置 Auth0
此部分内容按照官方文档 NEXT_AUTH_SECRET
、NEXT_AUTH_SSO_PROVIDERS
、AUTH_AUTH0_ID
、AUTH_AUTH0_SECRET
、AUTH_AUTH0_ISSUER
、NEXTAUTH_URL
3.3. 编辑配置文件
创建.env
文件,将相应的环境变量进行替换
# 代理相关,如果需要的话(比如使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://localhost:7890
# HTTPS_PROXY=http://localhost:7890
# 网站域名
APP_URL=https://xxxx.com
# Postgres 相关
# 用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRET=xxxxx
# 数据库名称
LOBE_DB_NAME=lobechat
# 数据库密码
POSTGRES_PASSWORD=xxxxxx
# NEXT_AUTH 相关
NEXT_AUTH_SECRET=3904039cd41ea1bdf6c93db0db96e250
NEXT_AUTH_SSO_PROVIDERS=auth0
NEXTAUTH_URL=https://your-prod-domain.com/api/auth
AUTH_AUTH0_ID=xxxxxx
AUTH_AUTH0_SECRET=cSX_xxxxx
AUTH_AUTH0_ISSUER=https://lobe-chat-demo.us.auth0.com
# S3 相关
S3_ACCESS_KEY_ID=xxxxxxxxxx
S3_SECRET_ACCESS_KEY=xxxxxxxxxx
# 用于 S3 API 访问的域名
S3_ENDPOINT=https://xxxxxxxxxx.r2.cloudflarestorage.com
S3_BUCKET=lobechat
# 用于外网访问 S3 的公共域名,需配置 CORS
S3_PUBLIC_DOMAIN=https://s3-for-lobechat.your-domain.com
# 其他环境变量,视需求而定,可以参照客户端版本的环境变量配置,注意不要有 ACCESS_CODE
# OPENAI_API_KEY=sk-xxxx
# OPENAI_PROXY_URL=https://api.openai.com/v1
# OPENAI_MODEL_LIST=...
创建 docker-compose.yml
文件
services:
postgresql:
image: pgvector/pgvector:pg16
container_name: lobe-postgres
ports:
- '5432:5432'
volumes:
- './data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_DB=${LOBE_DB_NAME}'
- 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 5s
retries: 5
restart: always
lobe:
image: lobehub/lobe-chat-database
container_name: lobe-database
ports:
- '3210:3210'
depends_on:
- postgresql
environment:
- 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
env_file:
- .env
restart: always
volumes:
data:
driver: local
s3_data:
driver: local
3.4. 运行
docker compose up -d
3.5. 反向代理
在 Nginx 反向代理 3210 端口,域名与 APP_URL
保持一致
3.6. 禁用注册
如果想要独立使用 Auth0 认证服务,不想让外人注册,可以在 Auth0 控制台的 Authentication -> Database -> Username-Password-Authentication -> Settings -> Disable Sign Ups 处将开关打开即可