LobeChat 数据库版摆设

打印 上一主题 下一主题

主题 857|帖子 857|积分 2571

Chapter 0 概要

LobeChat 的社区版本默认利用客户端数据库的方式,缺少多端同步功能,不支持知识库等功能。数据库版本(Database,DB)则支持这些功能,本篇教程适用于 DB 版本的域名模式的 LobeChat 摆设。在开始教程之前,默认以下条件条件都以具备:


  • 一台具有固定公网 IP 的服务器;
  • 服务器已经安装 Docker、Docker-Compose、1Panel 以及 OpenResty;
  • 利用 NPS 作为内网穿透服务(影响不大,署理的原理都是一样的);
  • 可以进行二级域名解析的正当域名;
  • 已注册的第三方 AI 模型供应商的 API-KEY,例如 SiliconFlow,DeepSeek;

Chapter 1 域名设置

1.1 解析域名

在你的阿里云控制面板,进入到域名管理与解析界面,需要设置下面五个二级域名的解析。
  1. lobe.example.com  # LobeChat 服务端域名
  2. lobe-auth-api.example.com  # Logto 鉴权服务 API 域名
  3. lobe-auth-ui.example.com  # Logto 鉴权服务前端界面域名
  4. lobe-s3-api.example.com  # MinIO API 域名
  5. lobe-s3-ui.example.com  # MinIO 前端界面域名
复制代码
如下所示,利用 记录范例A 将上述二级域名解析到公网的服务器。

1.2 NPS 反向署理

如下图所示,在 NPS 的域名解析部分,将刚才的二级域名统一解析到你内网服务器的 OpenResty 服务的 Server-IP:443 地址,用于下一步 https 解析。


Chapter 2 创建 Docker-Compose 安装文件与配置文件

根据你的安装习惯,先进入到一个目录内,再利用下面的命令创建一个 lobechat_db 目录,用于存放配置文件与数据库文件。
  1. mkdir lobechat_db && cd ./lobechat_db
复制代码
利用下面的指令创建 docker-compose.yml 文件。
  1. vim docker-compose.yml
复制代码
将下面的内容粘贴至文件内,需要注意的是:

  • ⚠️⚠️⚠️==最重要的一条!!!该配置文件中有大量的 Password 敏感字段配置,切勿用于线上生产环境!!!否则统统效果自负!!!==⚠️⚠️⚠️
  • 下列内容中全部 example.com 应当更换为你的一级域名;
  • 下列内容中,minio 部分 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD,也就是根用户名和暗码需要你进行更改;
  • 下列内容中,postgresql 部分的 POSTGRES_PASSWORD 需要更改,同时 logto 部分的 DB_URL 部分需要同步更改。
在做出须要的修改之后,保存该文件。
  1. name: lobe-chat-database
  2. services:
  3.   postgresql:
  4.     image: pgvector/pgvector:pg16
  5.     container_name: lobe-postgres
  6.     ports:
  7.       - '5432:5432'
  8.     volumes:
  9.       - './data:/var/lib/postgresql/data'
  10.     environment:
  11.       - 'POSTGRES_DB=lobe'
  12.       - 'POSTGRES_PASSWORD=uWNZugjBqixf8dxC'
  13.     healthcheck:
  14.       test: ['CMD-SHELL', 'pg_isready -U postgres']
  15.       interval: 5s
  16.       timeout: 5s
  17.       retries: 5
  18.     restart: always
  19.   minio:
  20.     image: minio/minio
  21.     container_name: lobe-minio
  22.     ports:
  23.       - '9000:9000'
  24.       - '9001:9001'
  25.     volumes:
  26.       - './s3_data:/etc/minio/data'
  27.     environment:
  28.       - 'MINIO_ROOT_USER=YOUR_MINIO_USER'
  29.       - 'MINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD'
  30.       - 'MINIO_DOMAIN=lobe-s3-api.example.com'
  31.       - 'MINIO_API_CORS_ALLOW_ORIGIN=https://lobe.example.com' # Your LobeChat's domain name.
  32.     restart: always
  33.     command: >
  34.       server /etc/minio/data --address ":9000" --console-address ":9001"
  35.   logto:
  36.     image: svhd/logto
  37.     container_name: lobe-logto
  38.     ports:
  39.       - '3001:3001'
  40.       - '3002:3002'
  41.     depends_on:
  42.       postgresql:
  43.         condition: service_healthy
  44.     environment:
  45.       - 'TRUST_PROXY_HEADER=1'
  46.       - 'DB_URL=postgresql://postgres:uWNZugjBqixf8dxC@postgresql:5432/logto'
  47.       - 'ENDPOINT=https://lobe-auth-api.example.com'
  48.       - 'ADMIN_ENDPOINT=https://lobe-auth-ui.example.com'
  49.     entrypoint: ['sh', '-c', 'npm run cli db seed -- --swe && npm start']
  50.     restart: always
  51.   lobe:
  52.     image: lobehub/lobe-chat-database
  53.     container_name: lobe-chat
  54.     ports:
  55.       - '3210:3210'
  56.     depends_on:
  57.       - postgresql
  58.       - minio
  59.       - logto
  60.     env_file:
  61.       - .env
  62.     restart: always
  63. volumes:
  64.   data:
  65.     driver: local
  66.   s3_data:
  67.     driver: local
