(喂饭教程)Lobe Chat 本地数据库版本安装指南

本教程基于 docker compose 进行部署。参考 官网文档

配置模块

部署 LobeChat 的 DB 版,正常的部署流程需要额外包含三个模块的配置:

数据库配置

对于数据库,官方采用的是 Postgres 数据库,PostgreSQL 是一个强大的开源关系型数据库系统,而 PGVector 是其扩展,为向量操作提供支持。

  • 用途:存储结构化数据和向量索引。
  • 部署建议:使用官方 Docker 镜像可以快速部署 PostgreSQL 和 PGVector。

本教程也是通过 Docker 镜像进行部署。

身份验证服务配置

在服务端数据库模式下,为了对不同用户进行区分,因此需要一个身份验证服务。官方给出了两种验证方式:一种是 Clerk ,另外一种是 NextAuth。

注意:官方说由于无法使用 Docker 环境变量暴露 NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY,使用 Docker / Docker Compose 部署 LobeChat 时,不能使用 Clerk 作为登录鉴权服务。

本教程用的是Auth0 身份验证服务,这部分官方文档写的非常详细,可以一步一步进行注册和配置。

我们需要获得如下几个变量:

  1. AUTH0_CLIENT_ID:Auth0 应用程序的 Client ID。
  2. AUTH0_CLIENT_SECRET:Auth0 应用程序的 Client Secret。
  3. AUTH0_ISSUER:Auth0 应用程序的 Domain。
  4. NEXTAUTH_URL:OAuth 验证时的回调地址(https://your_domain.com/api/auth)。
  5. NEXT_AUTH_SECRET:用于加密 Auth.js 会话令牌的密钥(使用以下命令生成秘钥: openssl rand -base64 32
  6. NEXT_AUTH_SSO_PROVIDERS:选择 LoboChat 的单点登录提供商。使用 Auth0 请填写 auth0

S3 存储服务配置

因为在 Postgres 中直接存储文件类二进制数据会大大浪费宝贵的数据库存储空间,并拖慢计算性能。最佳实践是使用文件存储服务(S3)来存储图片文件,同时 S3 也是文件上传 / 知识库功能所依赖的大容量静态文件存储方案。

S3 所指代的是指兼容 S3 存储方案,即支持 Amazon S3 API 的对象存储系统,常见例如 Cloudflare R2 、阿里云 OSS,可以自部署的 minio 等均支持 S3 兼容 API。

本教程采用Cloudflare R2 存储服务,免费额度基本够个人使用了。官方已经详细讲了如何配置 Cloudflare R2 存储服务

需要获得如下几个变量:

  1. S3_ACCESS_KEY_ID:S3 ID
  2. S3_SECRET_ACCESS_KEY:S3 秘钥
  3. S3_BUCKET:存储桶的名称
  4. S3_ENDPOINT:存储桶的请求端点
  5. S3_PUBLIC_DOMAIN:存储桶对外的访问域名

Docker Compose

准备docker-compose.yml文件,该文件主要是部署postgresql数据库和lobe服务端。对象存储和身份验证服务都是基于第三方而不是本地。

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

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

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

环境变量文件(.env):

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

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

# NEXT_AUTH 相关,也即鉴权服务必需的环境变量
#以auth0为例,也可以使用Azure AD、GitHub、Authentik、Zitadel、Logto 等
NEXT_AUTH_SECRET=***
NEXT_AUTH_SSO_PROVIDERS=auth0
AUTH0_CLIENT_ID=***
AUTH0_CLIENT_SECRET=***
AUTH0_ISSUER=***
NEXTAUTH_URL=https://your.domain.com/api/auth
# 代理相关,如果需要的话(比如使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://localhost:7890
# HTTPS_PROXY=http://localhost:7890

# S3 相关,也即非结构化数据(文件、图片等)存储必需的环境变量
S3_ACCESS_KEY_ID=***
S3_SECRET_ACCESS_KEY=***
# 必填,S3 的 Endpoint,用于服务端/客户端连接到 S3 API
S3_ENDPOINT=***
# 必填,S3 的 Bucket
S3_BUCKET=***
# 必填,S3 的 Public Domain,用于客户端通过公开连接访问非结构化数据
S3_PUBLIC_DOMAIN=***
# 选填,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=0
# 其他基础环境变量,视需求而定。注意不要有 ACCESS_CODE

运行

.envdocker-compose.yml放在同一目录下,运行以下命令启动 Lobe Chat 服务:

sudo docker compose up -d

Crontab 自动更新脚本(可选)

可以使用以下脚本来自动更新 Lobe Chat,使用 Docker Compose 时,环境变量无需额外配置。

#!/bin/bash
# 提取最新镜像并将输出存储在变量中
output=$(sudo docker pull lobehub/lobe-chat-database:latest 2>&1)

# 检查拉取命令是否成功执行
if [ $? -ne 0 ]; then
  echo "镜像未拉取成功"
  exit 1
fi

# 检查输出是否包含特定字符串
echo "$output" | grep -q "Image is up to date for lobehub/lobe-chat-database:latest"
echo "$output"
# 如果镜像已经是最新的,则什么也不做
# 0:表示找到了匹配字符串
# 1:表示没有找到匹配的字符串。
# 2:表示发生了某些错误(例如,文件不存在)。
if [ $? -eq 0 ]; then
  echo "已经是最新镜像 无需更新"
  exit 0
fi

echo "检测到 Lobe-Chat-Database 更新"

# 删除旧容器
echo "已删除: $(sudo docker rm -f lobe-database)"

# 您可能需要先导航到 `docker-compose.yml` 所在的目录
# cd /path/to/docker-compose-folder

# 运行新容器
echo "Started: $(sudo docker compose up -d)"

# 打印更新时间和版本
echo "Update time: $(date)"
echo "Version: $(sudo docker inspect lobehub/lobe-chat-database:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"

#清理未使用的镜像
sudo docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "删除旧镜像。"
105 个赞

孩子很爱吃还会回购 :tieba_087:

5 个赞

感谢分享,tieba13

4 个赞

前排来赞,楼主好快 :star_struck:

5 个赞

S3我用了官方示例的minio,可以利用上VPS自己的硬盘

5 个赞

蹲一波,特地前来支持 :crazy_face:

3 个赞

孩子很喜欢吃,下次多发点 tieba_086

1 个赞

:tieba_004:刚把vercel上部署的改成了服务器版,但是导入之前的配置一直upload error,有佬知道什么情况吗

确实喂饭,感谢大佬

logto创建的用户会随机分配密码,这个密码是不是修改不了,用户登录lobe-chat的web界面也没法修改密码

感谢大佬制作教程 :smiling_face_with_three_hearts:

1 个赞

嗯。所以我是先不关闭注册,注册一个账号以后再关闭,logto注册是可以设置密码。

感谢教程,我在本地搭建成功了,用了tunnel 代理到内网了,这个和普通启动有什么区别吗?感觉不到有什么变化啊,哈哈 :joy:

2 个赞

有没有身份验证用github的?配置的感觉不对,还是用不了

1 个赞

不错不错,感谢分享!

6 个赞

有github 看官网教程

1 个赞

两个参数获取了,github填的可能不对

1 个赞

我第一次用的就是github登录,是可以成功的,你可以再看看其他参数有没有设置对

1 个赞

文件上传、知识库问答、授权登录这些吧

嗯嗯好的 :joy: