所有文章

私有化部署LobeChat的数据库版本

最后修改

calendar-icon

作者

阅读时间

read-time-icon 12 min read

浏览量

view-count-icon

摘要: LobeChat 是可与人工智能对话的聊天机器人,其数据库版本能选不同知识库对话,多端同步记录,本教程详细解说了在腾讯云购买服务后,从部署前提、新建文件及配置、拉取镜像、域名解析到登录 Logto、MinIO 配置等一系列自托管部署步骤,还涵盖更新及常见问题解决方法(如向量化失败),并提供参考资料。

CleanShot 2024-12-21 at 14.36.06_副本.gif

简介

LobeChat 是一个聊天机器人,它可以帮助你与人工智能(AI)进行对话。你可以用它来问问题、获取信息,甚至进行创意交流。

我在自己服务器托管了LobeChat已经使用了大半年了,使用体验非常棒,UI 设计颜值很高,安装也很简单,而且全部本地化操作,不会经过第三方泄露隐私,个人觉得非常完美!真正做到了私人的 AI 助手!

1734762781404.gif

今天重新部署了LobeChat最新推出的数据库版本,让我实现了:

  • 可以选择不同的知识库,进行知识库对话聊天

  • 手机端、电脑端、网页端都可以同步聊天记录 1734762840247.webp

本教程将对如何部署LobeChat的数据库版本 进行详细解说。

部署前提

可在腾讯云购买以下服务

1.服务器:有一台2核2G内存的服务器(Debian系统)

2.域名:一个属于自己的域名,也可以在腾讯云购买

3.服务器面板:本文将通过1panel服务器面板进行

4.1panel提前安装好OpenResty(nginx)

CleanShot 2024-12-14 at 11.09.34@2x (1).webp

开始部署

新建.env 和 docker-compose.yml 文件

CleanShot 2024-12-14 at 11.07.08@2x (1).webp

将以下内容输入进去

.env

# 必填,LobeChat 域名,用于 tRPC 调用
# 请保证此域名在你的 NextAuth 鉴权服务提供商、S3 服务商的 CORS 白名单中
APP_URL=https://lobe.example.com/

# Postgres 相关,也即 DB 必需的环境变量
# 必填,用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ=
# 必填,Postgres 数据库连接字符串,用于连接到数据库
# 格式:postgresql://username:password@host:port/dbname,如果你的 pg 实例为 Docker 容器且位于同一 docker-compose 文件中,亦可使用容器名作为 host
DATABASE_URL=postgresql://postgres:uWNZugjBqixf8dxC@postgresql:5432/lobe

# NEXT_AUTH 相关,也即鉴权服务必需的环境变量
# 可以使用 auth0、Azure AD、GitHub、Authentik、Zitadel、Logto 等,如有其他接入诉求欢迎提 PR
# 目前支持的鉴权服务提供商请参考:https://lobehub.com/zh/docs/self-hosting/advanced/auth#next-auth
# 如果你有 ACCESS_CODE,请务必清空,我们以 NEXT_AUTH 作为唯一鉴权来源
# 必填,用于 NextAuth 的密钥,可以使用 openssl rand -base64 32 生成
NEXT_AUTH_SECRET=NX2kaPE923dt6BL2U8e9oSre5RfoT7hg
# 必填,指定鉴权服务提供商,这里以 Logto 为例
NEXT_AUTH_SSO_PROVIDERS=logto
# 必填,NextAuth 的 URL,用于 NextAuth 的回调
NEXTAUTH_URL=https://lobe.example.com/api/auth

# NextAuth 鉴权服务提供商部分,以 Logto 为例
# 其他鉴权服务提供商所需的环境变量,请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/auth
AUTH_LOGTO_ID=YOUR_LOGTO_ID
AUTH_LOGTO_SECRET=YOUR_LOGTO_SECRET
AUTH_LOGTO_ISSUER=https://lobe-auth-api.example.com/oidc

# 代理相关,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://localhost:7890
# HTTPS_PROXY=http://localhost:7890