复制代码
之后,利用下面的指令创建环境配置文件。
  1. vim .env
复制代码
将下列的内容粘贴进去,需要注意的是:

  • 下列内容中全部 example.com 应当更换为你的一级域名;
  • KEY_VAULTS_SECRET 变量务必更新;
  • DATABASE_URL 变量的暗码应当和 docker-compose.yml 中的 postgresql 相干设置一致;
  • NEXT_AUTH_SECRET 变量务必更新;
在做出须要的修改之后,保存该文件。
  1. # 必填,LobeChat 域名,用于 tRPC 调用
  2. # 请保证此域名在你的 NextAuth 鉴权服务提供商、S3 服务商的 CORS 白名单中
  3. APP_URL=https://lobe.example.com/
  4. # Postgres 相关,也即 DB 必需的环境变量
  5. # 必填,用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
  6. KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ=
  7. # 必填,Postgres 数据库连接字符串,用于连接到数据库
  8. # 格式:postgresql://username:password@host:port/dbname,如果你的 pg 实例为 Docker 容器且位于同一 docker-compose 文件中,亦可使用容器名作为 host
  9. DATABASE_URL=postgresql://postgres:uWNZugjBqixf8dxC@postgresql:5432/lobe
  10. # NEXT_AUTH 相关,也即鉴权服务必需的环境变量
  11. # 可以使用 auth0、Azure AD、GitHub、Authentik、Zitadel、Logto 等,如有其他接入诉求欢迎提 PR
  12. # 目前支持的鉴权服务提供商请参考:https://lobehub.com/zh/docs/self-hosting/advanced/auth#next-auth
  13. # 如果你有 ACCESS_CODE,请务必清空,我们以 NEXT_AUTH 作为唯一鉴权来源
  14. # 必填,用于 NextAuth 的密钥,可以使用 openssl rand -base64 32 生成
  15. NEXT_AUTH_SECRET=NX2kaPE923dt6BL2U8e9oSre5RfoT7hg
  16. # 必填,指定鉴权服务提供商,这里以 Logto 为例
  17. NEXT_AUTH_SSO_PROVIDERS=logto
  18. # 必填,NextAuth 的 URL,用于 NextAuth 的回调
  19. NEXTAUTH_URL=https://lobe.example.com/api/auth
  20. # NextAuth 鉴权服务提供商部分,以 Logto 为例
  21. # 其他鉴权服务提供商所需的环境变量,请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/auth
  22. AUTH_LOGTO_ID=YOUR_LOGTO_ID
  23. AUTH_LOGTO_SECRET=YOUR_LOGTO_SECRET
  24. AUTH_LOGTO_ISSUER=https://lobe-auth-api.example.com/oidc
  25. # 代理相关,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
  26. # HTTP_PROXY=http://localhost:7890
  27. # HTTPS_PROXY=http://localhost:7890
  28. # S3 相关,也即非结构化数据(文件、图片等)存储必需的环境变量
  29. # 这里以 MinIO 为例
  30. # 必填,S3 的 Access Key ID,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
  31. S3_ACCESS_KEY_ID=YOUR_S3_ACCESS_KEY_ID
  32. # 必填,S3 的 Secret Access Key,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
  33. S3_SECRET_ACCESS_KEY=YOUR_S3_SECRET_ACCESS_KEY
  34. # 必填,S3 的 Endpoint,用于服务端/客户端连接到 S3 API
  35. S3_ENDPOINT=https://lobe-s3-api.example.com
  36. # 必填,S3 的 Bucket,直到在 MinIO UI 中手动创建之前都是无效的
  37. S3_BUCKET=lobe
  38. # 必填,S3 的 Public Domain,用于客户端通过公开连接访问非结构化数据
  39. S3_PUBLIC_DOMAIN=https://lobe-s3-api.example.com
  40. # 选填,S3 的 Enable Path Style
  41. # 对于主流 S3 Cloud 服务商,一般填 0 即可;对于自部署的 MinIO,请填 1
  42. # 请参考:https://lobehub.com/zh/docs/self-hosting/advanced/s3#s-3-enable-path-style
  43. S3_ENABLE_PATH_STYLE=1
  44. # 其他基础环境变量,视需求而定。注意不要有 ACCESS_CODE
  45. # 请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/basic
  46. # 请注意,对于服务端版本,其 API 必须支持嵌入(即 OpenAI text-embedding-3-small)模型,否则无法对上传文件进行处理,但你无需在 OPENAI_MODEL_LIST 中指定此模型
  47. # OPENAI_API_KEY=sk-xxxx
  48. # OPENAI_PROXY_URL=https://api.openai.com/v1
  49. # OPENAI_MODEL_LIST=...
复制代码

Chapter 3 下载容器镜像并启动容器

输入下面的指令
  1. docker compose up -d
复制代码

查抄日记
  1. docker logs -f lobe-chat
