Open QuarterMaster 6.5.0 配置参数详解

Open QuarterMaster 三层配置体系逐项详解:Captain 的 mainConfig.json 与覆盖机制、Compose 环境变量、Keycloak realm 默认策略,关键项均附实测回显(2026-10-24)。

Open QuarterMaster库存管理自托管2026/10/24

Open QuarterMaster 6.5.0 配置参数详解

Open QuarterMaster 的配置分散在三层:Station Captain 的 JSON 配置(单机部署的管理面)、Compose 编排的环境变量(容器编排面)、Keycloak realm 配置(认证面)。本文基于 2026-10-24 实查的官方源码(Station-Captain/src/mainConfig.json、lib/ConfigManager.py)与官方 Compose 的 .env.example,逐项说明每个参数的含义、默认值与生效方式,关键行为均经实测验证。

一、三层配置体系总览

层载体谁读它典型用途
Captain 配置/etc/oqm/config/mainConfig.json + 覆盖文件oqm-captain、systemd 服务主机名、数据目录、快照、证书、资源档位
Compose 环境变量.env 文件 + compose.yamldocker compose镜像版本、端口、数据库账号、组件间连接串
Keycloak realmsetup/oqm-realm.json(Compose 导入)Keycloak用户/角色/客户端/密码策略

Captain 路径写的是真实服务器上 /etc/oqm 的固定布局;Compose 路径全部通过环境变量注入,两者不混用。

二、Captain 文件系统布局(源码实查)

Station Captain 源码 lib/ConfigManager.py 中定义的固定路径,全部服务于单机部署形态:

路径用途
/data/oqm主数据目录(system.systemDataDir + /oqm)
/etc/oqm共享配置根目录
/etc/oqm/configCaptain 主配置目录(mainConfig.json 所在)
/etc/oqm/config/configs自定义覆盖目录(99-main.json、99-custom.json)
/etc/oqm/serviceConfig各服务自己的配置
/etc/oqm/snapshots/scripts快照前后钩子脚本
/etc/oqm/certs证书体系(自签 CA、服务证书、trustStore)
/etc/oqm/certs/trustStores系统外部信任库目录
/data/oqm-snapshots快照默认存放点(可改)

覆盖机制:Captain 加载 mainConfig.json 后,按字典序依次加载 configs/ 目录里的覆盖文件(官方约定用 99-main.json、99-custom.json 命名,保证最后加载),同名键后到者覆盖先到者。改配置别直接动 mainConfig.json——那是官方默认文件,升级会被覆盖;自己的定制一律写进 99-custom.json。

三、mainConfig.json 逐项详解

以下为默认值(原文件实查),<secret> 表示由系统生成后写入的密文。

3.1 system 块——主机与资源

键默认值说明
system.hostname(向导写入)本机对内服务的主机名。官方要求全小写,Keycloak 对大小写敏感
system.altHostnameIps[]额外主机名/IP 列表,会加进证书 SAN
system.systemDataDir/data数据总根目录
system.dataDir#{system.systemDataDir}/oqmOQM 数据目录(支持引用其他键)
system.automaticContainerPruneFrequencymonthly容器资源自动清理频率(月度)
system.defaultUi{custom:false, type:core, name:base-station, path:/}默认进入的前端;装了多个 UI 插件时可切换
system.resources.ramLimitProfileSLIM各容器内存档位。装完官方建议跑 oqm-captain utils calcRamLimit 按本机内存重算

3.2 snapshots 块——快照与备份

键默认值说明
snapshots.location/data/oqm-snapshots快照输出目录
snapshots.numToKeep5本地保留快照数,超出轮转删除
snapshots.frequencyweekly计划快照频率
snapshots.compressionAlgxz压缩算法,可选 xz/gz/bz2
snapshots.encryption.enabled / passfalse / <secret>快照对称加密开关与口令
snapshots.backup.methodlocal备份方式:local / ssh / objStorage 三选一
snapshots.backup.enabledfalse快照后自动外送备份的开关
snapshots.backup.local.path""本地备份目标路径
snapshots.backup.ssh.path""SSH 远端路径(需自行配好免密)
snapshots.backup.objStorage.*accessKey/secretKey/bucket/prefix/endpointUrl/region/skipVerifySslS3 兼容对象存储参数