# S3 相关,也即非结构化数据(文件、图片等)存储必需的环境变量
# 这里以 MinIO 为例
# 必填,S3 的 Access Key ID,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
S3_ACCESS_KEY_ID=YOUR_S3_ACCESS_KEY_ID
# 必填,S3 的 Secret Access Key,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
S3_SECRET_ACCESS_KEY=YOUR_S3_SECRET_ACCESS_KEY
# 必填,S3 的 Endpoint,用于服务端/客户端连接到 S3 API
S3_ENDPOINT=https://lobe-s3-api.example.com
# 必填,S3 的 Bucket,直到在 MinIO UI 中手动创建之前都是无效的
S3_BUCKET=lobe
# 必填,S3 的 Public Domain,用于客户端通过公开连接访问非结构化数据
S3_PUBLIC_DOMAIN=https://lobe-s3-api.example.com
# 选填,S3 的 Enable Path Style
# 对于主流 S3 Cloud 服务商,一般填 0 即可;对于自部署的 MinIO,请填 1
# 请参考:https://lobehub.com/zh/docs/self-hosting/advanced/s3#s-3-enable-path-style
S3_ENABLE_PATH_STYLE=1

# 其他基础环境变量,视需求而定。注意不要有 ACCESS_CODE
# 请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/basic
# 请注意,对于服务端版本,其 API 必须支持嵌入(OpenAI text-embedding-3-small)模型,否则无法对上传文件进行处理,但你无需在 OPENAI_MODEL_LIST 中指定此模型
# OPENAI_API_KEY=sk-xxxx
# OPENAI_PROXY_URL=https://api.openai.com/v1
# OPENAI_MODEL_LIST=...

为了安全和更加适合自己使用,需要以上一些配置做一些修改:

假设你的域名是domain.com

  • 更改LobeChat登陆域名:将 APP_URL=https://lobe.example.com/ 改为 APP_URL=https://ai.domain.com/

  • 更改Logto服务端API域名:将 AUTH_LOGTO_ISSUER=https://lobe-auth-api.example.com/oidc 改为 AUTH_LOGTO_ISSUER=https://lobe-auth-api.domain.com/oidc

  • 更改Nextauth的回调地址: NEXTAUTH_URL=https://lobe.example.com/api/auth 改为 NEXTAUTH_URL=https://ai.domain.com/api/auth


更改MinIO API 域名

  • S3_ENDPOINT=https://lobe-s3-api.example.com 改为 S3_ENDPOINT=https://lobe-s3-api.domain.com

  • S3_PUBLIC_DOMAIN=https://lobe-s3-api.example.com 改为 S3_PUBLIC_DOMAIN=https://lobe-s3-api.domain.com


为了让程序更加健壮

  • 更改数据库密码: uWNZugjBqixf8dxC 改为 KDOLckfjwPDiLLzq88,密码自己设置即可

  • 更改MinIO的存储桶名字:将 S3_BUCKET=lobe 改为 S3_BUCKET=pipu-lobe-minio-s3



docker-compose.yml

