本文档涵盖了 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=server 和 NEXT_PUBLIC_ENABLE_NEXT_AUTH=1。
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-certificates 和 proxychains-ng 以支持网络功能构建阶段处理依赖项安装和应用程序编译。它接受用于分析、监控和功能配置的多个构建参数。
支持的构建参数位于 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_SECRETNEXT_AUTH_SECRET, NEXTAUTH_URL, NEXT_AUTH_SSO_PROVIDERSS3_ENDPOINT, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET来源: Dockerfile137-244 Dockerfile.database162-288 Dockerfile.pglite139-242
LobeChat 使用 GitHub Actions 自动化所有三种容器变体的构建和发布流程
每个容器变体都支持 linux/amd64 和 linux/arm64 架构,通过使用不同 GitHub runner 类型进行并行构建。构建过程会创建平台特定的镜像,并将它们合并成多架构清单。
CI/CD 系统根据触发事件采用不同的标签策略
v1.2.3) 加上 latest 标签pr-{branch}-{sha})构建过程包含多项优化,位于 .github/workflows/docker.yml81-91
来源: .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 调用的代理路由。
所有容器变体都通过 USE_CN_MIRROR 构建参数包含中文镜像支持,配置 npm 注册表和依赖下载 URL,以提高中文环境中的构建性能。
来源: Dockerfile246-252 Dockerfile.database290-296 Dockerfile.pglite244-250