复制代码
假如在日记看到以下的内容,说明已经启动乐成

你可以通过内网服务器地址 http://Server-IP:3210 访问 LobeChat 服务。


Chapter 4 OpenResty 署理、SSL 配置与 1Panel 网站设置

4.1 反向署理

在 1Panel 的网站设置页面,点击创建网站,选择 反向署理 ,按照下图的方式将刚才的五个域名依次创建网站,并做好备注,二级域名与署理地址端口的对应表如下表所示。

二级域名端标语lobe.example.com3210lobe-auth-api.example.com3001lobe-auth-ui.example.com3002lobe-s3-api.example.com9000lobe-s3-ui.example.com9001 创建完成之后应当如下图所示如许。

4.2 SSL 证书申请

在创建完网站之后,点击左侧的 证书 页面,点击 申请证书,主域名选择 lobe.example.com ,之后将其他四个域名添加到其他域名的框内,选择 ACME 账户,选择 DNS 账号之后,选择自动续签即可,点击确认后等待申请状态变为正常,如下图所示。

4.3 网站 HTTPS 解析设置

之后,返回到刚才的网站页面,选择刚才新建的一个网站,点击 配置,点击 HTTPS,选择启用 HTTPS,如下如许设置即可,将别的四个也如许设置,证书都选择刚才新建的证书。


Chapter 5 配置鉴权服务

假如你正确配置了内网穿透与反向署理,那么访问 https://lobe-auth-ui.example.com 即可打开 Logto 服务的网站界面。选择注册一个新的账户,该服务的第一个新的账户将成为管理员账户。在首页大概在 Applicaiton 里面创建一个 Next.js (App Router)。定名随意,直接创建即可。

Redirect URIs 需要填写 https://lobe.example.com/api/auth/callback/logto;
Post sign-out redirect URIs 需要填写 https://lobe.example.com/;
CORS allowed origins 需要填写 https://lobe.example.com。
之后保存设置。

将前文创建的 .env 文件中的 AUTH_LOGTO_ID 设置为 App ID;将 AUTH_LOGTO_ID 设置为 App secrets;将 AUTH_LOGTO_ISSUER 设置为 https://lobe-auth-api.example.com/oidc,记得更改为你的域名。

假如你不想开放注册的话,在左侧的 Sign-in experience 中的 Sign-up and sign-in 下面的 Enable user registration 关闭即可。如许只能在 User Management 手动添加用户。需要注意的是:⚠️⚠️⚠️==管理员账户不等于注册账户,不能用于鉴权登录,你需要新创建一个用户用于鉴权登录==⚠️⚠️⚠️

Chapter 6 S3 对象存储服务配置

假如你正确配置了内网穿透与反向署理,那么访问 https://lobe-s3-ui.example.com 即可打开 MinIO 服务的网站界面。用户名和暗码为创建 docker-compose.yml 时设置的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD。

在左侧的 Administrator/Buckets 中点击 Create Bucket ,名称为 lobe。

创建之后,点击 Access Policy 编辑,选择 Custom ,将下面的 Json 内容粘贴进去即可。

  1. {
  2.   "Statement": [
  3.     {
  4.       "Effect": "Allow",
  5.       "Principal": {
  6.         "AWS": ["*"]
  7.       },
  8.       "Action": ["s3:GetBucketLocation"],
  9.       "Resource": ["arn:aws:s3:::lobe"]
  10.     },
  11.     {
  12.       "Effect": "Allow",
  13.       "Principal": {
  14.         "AWS": ["*"]
  15.       },
  16.       "Action": ["s3:ListBucket"],
  17.       "Resource": ["arn:aws:s3:::lobe"],
  18.       "Condition": {
  19.         "StringEquals": {
  20.           "s3:prefix": ["files/*"]
  21.         }
  22.       }
  23.     },
  24.     {
  25.       "Effect": "Allow",
  26.       "Principal": {
  27.         "AWS": ["*"]
  28.       },
  29.       "Action": ["s3:PutObject", "s3:DeleteObject", "s3:GetObject"],
  30.       "Resource": ["arn:aws:s3:::lobe/**"]
  31.     }
  32.   ],
  33.   "Version": "2012-10-17"
  34. }
复制代码
之后,点击 Access Keys,点击 Create access key 创建新的 KEY,将生成的 Access Key 和 Secret Key 填入前文创建的 .env 文件中的S3_ACCESS_KEY_ID 和 S3_SECRET_ACCESS_KEY 位置。

Chapter 7 正式启动服务

首先,先执行下面的指令,停止当前的容器。
  1. docker compose down
复制代码
之后启动。
  1. docker compose up -d
复制代码
到此为止,你可以通过 https://lobe.example.com 访问 LobeChat Database Version 了!
话外

本文同步自本人的个人博客站点:
   https://blogs.kd-mercury.xyz/archives/4bb48cbe-47f7-4f22-942f-f427f9405d96
  个人博客与 CSDN 同步更新。
欢迎大家进群讨论:913211989(小猫不要摸鱼)
进群令牌:fCLobeD

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表