name: lobe-chat-database
services:
  postgresql:
    image: pgvector/pgvector:pg16
    container_name: lobe-postgres
    ports:
      - '5432:5432'
    volumes:
      - './data:/var/lib/postgresql/data'
    environment:
      - 'POSTGRES_DB=lobe'
      - 'POSTGRES_PASSWORD=uWNZugjBqixf8dxC'
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U postgres']
      interval: 5s
      timeout: 5s
      retries: 5
    restart: always

  minio:
    image: minio/minio
    container_name: lobe-minio
    ports:
      - '9000:9000'
      - '9001:9001'
    volumes:
      - './s3_data:/etc/minio/data'
    environment:
      - 'MINIO_ROOT_USER=YOUR_MINIO_USER'
      - 'MINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD'
      - 'MINIO_DOMAIN=lobe-s3-api.example.com'
      - 'MINIO_API_CORS_ALLOW_ORIGIN=https://lobe.example.com' # Your LobeChat's domain name.
    restart: always
    command: >
      server /etc/minio/data --address ":9000" --console-address ":9001"

  logto:
    image: svhd/logto
    container_name: lobe-logto
    ports:
      - '3001:3001'
      - '3002:3002'
    depends_on:
      postgresql:
        condition: service_healthy
    environment:
      - 'TRUST_PROXY_HEADER=1'
      - 'DB_URL=postgresql://postgres:uWNZugjBqixf8dxC@postgresql:5432/logto'
      - 'ENDPOINT=https://lobe-auth-api.example.com'
      - 'ADMIN_ENDPOINT=https://lobe-auth-ui.example.com'
    entrypoint: ['sh', '-c', 'npm run cli db seed -- --swe && npm start']

  lobe:
    image: lobehub/lobe-chat-database
    container_name: lobe-chat
    ports:
      - '3210:3210'
    depends_on:
      - postgresql
      - minio
      - logto
    env_file:
      - .env
    restart: always

volumes:
  data:
    driver: local
  s3_data:
    driver: local

为了安全和更加适合自己使用,需要以上一些配置做一些修改:


假设你的域名是domain.com

  • 更改Logto的Web端登陆地址:将 lobe-auth-ui.example.com 改为 lobe-auth-ui.domain.com

  • 更改MinIO API域名:将 MINIO_DOMAIN=lobe-s3-api.example.com 改为 MINIO_DOMAIN=lobe-s3-api.domain.com

  • 更改MinIO的API跨域请求域名: MINIO_API_CORS_ALLOW_ORIGIN=https://ai.domain.com 改为 MINIO_API_CORS_ALLOW_ORIGIN=https://ai.domain.com

  • 更改MinIO的Endpoint端点: ENDPOINT=https://lobe-auth-api.domain.comENDPOINT=https://lobe-auth-api.domain.com


为了让程序更加健壮

  • 更改Minio的Root用户名和密码 :将 MINIO_ROOT_USER=YOUR_MINIO_USERMINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD 改成自己的账号和密码

  • 更改数据库密码:

  1. POSTGRES_PASSWORD=uWNZugjBqixf8dxC 改为 POSTGRES_PASSWORD=KDOLckfjwPDiLLzq88,需要跟上面.env文件,刚才设置的数据库密码一致

  2. DB_URL=postgresql://postgres:uWNZugjBqixf8dxC@postgresql:5432/logto 改为 DB_URL=postgresql://postgres:KDOLckfjwPDiLLzq88@postgresql:5432/logto

拉取镜像

在LobeChat目录下面运行docker compose up -d

cd /root/pipu/lobechat
docker compose up -d

88555.webp

容器启动成功了

5566221.webp

域名解析

需要去腾讯云解析以下域名

ai.domain.com

lobe-auth-api.domain.com

lobe-auth-ui.domain.com

lobe-s3-api.domain.com

lobe-s3-ui.domain.com

  • 方案 1:A 记录解析,缺点是会暴漏服务器ip,但一般没啥事没人会攻击你

  • 方案2:反向代理:隐藏源服务器ip,相对比较安全

登录Logto

按照上面的配置,Logto的登陆地址是:lobe-auth-ui.domain.com

登录以后需要注册账号,默认第一个注册账号是管理员,然后创建Next.js(App Router)

CleanShot 2024-12-14 at 20.31.25@2x (1).webp

CleanShot 2024-12-14 at 20.31.52@2x (1).webp

按照前文的配置,我们填入以下信息

  • 配置 Redirect URI 为 https://ai.domain.com/api/auth/callback/logto

  • Post sign-out redirect URI 为 https://ai.domain.com

  • 配置 CORS allowed origins 为 https://lobe.example.com

CleanShot 2024-12-14 at 20.34.18@2x (1).webp

复制APPID ,粘贴到 .env 文件中的 AUTH_LOGTO_ID

