Docker部署LobeChat服务端数据库版本

2024-12-05

1. 前言

LobeChat 是一款支持多模型服务商、智能体商店、具备丰富插件的大模型 API 调用的 WebUI

https://lobehub.com/zh

目前 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

此部分内容按照官方文档 https://lobehub.com/zh/docs/self-hosting/advanced/s3/cloudflare-r2 配置即可,需要用到的环境变量包括 S3_ACCESS_KEY_IDS3_SECRET_ACCESS_KEYS3_BUCKETS3_ENDPOINTS3_PUBLIC_DOMAIN

3.2. 配置 Auth0

此部分内容按照官方文档 https://lobehub.com/zh/docs/self-hosting/advanced/auth/next-auth/auth0 配置即可,需要用到的环境变量包括 NEXT_AUTH_SECRETNEXT_AUTH_SSO_PROVIDERSAUTH_AUTH0_IDAUTH_AUTH0_SECRETAUTH_AUTH0_ISSUERNEXTAUTH_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 处将开关打开即可