容器服务部署
在诸如 AWS ECS/Fargate、Azure Container Apps 或 Google Cloud Run 等托管容器平台上运行官方的 ghcr.io/open-webui/open-webui 镜像。
前提条件
在继续之前,请确保您已配置好共享基础设施组件要求——PostgreSQL、Redis、向量数据库、共享存储和内容提取服务。
何时选择此部署模式
- 您希望获得容器带来的红利(不可变镜像、版本化部署、无需管理操作系统),但不想承受 Kubernetes 带来的复杂性。
- 您的组织已经在使用某种托管容器平台。
- 您需要极快的横向扩展能力,且仅需极低的运维开销。
- 您更偏好使用平 台原生的自动弹性伸缩托管基础设施。
架构图
镜像选择
请使用带有明确版本号的 Tag 标签以保证生产环境的稳定性:
ghcr.io/open-webui/open-webui:v0.x.x
请避免在生产环境中使用 :main 标签——它追踪的是最新的开发分支,可能会在不预警的情况下引入破坏性更改。请查看 Open WebUI 发布的 Releases 获取最新的稳定版本。
水平扩展策略
- 平台原生自动伸缩:配置您的容器服务,使其根据 CPU 利用率、内存消耗或请求数来进行自动弹性伸缩。
- 健康检查:使用
/health接口来进行存活(Liveness)和就绪(Readiness)探针检查。 - 任务级环境变量:在您的任务定义(Task definition)中,以环境变量或 Secret 秘钥的形式传递所有共享基础设施的配置。
- 会话亲和性:在您的负载均衡器上启用粘性会话(Sticky sessions)以确保 WebSocket 的连接稳定性。虽然 Redis 可以处理实例间的协同工作,但启用会话亲和性能够极大减少不必要的会话交接。
关键注意事项
| 注意事项 | 细节详情 |
|---|---|
| 持久化存储 | 使用对象存储(S3, GCS, Azure Blob)或共享文件系统(如 EFS)。容器本地的文件存储是临时的,不会在不同的容器任务之间共享。 |
| Tika 边车模式 | 在同一个任务定义中将 Tika 作为边车(Sidecar)容器运行,或者作为独立的微服务运行。边车模式可以将文档提取的网络流量保持在本地。 |
| Secret 秘钥管理 | 使用您平台自带的秘钥管理器(AWS Secrets Manager, Azure Key Vault, GCP Secret Manager)来统一安全地管理 DATABASE_URL、REDIS_URL 和 WEBUI_SECRET_KEY 等敏感变量。 |
| 平滑升级 | 进行滚动部署(Rolling deployment)时,应首先升级单个容器任务——该任务将专门运行数据迁移 (ENABLE_DB_MIGRATIONS=true)。一旦该任务健康就绪, 再将其余任务扩展并设置为 ENABLE_DB_MIGRATIONS=false。 |
应避免的反面模式
| 反面模式 | 潜在破坏性影响 | 推荐修复方案 |
|---|---|---|
| 使用本地 SQLite 数据库 | 容器任务重启会导致数据丢失;多任务并发时会产生数据库死锁 | 将 DATABASE_URL 设置为外部 PostgreSQL 数据库 |
| 使用默认的本地 ChromaDB | 在多进程访问下,基于 SQLite 的向量数据库极其容易发生崩溃 | 设置 VECTOR_DB=pgvector(或接入外部 Milvus/Qdrant 数据库) |
未统一 WEBUI_SECRET_KEY | 会导致用户登录陷入死循环、提示 401 报错、会话无法跨任务保持等问题 | 通过秘钥管理器为每一个任务设置完全相同的密钥值 |
| 未配置 Redis 缓存服务 | 会导致 WebSocket 连接故障、配置无法同步、“找不到模型(Model Not Found)”等错误 | 配置 REDIS_URL 并设置 WEBSOCKET_MANAGER=redis |
有关容器的一些基础知识,请参阅我们的 快速入门指南。
在规划企业级部署时需要帮助? 我们的团队正与全球各地的组织紧密合作,设计并实施生产级的 Open WebUI 环境。