扩展 OPL 数据空间
OPL 数据空间从单用户到面向企业与机构的大规模组织化部署,都可以平滑扩展。下面这份指南会说明,当使用规模变大时,应该如何逐步调整部署方式。
OPL 数据空间采用无状态、容器优先架构,因此它的扩展方式与现代 Web 应用非常相似。无论你是从个人玩具环境走向部门级部署,还是从几百用户继续扩展到上千用户,核心积木都是同一组。
本文会从高层角度讲清楚关键概念和配置。确切的环境变量细节请看 环境变量参考。
组织带来的不只是用户侧边界,也包括运维边界
如果你的部署启用了组织,扩缩容工作应与租户感知检索、文件归属和管理作用域行为一起规划,而不是简单当成纯基础设施改造。
面向组织化部署的扩容前检查
在增加副本、worker 或外部向量数据库之前,先验证租户模型:
- 阅读 组织,明确哪些资源属于组织,哪些属于平台全局。
- 阅读 管理作用域,确保运维人员理解某个设置是在
Global下生效,还是对当前选中的组织生效。 - 在任何可能触发维护模式、Qdrant payload 迁移或租户修复流程的上线之前,先看 组织维护。
- 在引入并发之前,确认共享存储、向量数据库和迁移姿态已经准备好。带着尚未解决的租户漂移问题去扩容,只会让恢复更困难。
理解默认配置
开箱即用时, OPL 数据空间以单容器方式运行,并具备:
- 一个保存在本地卷上的 内置 SQLite 主数据库
- 一个同样基于 SQLite 的 内置 ChromaDB 向量数据库
- 一个 Uvicorn worker
- 没有外部依赖,即没有 Redis、也没有外部 DB
这对个人使用、小团队试用和功能评估很合适。当你超出这些默认值时,就进入了扩容路径。关键点在于:如果你要安全地运行多个进程,那么主数据库和向量数据库这两个 SQLite 都必须被替换。
步骤 1:切换到 PostgreSQL
适用时机: 你打算运行多个 OPL 数据空间实例,或者需要更好的数据库性能与可靠性。
SQLite 把所有东西存进一个文件里,不适合多个进程并发写入。PostgreSQL 是生产级数据库,可以支撑大量并发连接。
你需要做的事:
把 DATABASE_URL 指向你的 PostgreSQL:
DATABASE_URL=postgresql://user:password@db-host:5432/openwebui关键点:
- OPL 数据空间不会自动在数据库之间迁移数据,所以不要等 SQLite 里已经有很多生产数据后才临时决定切换。
- 高并发部署要调优
DATABASE_POOL_SIZE和DATABASE_POOL_MAX_OVERFLOW。 - 每个 OPL 数据空间实例都有自己独立的连接池,总连接数 = 每实例连接池大小 × 实例数。
- 如果跳过这一步直接在 SQLite 上跑多个实例,你大概率会遇到
database is locked和数据损坏。
提示
一个常见起点是 DATABASE_POOL_SIZE=15 与 DATABASE_POOL_MAX_OVERFLOW=20,但总连接数仍应明显低于 PostgreSQL 的 max_connections。