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

LobeChat 本地部署 pgvector/pgvector:pg16 带向量插件的PG数据库2 svhd/logto AUTH登录鉴权服务 minio/minio 支持S3协议的开源OSS服务 lobehub/lobe-chat-database 数据库版本 准备工作 首先创建一个Docker的

LobeChat 本地部署

  1. pgvector/pgvector:pg16 带向量插件的PG数据库2
  2. svhd/logto AUTH登录鉴权服务
  3. minio/minio 支持S3协议的开源OSS服务
  4. lobehub/lobe-chat-database 数据库版本

准备工作

首先创建一个Docker的桥接网络

docker network create lobe-network

在服务器中新建项目的文件夹

u3w15kaw.mgi.png

把对应的Docker-Compose.yaml 文件放到对应的文件夹中

以下是一些配置,私密配置都进行了加密或者简化,需要自己手动生成填写
域名用 jxqggg.com 子域名代替

1. pgvector/pgvector:pg16

Docker配置文件

networks:
  lobe-network:
    external: true
services:
  postgresql:
    image: pgvector/pgvector:pg16
    container_name: postgres
    ports:
      - '5432:5432'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123456
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U postgres']
      interval: 5s
      timeout: 5s
      retries: 5
    restart: always
    networks:
      - lobe-network

2. svhd/logto

用户登录鉴权

Docker 配置文件

与lobehub公用一个pg数据库

networks:
  lobe-network:
    external: true
services:
    logto:
        image: svhd/logto
        container_name: logto
        ports:
            - '3001:3001'
            - '3002:3002'
        environment:
            - 'TRUST_PROXY_HEADER=1'
            - 'DB_URL=postgresql://logto:123456@postgres-pgvector:5432/logto'
            - 'ENDPOINT=https://logto-api.jxqggg.com'
            - 'ADMIN_ENDPOINT=https://logto-ui.jxqggg.com'
        entrypoint: ['sh', '-c', 'npm run cli db seed -- --swe && npm start']
        networks:
            - lobe-network

配置 Logto

  • 如果你配置了反向代理,打开 https://logto-ui.jxqggg.com
  • 否则,请在进行端口映射后,打开 http://localhost:3002
  1. 注册一个新账户,首个注册的账户将自动成为管理员
  2. Applications 里创建一个 Next.js (App Router) 应用,名称随意
  3. 配置 Redirect URIhttps://lobechat.jxqggg.com/api/auth/callback/logtoPost sign-out redirect URIhttps://lobechat.jxqggg.com/
  4. 配置 CORS allowed originshttps://lobechat.jxqggg.com
    配置 Logto
  5. 获取 App IDApp secrets,填入你的 .env 文件中的 AUTH_LOGTO_IDAUTH_LOGTO_SECRET
  6. 配置你的 .env 文件中 AUTH_LOGTO_ISSUERhttps://lobechat.jxqggg.com/api/auth
    配置 Logto 环境变量
  7. 可选,在左侧 Sign-in experience 面板的 Sign-up and sign-in - Advanced Options 中关闭 Enable user registration,禁止用户自行注册。如果你禁止了用户自行注册,那么你只能在左侧 User Management 里手动添加用户。
    关闭用户注册

如果是大陆环境可能注册管理员会因为网络问题无法创建
请在数据库执行update sign_in_experiences set password_policy='{"rejects": {"pwned": false}}' where tenant_id='admin'
具体问题请查看# bug: Error on create a password #6577

3. minio/minio

使用S3存储桶功能

Docker 配置

networks:
  lobe-network:
    external: true
services:
  minio:
    image: minio/minio
    container_name: minio
    ports:
      - '9000:9000'
      - '9001:9001'
    volumes:
      - './s3_data:/etc/minio/data'
    environment:
      - 'MINIO_ROOT_USER=minio'
      - 'MINIO_ROOT_PASSWORD=123456'
      - 'MINIO_DOMAIN=minio-api.jxqggg.com'
      - 'MINIO_API_CORS_ALLOW_ORIGIN=https://lobechat.jxqggg.com'
    restart: always
    networks:
      - lobe-network
    command: >
      server /etc/minio/data --address ":9000" --console-address ":9001"

