容器服务
在 AWS ECS/Fargate、Azure Container Apps、Google Cloud Run 等托管容器平台上运行官方 ghcr.io/open-webui/open-webui 镜像。
前置条件
开始前,请先完成 共享基础设施要求 的准备,包括 PostgreSQL、Redis、向量数据库、共享存储和内容提取服务。
何时选择这种模式
- 你想获得容器带来的好处,但不想引入 Kubernetes 的复杂度
- 组织已经在使用托管容器平台
- 你希望快速扩缩且运维负担较低
- 你偏好云平台原生的自动扩缩能力
架构
镜像选择
生产环境建议使用 版本标签:
ghcr.io/open-webui/open-webui:v0.x.x不要在生产里使用 :main,因为它会持续跟随最新开发状态。
扩缩策略
- 使用平台原生自动扩缩,基于 CPU、内存或请求数
- 用
/health做存活和就绪检查 - 把共享基础设施配置通过环境变量或密钥下发到任务定义中
- 在负载均衡器上启用会话亲和,以改善 WebSocket 稳定性
关键考虑点
| 考虑项 | 说明 |
|---|---|
| 存储 | 使用对象存储或共享文件系统,容器本地存储是临时的,且不共享 |
| Tika sidecar | 可与主容器同 task 部署,也可单独作为服务 |
| 密钥管理 | 使用云平台密钥系统管理 DATABASE_URL、REDIS_URL、WEBUI_SECRET_KEY |
| 更新 | 先用单任务执行迁移,再扩展其余任务 |
需要避免的反模式
| 反模式 | 影响 | 修复方式 |
|---|---|---|
| 使用本地 SQLite | task 重启丢数据,多 task 时会锁库 | 改用 PostgreSQL |
| 默认 ChromaDB | 多进程下容易崩 | 使用 pgvector、Milvus 或 Qdrant |
WEBUI_SECRET_KEY 不一致 | 登录循环、401、会话不稳定 | 所有 task 使用同一密钥 |
| 不配置 Redis | WebSocket 失败、配置不同步 | 设置 REDIS_URL 和 WEBSOCKET_MANAGER=redis |