参考官方教程:使用 Docker Compose 部署 LobeChat 服务端数据库版本

一、在一台支持bash环境的机器上执行,需要安装好curl
bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN

它首先会下载四个文件,分别是

#环境变量文件, 用于docker容器
.env
#casdoor鉴权服务配置
init_data.json
#docker核心配置脚本
docker-compose.yml
#搜索服务配置文
searxng-settings.yml

1.png

执行过程中它会提示选择哪种模式,我们选择最正式的模式,也就是域名模式,重新生成密钥和数据库默认都是y,接着输入三个域名:

https://lobe.mydomain.com:9443    用于访问lobe-chat
https://casdoor.mydomain.com:9443  用于访问casdoor鉴权服务
https://minio.mydomain.com:9443  用于访问minio对象存储

这里根据自己购买的域名进行修改,如果你部署的目标是vps等云主机,那你可以不加端口号,采用默认的443端口,如果你是部署在家庭网络那还是带上端口号,因为宽带封443端口,家庭公网ip无法通过443来访问。

二、配置域名反代和DNS服务

你可以使用你的反向代理服务(如NginxProxyManager,Lucky,雷池Waf、群晖、宝塔、飞牛等) 配好域名证书,协议:https,监听9443(根据上面你填入的端口来)

lobe.mydomain.com  -->  http://你实际部署主机IP:3210
casdoor.mydomain.com  -->  http://你实际部署主机IP:8000
minio.mydomain.com --> http://你实际部署主机IP:9000

局域网中DNS服务或者本机Host配置(没有购买域名或者想要访问提速的情况):

lobe.mydomain.com 反向代理主机IP
casdoor.mydomain.com  反向代理主机IP
minio.mydomain.com 反向代理主机IP
三、修改配置生成的文件

为了支持lobe-chat使用知识库,其中一个很关键的服务是向量数据分块,而这个服务lobe-chat官方默认调用的是openai的模型,国内使用openai非常麻烦,并且模型收费,国内的替代方案是使用硅基流动的免费模型bge-m3(又快又好)。当然最佳方案是本地化部署ollama,使用ollama来调用bge-m3模型(在你有gpu服务器的情况下可以选择)。

我这里选择硅基流动提供的模型,https://siliconflow.cn/ 注册账号—>API密钥—>新建API密钥----->复制密钥 sk开头

修改.env文件

#先删掉没用的注释并新增
#配置上面注册的硅基流动API密钥
SILICONCLOUD_API_KEY=sk-xxxxxxxxxxxxxxxxxxx
#固定API地址
SILICONCLOUD_PROXY_URL=https://api.siliconflow.cn/v1/
#配置默认的嵌入向量模型
DEFAULT_FILES_CONFIG=embedding_model=siliconcloud/BAAI/bge-m3

#如果是自己部署ollama,按下面配置
#ENABLED_OLLAMA=1   
#OLLAMA_PROXY_URL=自建的服务地址
#DEFAULT_FILES_CONFIG=embedding_model=ollama/BAAI/bge-m3
#-------------下面不用改

LOBE_PORT=3210
CASDOOR_PORT=8000
MINIO_PORT=9000
APP_URL=https://https://lobe.mydomain.com:9443
AUTH_URL=https://https://lobe.mydomain.com:9443/api/auth

# Postgres 相关,也即 DB 必须的环境变量
LOBE_DB_NAME=lobechat
POSTGRES_PASSWORD=uWNZugjBqixf8dxC

AUTH_CASDOOR_ISSUER=https://casdoor.mydomain.com:9443
# Casdoor secret
AUTH_CASDOOR_ID=a387a4892ee19b1a2249
AUTH_CASDOOR_SECRET=3dc06e2a73ff2ddcb2fd59e3d4392a67
CASDOOR_WEBHOOK_SECRET=casdoor-secret

# MinIO S3 配置
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=b5cea6ea

# 在下方配置 minio 中添加的桶
S3_PUBLIC_DOMAIN=https://https://minio.mydomain.com:9443
S3_ENDPOINT=https://https://minio.mydomain.com:9443
MINIO_LOBE_BUCKET=lobe

# 为 casdoor 配置
origin=https://casdoor.mydomain.com:9443

修改docker-compose.yml

