1943 字
10 分钟

「LobeChat」部署你的私人AI助手

2024-11-19
浏览量 加载中...

1. 前言#

1.1 为什么要部署私有化 AI 助手 s#

在体验了 OpenWebUI、Web LMM 等开源项目后,我最终选择了部署 LobeChat 作为我的私人 AI 助手 Web 界面。原因很实在:

  • 灵活切换 AI 模型:轻松对接 OpenAI、Claude、Gemini、Ollama 等多家服务商的 API。
  • 隐私无虞:敏感对话数据完全掌握在自己或信任的服务器上。
  • 网络畅通无阻:在国内环境下也能顺畅使用海外 AI 服务(前提是 API 可访问)。
  • 分享协作便捷:服务端版本可以让朋友或团队成员轻松接入使用。

如果你也追求一个更个性化、更安全、访问更便捷的 AI 对话体验,部署一个独属的 LobeChat 是绝佳选择。

为什么要部署LobeChat

1.2 关于 LobeChat#

LobeChat 是由 LobeHub 团队开发的开源 ChatGPT/LLM 用户界面框架。核心亮点如下:

  • 全能兼容者:支持几乎所有主流平台 API (OpenAI, Claude 3, Gemini, Perplexity, Mistral, Ollama 等)。
  • “感官”丰富:具备视觉识别 (看图说话) 和语音合成 (TTS) 功能。
  • 无限可能:强大的插件系统拓展功能边界。
  • AI“应用商店”:内置 Agent 市场,可以创建、使用和分享预设助手 (类似 GPTs)。
  • 一键即拥:提供简洁的 Docker 部署方案,轻松拥有私人 ChatGPT。

LobeChat的亮点

2. 起步:Docker 部署 LobeChat 客户端(快速尝鲜)#

如果你仅仅是自己使用或希望将数据保存在本地,你可以选择部署流程更为简单的 LobeChat 客户端。

官方文档所给出的 docker 部署代码如下,你也可以手动拉取镜像 lobe-chat 来部署容器。

Terminal window
docker run -d -p 3210:3210 \
-e OPENAI_API_KEY=sk-xxxx \
-e ACCESS_CODE=lobe66 \
--name lobe-chat \
lobehub/lobe-chat

说明:

  1. -p 3210:3210: 将容器内部的 3210 端口映射到主机。确保主机 3210 端口空闲,可更换(如 -p 8080:3210)。
  2. -e ACCESS_CODE=lobe66: 强烈建议设置访问码,防止他人随意访问。将其替换为你自己的强密码。
  3. OPENAI_API_KEY: **无需在启动命令中填写,**启动后访问 http://localhost:3210 (或你映射的端口),在 Web UI 设置页面灵活添加/管理任意 API Key。

访问应用:浏览器打开 http://你的服务器IP:端口 (如 http://localhost:3210),输入设置的 ACCESS_CODE 即可开始使用!

注意: 单机客户端模式的数据存储在浏览器本地,换设备或清除缓存会丢失历史记录。如需多端同步、多人共享,请继续看服务端部署。

3. 进阶:Docker Compose 部署 LobeChat 服务端(数据持久化)#

3.1 LobeChat 服务端的意义#

服务端版本利用数据库存储数据,实现了多端同步、多人协作。使用 Docker Compose 能让部署流程更清晰。核心组件包括:

  1. LobeChat (Server): 核心应用(数据库版本)。
  2. PostgreSQL (with PGVector): 存放聊天记录和嵌入向量数据。
  3. (可选) S3 对象存储 (如 MinIO/Cloudflare R2): 用于存储图片、文件等附件(纯文本对话可忽略)。
  4. (可选) SSO 认证服务 (如 Auth0, Logto): 用于替代简单访问码,提供企业级登录(示例使用 Auth0/Logto)。

3.2 准备配置文件#

本次部署仅本地部署 LobeChat 数据库版本及 PostgreSQL 数据库,使用 Cloudflare R2 对象存储服务和 Auth0 登录鉴权服务,docker-compose.yml环境变量.env 如下:

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
lobe:
image: lobehub/lobe-chat-database
container_name: lobe-chat
ports:
- '3210:3210'
depends_on:
- postgresql
env_file:
- .env
restart: always
volumes:
data:
driver: local
s3_data:
driver: local
# 必填,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=...

查看 LobeChat 官方文档 以配置 Auth0 登录鉴权服务

重要安全提醒:

  • 务必KEY_VAULTS_SECRET, NEXT_AUTH_SECRET, POSTGRES_PASSWORD, AUTH_LOGTO_SECRET, S3_SECRET_ACCESS_KEY 等替换为你自己生成的、高强度随机值
  • 保护好 .env 文件!它含有所有敏感信息,切勿提交到公开仓库或泄露。

配置认证服务 (Critical Step!):

根据你选择的 NEXT_AUTH_SSO_PROVIDERS (如 Auth0, Logto, GitHub 等),严格按照 LobeChat 认证文档 和你的认证服务商文档进行配置。必须确保:

  • APP_URL (如 https://your.domain.com) 已正确添加到你认证服务商的 应用回调 URL (Redirect/Callback URIs)CORS 允许的来源 (Allowed Origins, Allowed Web Origins, Trusted Origins) 列表中。
  • 将认证服务商提供的应用程序 ID (Client ID) 和密钥 (Client Secret) 正确填入 .env 文件。

3.3 正式部署#

  1. 新建一个目录,用于存放你的配置文件和后续的数据库文件,如 lobe-chat-db

    Terminal window
    mkdir lobe-chat-db
    cd lobe-chat-db
  2. 将修改好配置的 docker-compose.yml.env 文件放在目录中

  3. 启动 Docker

    Terminal window
    docker compose up -d
  4. 通过 http://localhost:3210 访问你的 LobeChat 服务。

4. 后续#

成功部署(无论是客户端或服务端)后:

  1. 配置 API Key: 进入 Web UI 的设置 (Settings) -> 通用设置 -> 语言模型服务提供商。点击 添加服务商,选择你使用的服务(如 OpenAI, Claude, Ollama 等),填入对应的 API Key 和必要信息(如基础 URL)。
  2. (服务端) 探索更多:
    • 插件/代理/工具: 在设置中启用。
    • 模型市场: 可安装使用 Agent Market 中的预设助手。
    • 用户管理: 通过 SSO 登录的用户会自动创建账户(需配合认证服务商)。
    • (可选) S3 存储: 如果配置正确,聊天中的文件上传将被存储到你的 S3 Bucket。

模型市场

「LobeChat」部署你的私人AI助手
https://www.chaxuji.de/posts/lobechat/
作者
Liebesfreud
发布于
2024-11-19
许可协议
CC BY-NC-SA 4.0
最后更新于 2024-11-19,距今已过 386 天

部分内容可能已过时

评论区

目录