菜单

Docker 和容器化

相关源文件

本文档涵盖了 LobeChat 的 Docker 容器化系统,包括多阶段构建架构、三种容器变体以及自动化 CI/CD 管道。有关使用 Docker Compose 部署外部服务的说明,请参阅使用 Docker Compose 自托管。有关云平台部署说明,请参阅云部署平台

容器变体

LobeChat 提供了三种不同的 Docker 镜像变体,以支持不同的部署架构

图片数据库模式用例
lobehub/lobe-chat仅客户端无服务器部署,无持久性
lobehub/lobe-chat-database服务端 PostgreSQL全功能服务器部署
lobehub/lobe-chat-pglite客户端 PGLite嵌入式数据库,简化部署

标准容器 (lobe-chat)

标准容器以纯客户端模式运行,不进行服务端数据库持久化。所有数据都存储在浏览器的本地存储中。

数据库容器 (lobe-chat-database)

数据库变体包含服务端功能,支持 PostgreSQL、认证系统和 S3 兼容的对象存储集成。它在构建过程中设置了 NEXT_PUBLIC_SERVICE_MODE=serverNEXT_PUBLIC_ENABLE_NEXT_AUTH=1

PGLite 容器 (lobe-chat-pglite)

PGLite 变体通过 WebAssembly 将 PostgreSQL 兼容的数据库直接嵌入到浏览器中,提供持久性,而无需单独的数据库服务器。它在构建时设置了 NEXT_PUBLIC_CLIENT_DB="pglite"

来源: Dockerfile1-253 Dockerfile.database1-297 Dockerfile.pglite1-251

多阶段构建架构

所有容器变体均采用相同的多阶段构建模式,并针对生产部署进行了优化

基础阶段

基础阶段使用 node:22-slim 并准备一个无发行版(distroless)的运行时环境。它安装必要的系统依赖项,并为最终的 scratch 镜像准备文件。

主要操作位于 Dockerfile11-33

  • 通过构建参数 USE_CN_MIRROR 配置中文镜像支持
  • 安装 ca-certificatesproxychains-ng 以支持网络功能
  • 准备包含最少必需库的 distroless 目录结构
  • 复制 Node.js 运行时和必要的系统库

构建阶段

构建阶段处理依赖项安装和应用程序编译。它接受用于分析、监控和功能配置的多个构建参数。

支持的构建参数位于 Dockerfile38-50

  • NEXT_PUBLIC_BASE_PATH - 应用程序基础路径
  • NEXT_PUBLIC_SENTRY_DSN - 错误追踪配置
  • NEXT_PUBLIC_ANALYTICS_POSTHOG - 分析集成
  • FEATURE_FLAGS - 功能开关配置

构建过程使用 corepack 进行包管理器版本管理,并使用 pnpm 进行依赖项安装,然后进行 npm run build:docker 编译。

应用阶段

应用阶段使用 busybox:latest 作为临时环境,用于准备最终的运行时结构。它复制 Next.js 独立输出并创建 nextjs 用户以增强安全性。

最终生产阶段

最终阶段从 scratch 创建一个最小容器,其中仅包含必要的运行时文件。它配置了大量的环境变量用于 AI 供应商集成,并以非 root 用户 nextjs 的身份在端口 3210 上运行。

来源: Dockerfile5-116 Dockerfile.database5-141 Dockerfile.pglite5-117

容器配置系统

环境变量架构

容器化系统支持 200 多个环境变量用于 AI 供应商配置,并按供应商类别进行组织

供应商配置模式

每个 AI 供应商都遵循在 Dockerfile146-244中定义的一致环境变量模式

{PROVIDER}_API_KEY=""
{PROVIDER}_MODEL_LIST=""  
{PROVIDER}_PROXY_URL=""

主要供应商包括 OpenAI、Anthropic、Google、Azure、AWS Bedrock,以及涵盖国际和中国 AI 服务的 40 多个其他供应商。

数据库容器扩展

数据库容器变体在 Dockerfile.database171-187中包含了额外的配置类别

  • 数据库配置DATABASE_URL, DATABASE_DRIVER, KEY_VAULTS_SECRET
  • 认证NEXT_AUTH_SECRET, NEXTAUTH_URL, NEXT_AUTH_SSO_PROVIDERS
  • 对象存储S3_ENDPOINT, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET

来源: Dockerfile137-244 Dockerfile.database162-288 Dockerfile.pglite139-242

构建与发布流程

自动化 CI/CD 系统

LobeChat 使用 GitHub Actions 自动化所有三种容器变体的构建和发布流程

多架构支持

每个容器变体都支持 linux/amd64linux/arm64 架构,通过使用不同 GitHub runner 类型进行并行构建。构建过程会创建平台特定的镜像,并将它们合并成多架构清单。

标签策略

CI/CD 系统根据触发事件采用不同的标签策略

  • 发布版本: 使用语义版本控制 (v1.2.3) 加上 latest 标签
  • PR 构建: 使用基于分支的标签和提交 SHA (pr-{branch}-{sha})
  • 手动构建: 遵循发布构建模式

构建优化

构建过程包含多项优化,位于 .github/workflows/docker.yml81-91

  • 使用 Docker Buildx 实现高级构建功能
  • 利用 Next.js 输出文件追踪以最小化镜像大小
  • 实施多阶段构建以减小最终镜像占用空间
  • 使用 scratch 基础镜像以实现最小攻击面

来源: .github/workflows/docker.yml1-162 .github/workflows/docker-database.yml1-162 .github/workflows/docker-pglite.yml1-162

部署注意事项

安全配置

所有容器都以非 root 用户 nextjs (UID 1001)运行,以增强安全性。生产镜像使用最小的 scratch 基础镜像,其中仅包含必要的运行时依赖项。

网络配置

容器暴露端口 3210,并通过 proxychains-ng 集成支持代理配置。PROXY_URL 环境变量启用 AI 供应商 API 调用的代理路由。

存储架构

  • 标准容器: 仅浏览器存储,无持久性
  • 数据库容器: 外部 PostgreSQL + S3 兼容对象存储
  • PGLite 容器: 嵌入式 WebAssembly 数据库,具有浏览器持久性

中文市场支持

所有容器变体都通过 USE_CN_MIRROR 构建参数包含中文镜像支持,配置 npm 注册表和依赖下载 URL,以提高中文环境中的构建性能。

来源: Dockerfile246-252 Dockerfile.database290-296 Dockerfile.pglite244-250