复制 Default secret,粘贴到 .env 文件中的 AUTH_LOGTO_SECRET

CleanShot 2024-12-14 at 22.27.36@2x (1).webp

复制以后,.env 是这样

AUTH_LOGTO_ID=gffs32dsdfawrsfio7327
AUTH_LOGTO_SECRET=SLKUrRtE2pM21fsBixDUxJ32gmAV21CG
AUTH_LOGTO_ISSUER=https://lobe-auth-api.domain.com/oidc

Usre management新建用于登录LobeChat的用户 CleanShot 2025-01-09 at 21.05.49@2x.webp

最后一步,进入左侧栏 Sign-in experience(登录管理) ,关闭新用户注册

CleanShot 2024-12-14 at 22.34.20@2x (1).webp

现在,关于Logto的鉴权的配置,就已经弄好了!

MinIO配置

如果你按照前文配置,打开以下地址访问MiniWebUI前端控制面板:https://lobe-s3-ui.domain.com

1.在登录界面输入你设置的 MINIO_ROOT_USER MINIO_ROOT_PASSWORD,然后点击登录

CleanShot 2024-12-15 at 10.19.32@2x (1).webp

2.创建存储桶

按照前文的.env 配置,存储桶的名字需要用 pipu-lobe-minio-s3

点击左侧 Buckets ,然后点击 Create Bucket,输入存储桶的名称 pipu-lobe-minio-s3

CleanShot 2024-12-15 at 10.24.38@2x 拷贝 (1).webp

CleanShot 2024-12-15 at 10.20.23@2x (1).webp

3.设置访问策略

点击 Summary , 再点击 Access Policy CleanShot 2024-12-15 at 10.33.24@2x (1).webp

Access Policy:改成Custom

Write Policy:复制下面的minio-bucket-config.json文件内容,粘贴并且覆盖进来

CleanShot 2024-12-15 at 10.35.10@2x (1).webp

minio-bucket-config.json

(此处默认你的桶名为 pipu-lobe-minio-s3,如果你的Minio桶名是其他名字,需要将 pipu-lobe-minio-s3改为你的桶名)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::pipu-lobe-minio-s3"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::pipu-lobe-minio-s3"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "files/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::pipu-lobe-minio-s3/files/**"
            ]
        }
    ]
}

4.创建新的访问密钥

将 Access Key 填入 .env 文件中的 S3_ACCESS_KEY_ID

将 Secret Key 填入 .env 文件中的 S3_SECRET_ACCESS_KEY CleanShot 2025-01-09 at 21.15.27@2x.webp

最后,重启LobeChat服务

cd /root/pipu/lobechat
docker compose up -d

现在已经成功部署了LobeChat 数据库版本啦!你可以通过自己的域名,如 ai.domain.com 访问LobeChat了!

CleanShot 2024-12-15 at 10.51.06@2x (1).webp

FAQ

如何更新LobeChat?

cd /root/pipu/lobechat

docker compose pull & docker compose up -d

LobeChat知识库分块和向量化失败怎么解决?

CleanShot 2024-12-13 at 11.47.01.webp

原因:key 里面没有text-embedding-3-small模型

解决办法,可以用 AiHubMix 的api key。


  • 全模型支持:涵盖全球最新主流模型,如:OpenAI,Claude,Google,Llama,阿里通义千问等,全部采用OpenAI格式。
  • 充值方便:支付宝充值方便快捷;后台计费同步官方,实时查看每一次请求记录,计费价格公开透明;充多少用多少,无充值门槛限制
  • 安全稳定:企业级服务器,速度快、高稳定;多个知名应用已接入生产环境;告别封号焦虑,专业团队随时待命,为您接入保驾护航

我用 AiHubMix 的API 向量化成功 CleanShot 2024-12-13 at 11.58.14.webp

参考资料

LobeChat官方的部署教程 ,很详细。

官方服务

如果觉得以上部署太难,可以直接使用官方的服务,无需部署,同样精彩,马上开始,传送门容

44444444.webp

999899897.webp