手动拍快照不依赖 frequency:oqm-captain snapshot take-snapshot manual。

3.3 cert 块——证书体系

键默认值说明
cert.externalDefaultself对外证书来源:self(自签)
cert.additionalExternalSANs[]追加的对外 SAN
cert.selfSigned.rootCaTtl2920自签根 CA 有效期(天,约 8 年)
cert.selfSigned.systemCertTtl365系统证书有效期(天)
cert.selfSigned.daysBeforeExpiryToRegen30到期前多少天自动重签
cert.selfSigned.certInfo.*countryName:US 等证书主题信息(caCommonName 默认取 organizationName)
cert.selfSigned.generateKeystorefalse是否生成 Java keystore
cert.acme.contactEmail / caServer / eab""ACME(Let's Encrypt 等)签发配置;eab 用于需要外部账户绑定的 CA
cert.provided.enabled / cert / keyfalse自带证书开关与路径
cert.trustStore.*/etc/oqm/certs/trustStores/...根证书信任库文件位置

证书相关的管理命令:oqm-captain certs regen(重签)、certs ensure-system-present(补齐)、certs write-internal <service> <destination>(导出某内部服务证书给外部程序信任)。

3.4 captain / registration / plugin 块

键默认值说明
captain.demoMode.frequencyhourly演示模式重置频率(配合 oqm-captain demo enable)
captain.demoMode.snapshotFile""演示数据快照文件
registration.instanceIdnull实例注册 ID(oqm-captain registration ensureInstanceId 生成)
registration.registrationId / registrationSecretnull注册凭据
plugin{}插件配置挂载点,装插件后各自在此添加键

四、Compose 编排的环境变量(官方 .env.example 逐项)

官方 Compose 的 .env.example 分四组,取值即 2026-09-28 稳定套件版本:

4.1 系统组

变量默认说明
SYS_RESTARTunless-stopped注入所有服务的 restart 策略
SYS_DATA_DIR(无默认,必填)数据卷宿主根目录,下面挂 mongo/、postgres/ 子卷

4.2 MongoDB(库存主存储)

变量默认说明
MONGO_IMAGE_TAG6镜像 tag(MongoDB 6.x,x64 需 AVX)
MONGO_ROOT_USERNAME / MONGO_ROOT_PASSWORDoqmadmin / <secret>root 账号,Core API 连接串引用
MONGO_DATABASEoqm初始库名

4.3 PostgreSQL + Keycloak(认证域)

变量默认说明
POSTGRES_IMAGE_TAG18镜像 tag
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DATABASEkcadmin / <secret> / keycloakKeycloak 的 DB 账号
KEYCLOAK_PORT8100对外端口(实测环境用 8138)
KEYCLOAK_IMAGE_TAG26.5镜像 tag
KEYCLOAK_REALM_FILE./setup/oqm-realm.jsonrealm 导入文件,挂载到 /opt/keycloak/data/import/,配合 start --import-realm
KEYCLOAK_ADMIN_USER / KEYCLOAK_ADMIN_PASSWORDoqm_admin / <secret>Keycloak 管理台账号

4.4 Core API + Base Station

变量默认说明
CORE_API_PORT8081Core API 对外端口(实测环境用 8139)
CORE_API_PORT_IMAGE_TAG6.5.0oqm-core-api 镜像版本
CORE_BASE_STATION_PORT8080Web 前端端口(实测环境用 8133);Base Station 以 host 网络运行,该值即宿主监听端口
CORE_BASE_STATION_IMAGE_TAG1.21.3oqm-core-base_station 镜像版本
CORE_BASE_STATION_CLIENToqm-appOIDC 客户端 ID
CORE_BASE_STATION_CLIENT_SECRET"**********"客户端密钥,字面值就是一串星号,与 oqm-realm.json 中 oqm-app 的 secret 一致;整体加引号防止 shell 吃掉星号

除 .env 外,compose.yaml 里还注入了组件间连接参数(一般不用改,改了要前后一致):

服务变量作用
core-apismallrye.jwt.verify.key.locationJWT 公钥地址,指向 Keycloak http://<keycloak主机>:8080/realms/oqm/protocol/openid-connect/certs
core-apiQUARKUS_MONGODB_CONNECTION-STRINGMongo 连接串。事务功能要求加 replicaSet=rs0&authSource=admin 并配合副本集模式启动(实测:standalone 时库存事务 500)
core-apiQUARKUS_MONGODB_DATABASE库名,同 MONGO_DATABASE
core-apimp.messaging.outgoing.events-outgoing.enabled事件外发(Kafka)开关,默认 false;装 Kafka 类插件时打开
core-base_stationQUARKUS_HTTP_PORT前端监听端口
core-base_stationQUARKUS_OIDC_CLIENT-ID / CREDENTIALS-SECRETOIDC 客户端与密钥
core-base_stationQUARKUS_OIDC_AUTH-SERVER-URL认证域地址 http://localhost:<KEYCLOAK_PORT>/realms/oqm
core-base_stationOQM_CORE_API_BASEURI后端 API 地址 http://localhost:<CORE_API_PORT>

五、Keycloak realm 层(认证面)实测

oqm-realm.json 导入后生成 realm oqm,关键默认值(实测取证):

  • 客户端:oqm-app(Base Station 与 REST API 共用),开启 direct access grants——支持 OAuth2 password grant 直接拿 token(API 实战篇依赖此特性)。
  • 密码策略:长度≥8、须含大小写、数字、特殊字符。实测用 q1w2e3r4 设置密码被拒:
HTTP 400
{"error":"invalidPasswordMinSpecialCharsMessage","error_description":"Invalid password: must contain at least 1 special characters."}

改用满足策略的口令后设置成功(HTTP 204)。要放宽策略,在 Keycloak 管理台 → Realm settings → Password policy 中调整,或改 oqm-realm.json 的 passwordPolicy 后重建 realm。

  • 默认角色:新建用户自动获得 inventoryView / inventoryEdit / itemCheckout / inventoryAdmin / user 等角色(实测 role-mappings 回显),即"开箱即用就是库存管理员"。最小权限场景需在 Keycloak 里手工收敛。

六、改配置怎么生效(实测结论)

  • Compose 路径:改 .env 或 compose.yaml 后 docker compose up -d(会重建受影响服务);只改端口映射不影响数据卷,数据安全。
  • Captain 路径:写 /etc/oqm/config/configs/99-custom.json,然后按提示重启对应 oqm 服务;证书类改动用 oqm-captain certs regen 显式重签。
  • 验证手段:curl http://localhost:<CORE_API_PORT>/q/health 应返回 "status":"UP" 且 checks 里 database、keycloak 均 UP;Base Station 端口 curl 应 302 跳 Keycloak 授权端点。

本专栏其他文章

参考来源

  • Station Captain 源码:deployment/Single Host/Station-Captain/src/mainConfig.json、lib/ConfigManager.py(2026-10-24 实查)
  • 官方 Compose:deployment/Compose/compose/.env.example、compose.yaml(core-api-6.5.0 时点,2026-10-24 实查)
  • Keycloak realm:deployment/Compose/compose/setup/oqm-realm.json + 实测回显(2026-10-24)
  • 实测环境:Core API 6.5.0 + Base Station 1.21.3 + MongoDB 6(副本集)+ PostgreSQL 18 + Keycloak 26.5