配置 MinIO S3

需要首先访问 WebUI 来进行配置:

  • 如果你配置了反向代理,打开 https://minio-ui.jxqggg.com
  • 否则,请在进行端口映射后,打开 http://localhost:9001
  1. 在登录界面输入你设置的 minio123456,然后点击登录

  2. 在左侧面板 Administer / Buckets 中点击 Create Bucket,输入 lobe(对应你的 S3_BUCKET 环境变量),然后点击 Create
    创建 MinIO 桶

  3. 选中你的桶,点击 Summary - Access Policy,编辑,选择 Custom,输入 minio-bucket-config.json 中的内容(见附录)并保存(同样默认你的桶名为 lobe):
    选中 MinIO 桶策略

    配置 MinIO 桶策略

  4. 在左侧面板 User / Access Keys 处,点击 Create New Access Key,无需额外修改,将生成的 Access KeySecret Key 填入你的 .env 文件中的 S3_ACCESS_KEY_IDS3_SECRET_ACCESS_KEY
    创建 MinIO 访问密钥

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

4.lobehub/lobe-chat-database

Docker配置文件

networks:
  lobe-network:
    external: true
services:  
  lobe:
    image: lobehub/lobe-chat-database
    container_name: lobe-chat-database
    ports:
      - '3210:3210'
    env_file:
      - .env
    restart: always
    networks:
      - lobe-network

.env文件放在同一个docker-compse文件的同路径下

.env 文件

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

# Postgres 相关,也即 DB 必需的环境变量
# 必填,用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRET=*****************************************
# 必填,Postgres 数据库连接字符串,用于连接到数据库
# 格式:postgresql://username:password@host:port/dbname
#如果你的 pg 实例为 Docker 容器且位于同一 docker-compose 文件中,亦可使用容器名作为 host
DATABASE_URL=postgresql://lobe:123456@postgres-pgvector: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=****************************
# 必填,指定鉴权服务提供商,这里以 Logto 为例
NEXT_AUTH_SSO_PROVIDERS=logto
# 必填,NextAuth 的 URL,用于 NextAuth 的回调
NEXTAUTH_URL=https://lobechat.jxqggg.com/api/auth

# NextAuth 鉴权服务提供商部分,以 Logto 为例
# 其他鉴权服务提供商所需的环境变量,请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/auth
AUTH_LOGTO_ID=*****
AUTH_LOGTO_SECRET=*******
AUTH_LOGTO_ISSUER=https://logto-api.jxqggg.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=********************
# 必填,S3 的 Secret Access Key,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
S3_SECRET_ACCESS_KEY=**************************
# 必填,S3 的 Endpoint,用于服务端/客户端连接到 S3 API
S3_ENDPOINT=https://minio-api.jxqggg.com
# 必填,S3 的 Bucket,直到在 MinIO UI 中手动创建之前都是无效的
S3_BUCKET=lobe
# 必填,S3 的 Public Domain,用于客户端通过公开连接访问非结构化数据
S3_PUBLIC_DOMAIN=https://minio-api.jxqggg.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=*****************
# 也可以用oneapi做聚合API
#OPENAI_PROXY_URL=https://oneapi.jxqggg.com/v1
OPENAI_MODEL_LIST=gpt-4o=gpt-4o<128000:fc:vision:file>
#用于配置 LobeChat 默认助理的默认配置。它支持多种数据类型和结构,包括键值对、嵌套字段、数组值等。
#DEFAULT_AGENT_CONFIG="model=gpt-4o;plugins=search-engine"
#默认启用 Ollama 作为模型供应商,当设为 0 时关闭 Ollama 服务
ENABLED_OLLAMA=0
#用于控制 LobeChat 的特性功能,支持多个功能标志,使用 + 增加一个功能,使用 - 来关闭一个功能,多个功能标志之间使用英文逗号 , 隔开,最外层建议添加引号 " 以避免解析错误。
#FEATURE_FLAGS="-welcome_suggest,-language_model_settings,-clerk_sign_up,-edit_agent"
Comment