###这里把日志搜集、看板服务都删了,没什么用
name: lobe-chat-database
services:
  network-service:
    image: alpine
    container_name: lobe-network
    restart: always
    ports:
      - '${MINIO_PORT}:${MINIO_PORT}' # MinIO API
      - '9001:9001' # MinIO Console
      - '${CASDOOR_PORT}:${CASDOOR_PORT}' # Casdoor
      - '${LOBE_PORT}:3210' # LobeChat
    command: tail -f /dev/null
    networks:
      - lobe-network
  postgresql:
    image: pgvector/pgvector:pg17
    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
    networks:
      - lobe-network
  minio:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    container_name: lobe-minio
    network_mode: 'service:network-service'
    volumes:
      - './s3_data:/etc/minio/data'
    environment:
      - 'MINIO_API_CORS_ALLOW_ORIGIN=*'
    env_file:
      - .env
    restart: always
    entrypoint: >
      /bin/sh -c "
        minio server /etc/minio/data --address ':${MINIO_PORT}' --console-address ':9001' &
        MINIO_PID=\$!
        while ! curl -s http://localhost:${MINIO_PORT}/minio/health/live; do
          echo 'Waiting for MinIO to start...'
          sleep 1
        done
        sleep 5
        mc alias set myminio http://localhost:${MINIO_PORT} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}
        echo 'Creating bucket ${MINIO_LOBE_BUCKET}'
        mc mb myminio/${MINIO_LOBE_BUCKET}
        wait \$MINIO_PID
      "
  casdoor:
    image: casbin/casdoor:v2.13.0
    container_name: lobe-casdoor
    entrypoint: /bin/sh -c './server --createDatabase=true'
    network_mode: 'service:network-service'
    depends_on:
      postgresql:
        condition: service_healthy
    environment:
      httpport: ${CASDOOR_PORT}
      RUNNING_IN_DOCKER: 'true'
      driverName: 'postgres'
      dataSourceName: 'user=postgres password=${POSTGRES_PASSWORD} host=postgresql port=5432 sslmode=disable dbname=casdoor'
      runmode: 'dev'
    volumes:
      - ./init_data.json:/init_data.json
    env_file:
      - .env
  searxng:
    image: searxng/searxng
    container_name: lobe-searxng
    volumes:
      - './searxng-settings.yml:/etc/searxng/settings.yml'
    environment:
      - 'SEARXNG_SETTINGS_FILE=/etc/searxng/settings.yml'
    restart: always
    networks:
      - lobe-network
    env_file:
      - .env
  lobe:
    image: lobehub/lobe-chat-database
    container_name: lobe-chat
    network_mode: 'service:network-service'
    depends_on:
      postgresql:
        condition: service_healthy
      network-service:
        condition: service_started
      minio:
        condition: service_started
      casdoor:
        condition: service_started
    environment:
      - 'NEXT_AUTH_SSO_PROVIDERS=casdoor'
      - 'KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ='
      - 'NEXT_AUTH_SECRET=NX2kaPE923dt6BL2U8e9oSre5RfoT7hg'
      - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
      - 'S3_BUCKET=${MINIO_LOBE_BUCKET}'
      - 'S3_ENABLE_PATH_STYLE=1'
      - 'S3_ACCESS_KEY=${MINIO_ROOT_USER}'
      - 'S3_ACCESS_KEY_ID=${MINIO_ROOT_USER}'
      - 'S3_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}'
      - 'LLM_VISION_IMAGE_USE_BASE64=1'
      - 'S3_SET_ACL=0'
      - 'SEARXNG_URL=http://searxng:8080'
    env_file:
      - .env
    restart: always
    entrypoint: >
      /bin/sh -c "
        /bin/node /app/startServer.js &
        LOBE_PID=\$!
        sleep 3
        if [ $(wget --timeout=5 --spider --server-response ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then
          echo '⚠️Warning: Unable to fetch OIDC configuration from Casdoor'
          echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
          echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
          echo ''
          echo '⚠️注意:无法从 Casdoor 获取 OIDC 配置'
          echo '请求 URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
          echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration'
          echo ''
        else
          if ! wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep 'issuer' | grep ${AUTH_CASDOOR_ISSUER}; then
            printf '❌Error: The Auth issuer is conflict, Issuer in OIDC configuration is: %s' \$(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '\"' '{print \$4}')
            echo ' , but the issuer in .env file is: ${AUTH_CASDOOR_ISSUER} '
            echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
            echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
            echo ''
            printf '❌错误:Auth 的 issuer 冲突,OIDC 配置中的 issuer 是:%s' \$(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '\"' '{print \$4}')
            echo ' , 但 .env 文件中的 issuer 是:${AUTH_CASDOOR_ISSUER} '
            echo '请求 URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration'
            echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration'
            echo ''
          fi
        fi
        if [ $(wget --timeout=5 --spider --server-response ${S3_ENDPOINT}/minio/health/live 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then
          echo '⚠️Warning: Unable to fetch MinIO health status'
          echo 'Request URL: ${S3_ENDPOINT}/minio/health/live'
          echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration'
          echo ''
          echo '⚠️注意:无法获取 MinIO 健康状态'
          echo '请求 URL: ${S3_ENDPOINT}/minio/health/live'
          echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration'
          echo ''
        fi
        wait \$LOBE_PID
      "
volumes:
  data:
    driver: local
  s3_data:
    driver: local
networks:
  lobe-network:
    driver: bridge
四、正式部署

下面以群晖7.2 docker为例来部署,其他系统下大同小异。

1、在docker目录下新建lobe文件夹,在其中创建data、s3_data目录

2、将上面四个文件都上传上来,得到的目录文件如下图。

c4f5ae13485d3a556efab5a922b6c1e8.png

3、打开Container Manager 新建项目名:lobe-chat 随意,路径 /docker/lobe,使用现有compose 4、一直下一步,等待构建完成。

五、实测

登录:https://lobe.mydomain.com:9443 会提示登录,使用你第一步中获得的lobe账号密码登录。

291ecb70a8f7a125ce11e836036aeb87.png

点击左上角的图像点应用设置,正常来说就能看到SiliconCloud(硅基流动)已经是可用状态,你可以在右边窗口挑选一些模型来测试,尽量选一些免费的吧(后面带free的)。

2.png

测试下对话聊天

f19d32b259765e24278b05ed7bc23867.png

测试知识库 在左侧选择文件,下面添加知识库,名称自己随意,我就随便上传一份文档来测试。

283782f487d9ff26652bb98ec6500a99.png

上传上去后点击分块,SiliconCloud的bge-m3模型会执行文件向量化并保存到向量数据库pgvector中

323803bef3d595e206af1b06ec0527c0.png

 
先打开知识库选项然后提问,模型就会自动分析文档给出答案。


补充:

如果容器已经启动,你要修改.env文件,你需要把容器都删除,然后重新构建才能生效。

lobechat依赖的主要服务:

pgvector/pgvector:pg17 保存登录信息、lobe配置信息、文档的向量数据等

minio/minio:RELEASE.2025-04-22T22-12-26Z 保存上传的文件

casbin/casdoor:v2.13.0 权限认证

searxng/searxng 联网搜索,在聊天对话中可以开启联网搜索

minio官方选择RELEASE.2025-04-22T22-12-26Z这个版本的原因是,新版本的web界面删除了创建密钥等核心功能,所以对象存储我没有使用它,我实际使用的是之前部署的rustfs,lobechat完全支持兼容s3的对象存储。

casdoor 这项目谈不上好坏,只能说很杂,对lobechat来说,实现完整用户系统太重了,不得已选择其他sso产品来实现多用户登录,其实casdoor只用在本地lobechat上来说有点重了。


下面列出官方依赖服务的支持文档

对象存储支持列表  https://lobehub.com/zh/docs/self-hosting/advanced/s3    https://lobehub.com/zh/docs/self-hosting/environment-variables/s3

鉴权服务支持列表  https://lobehub.com/zh/docs/self-hosting/advanced/auth  https://lobehub.com/zh/docs/self-hosting/environment-variables/auth

联网搜索服务支持列表  https://lobehub.com/zh/docs/self-hosting/advanced/online-search

模型服务商 https://lobehub.com/zh/docs/self-hosting/environment-variables/model-provider

基础变量 https://lobehub.com/zh/docs/self-hosting/environment-variables/basic

One thought on “lobe-chat-database数据库版最新本地部署指南(含知识库)”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注