外观
配置参考
Raise 系统完全通过环境变量进行配置。在生产环境(KWORK_ENV 不是 dev)中,若缺少必填配置项,服务会拒绝启动并列出缺失项。在 Docker Compose 部署中,deploy/compose/.env 配置文件由安装脚本生成,启动时还会叠加 versions.env 与 packs/{pack}.env。
谁能用
- 部署方与运维人员:负责编辑
deploy/compose/.env(文件权限设为 600)或修改 Helm 的values.yaml与 Secret。 - 租户管理员:负责在工作台打开「我的组织」,管理租户内部策略(模型、存储、域名),不修改这些系统环境变量。
- 环境隔离限制:
KWORK_ENV=dev允许使用内存存储与临时密钥,不得用于任何对外环境。
怎么打开
系统配置无图形操作界面,通过以下文件与命令行入口进行管理:
- 配置文件:
deploy/compose/.envdeploy/compose/.env.exampledeploy/packs/*.envdeploy/versions.env
- 维护命令:
kwork serve(默认启动服务命令)kwork migrate(执行数据库迁移)kwork bootstrap zitadel|openbao|s3(执行依赖组件初始化引导)kwork healthcheck(检查服务健康状态)kwork version(查看程序版本)
- Helm 部署入口:
- 在
values.yaml中通过kwork.extraEnv可注入任意KWORK_*环境变量。
- 在
界面一览
系统没有提供图形化配置界面:
- 运营台「服务导航」:进入运营台的「服务导航」,可以查看各已部署组件的运行状态与健康信息。
- 容器配置文件重启:修改了由容器启动时读取的文件(
otelcol.yaml、prometheus.yml)后,需要执行以下命令重启容器:bash重新运行docker compose restart otel-collector prometheusinstall.sh安装脚本也会自动重启它们。 - 网关配置重载:修改网关的 Caddyfile 配置文件后,执行以下命令重载配置:bash
caddy reload
常用操作
查看与修改配置
- 登录服务器终端,进入
deploy/compose目录。 - 编辑
.env文件(或对应环境包的packs/{pack}.env文件)。注意不要把真实.env文件提交进 git 版本库。 - 执行以下命令重启服务,使运行中的容器读取新配置:bash在 Helm 部署中,修改了 Secret 或配置校验和的 Pod 会自动滚动重启。
docker compose --env-file ../versions.env --env-file ../packs/{pack}.env --env-file .env up -d - 若生产环境缺少必填配置项,服务启动将失败,终端会列出缺失项并提示由
install.sh生成密钥。
执行系统维护命令
你可以在终端中执行以下维护命令:
- 启动主服务:bash
kwork serve - 执行数据库迁移:bash执行迁移命令时必须提供
kwork migrateKWORK_MIGRATE_DATABASE_URL变量。 - 执行组件初始化引导:bash
kwork bootstrap zitadel kwork bootstrap openbao kwork bootstrap s3 - 检查服务健康状态:bash
kwork healthcheck - 查看当前程序版本:bash
kwork version
运行与拓扑配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_ENV | 运行环境标识,可选值为 dev 或 prod。非 dev 即按生产环境规则校验。 | dev | 生产环境应设为 prod(single 环境包已预置) |
KWORK_MODULES | 启用的功能模块列表,可选值为 app-api、k3-control、worker、agent-runtime。 | app-api,k3-control | 否(Compose 环境通常增加 worker) |
KWORK_ADDR | 公网业务监听地址。 | :8000 | 否 |
KWORK_OPS_ADDR | 运营后台服务监听地址。 | :8010 | 否 |
KWORK_INTERNAL_ADDR | 内部接口监听地址(用于证书批准、就绪与存活探针、指标采集等内部端点)。 | :8009 | 否 |
KWORK_BASE_DOMAIN | 门户基础域名。 | 空 | 生产环境必填 |
KWORK_PUBLIC_URL | 工作台公网访问地址及令牌断言签发者(iss)。 | http://localhost:8000 | 否(Compose 常见值为 https://app.$BASE_DOMAIN) |
KWORK_SITES_HOST | 独立站点 CNAME 解析目标主机。 | 空(生效为 sites.{base}) | 否 |
KWORK_DOCS_URL | 本手册的地址。组织管理里接入设置页的「接入指南」链接指向这里;填 off 则不显示这些链接。 | 空(生效为 https://docs.{base}) | 否 |
KWORK_SITE_DOMAIN_CAP | 单个组织绑定的站点域名数量上限。 | 10 | 否 |
KWORK_TLS_ASK_PER_HOST | 单台主机在每个时间窗口内允许的证书批准申请次数。设为 -1 表示不限制。 | 6 | 否 |
KWORK_TLS_ASK_GLOBAL | 全租户加预览环境合计证书批准申请次数上限。 | 300 | 否 |
KWORK_TLS_ASK_WINDOW_MIN | 证书批准频次限制的时间窗口长度(分钟)。 | 60 | 否 |
KWORK_LICENSE_FILE | 商业许可授权文件路径。未设置时系统作为 Community 社区版运行。 | 空 | 否 |
KWORK_LICENSE_PUBKEY | 厂商公钥(base64 编码)。 | 空(构建时写入) | 否 |
KWORK_LICENSE_UNSIGNED | 是否跳过许可签名校验。设为 true 时不校验签名。 | false | 仅开发环境使用 |
KWORK_BRAND_FILE | 实例品牌配置文件路径。 | brand/default/brand.json | 否(Compose 挂载至 /etc/kwork/brand/brand.json) |
KWORK_TENANT_BRAND_DIR | 静态租户品牌配置目录。 | 空(生产走数据库) | 否 |
KWORK_LOG_LEVEL | 日志输出级别。仅当设为 debug 时打开调试日志。 | 未设则非 debug | 否 |
KWORK_DOWNLOADS_DIR | k3 构建工件下载目录。 | /usr/share/kwork/dl | 否 |
KWORK_OPS_PORT | 服务导航中展示的运营后台访问端口。 | 8443 | 否 |
KWORK_SERVICE_PROBES | 覆盖探针 URL 的 JSON 字符串。 | 空 | 否 |
KWORK_REMOTE_APPS | 独立进程运行的一方应用映射列表,格式为 id=url,…。 | 空 | 否 |
KWORK_ANALYTICS | 数据分析功能开关。设为 1 时启用(需商业许可配合)。 | 未设为关 | 否 |
KWORK_COLLAB | 实时协同功能开关。设为 1 时启用(需商业许可配合)。 | 未设为关 | 否 |
KWORK_WATERMARK_OPS | 运营与技术支持会话强制启用水印。非 false 即开启。 | 开启 | 否 |
OTEL_EXPORTER_OTLP_ENDPOINT | OpenTelemetry 链路追踪数据导出端点。 | 空 | 否(启用 obs 时为 http://otel-collector:4318) |
KWORK_LOKI_URL | 推送日志数据的 Loki 服务地址。 | 空 | 否(启用 obs 时为 http://loki:3100/loki/api/v1/push) |
数据库配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_DATABASE_URL | 运行时数据库连接(kwork_app)。 | 空 | 生产环境必填 |
KWORK_AUDIT_DATABASE_URL | 审计数据库连接。 | 同 KWORK_DATABASE_URL | 否 |
KWORK_MIGRATE_DATABASE_URL | 仅供 migrate 迁移命令使用的连接串(需具备 schema 所有者权限)。 | 空 | 执行 migrate 命令时必填 |
KWORK_MIGRATE_AUDIT_DATABASE_URL | 仅供 migrate 迁移审计库使用的连接串。 | 未设置则使用 KWORK_MIGRATE_DATABASE_URL | 否 |
KWORK_DB_MAX_CONNS | 每个连接池在每个实例副本中的最大连接数。 | 25 | 否 |
KWORK_DB_MAX_IDLE_CONNS | 每个连接池在每个实例副本中的最大空闲连接数。不得超过 KWORK_DB_MAX_CONNS。 | 10 | 否 |
数据库连接池特性
- 连接空闲 5 分钟后自动回收,单个连接最长存活 1 小时(未开放配置)。
- 若使用 PgBouncer 代理数据库连接,只能使用 session 模式。
- 若数据库连接串中未包含
connect_timeout参数,系统会自动补齐 10 秒超时。
身份与认证配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_OIDC_JWKS_URL | 校验 OIDC 令牌签名的公钥(JWKS)地址。 | 空 | 生产环境必填 |
KWORK_OIDC_JWKS_HOST | 获取内部 JWKS 地址时的 Host 请求头。 | 空 | 使用内部网络地址时需要 |
KWORK_OIDC_ISSUER | 令牌签发者标识(iss)。生产环境强制校验。 | 空(生效为 https://id.{base}) | 生产环境必填 |
KWORK_ZITADEL_URL | Zitadel 管理 API 服务地址。 | 空 | 执行 bootstrap 或开通租户时需要 |
KWORK_ZITADEL_HOST | Zitadel 管理 API 的 Host 请求头。 | 空 | 执行 bootstrap 或开通租户时需要 |
KWORK_ZITADEL_PAT | Zitadel provisioner 个人访问令牌(PAT)。 | 空 | 开通租户时需要 |
KWORK_ZITADEL_PAT_FILE | 包含 Zitadel PAT 令牌的文件路径。 | 空 | 开通租户时需要 |
KWORK_ZITADEL_BOOTSTRAP | bootstrap 引导输出的 JSON 配置字符串。 | 空 | 重新执行引导时沿用已有凭据 |
KWORK_ZITADEL_BOOTSTRAP_FILE | 包含 bootstrap 引导输出 JSON 的文件路径。 | 空 | 重新执行引导时沿用已有凭据 |
KWORK_BOOTSTRAP_OUT | bootstrap 凭据输出保存目录(供 Helm hook 使用)。 | 空 | 否 |
KWORK_OPS_ADMINS | bootstrap 阶段授予 platform.ops 角色的管理员登录名列表。 | 空 | 否 |
KWORK_LOGIN_PAGE | 自建登录页功能开关,取值为 on 或 off。 | 空 | 仅在 bootstrap 时使用 |
KWORK_IDP_ALLOW_PRIVATE | 是否允许租户配置的企业 IdP 使用 http 协议或内网私有地址。 | false | 否 |
KWORK_CONNECTOR_BACKEND_URL | 企业 IdP 回调协作连接的后端服务通信地址。 | 空(生效为公开身份地址) | 否 |
KWORK_WECOM_API_BASE | 企业微信 API 模拟器地址。 | 空(生效为公网微信地址) | 仅开发环境使用 |
KWORK_WECOM_LOGIN_BASE | 企业微信登录模拟器地址。 | 空(生效为公网微信地址) | 仅开发环境使用 |
模拟器限制
在非 dev 环境下,若未开启 KWORK_IDP_ALLOW_PRIVATE,设置 KWORK_WECOM_API_BASE 或 KWORK_WECOM_LOGIN_BASE 会导致系统拒绝启动。
存储与密钥配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_BLOB | 对象存储驱动类型,可选值为 fs(本地文件系统)或 s3(S3 兼容对象存储)。 | fs | 必填(必须是二者之一) |
KWORK_BLOB_SECRET | fs 驱动预签名 HMAC 密钥(base64 编码的 32 字节)。 | 空 | 生产环境且使用 fs 时必填 |
KWORK_DATA_DIR | fs 驱动在本地的文件存储目录。 | ./.data | 否 |
KWORK_S3_ENDPOINT | S3 兼容对象存储的服务端点地址。 | 空 | 生产环境且使用 s3 时必填 |
KWORK_S3_BUCKET | S3 存储桶名称。 | 空 | 生产环境且使用 s3 时必填 |
KWORK_S3_PUBLIC_ENDPOINT | 预签名给浏览器直接访问的 S3 公网端点地址。 | 空(文档说明为 https://files.{base}) | 否 |
KWORK_S3_REGION | S3 存储区域标识。 | us-east-1 | 否 |
KWORK_S3_PREFIX | S3 存储桶内的对象键路径前缀。 | 空 | 否 |
KWORK_S3_ACCESS_KEY | S3 存储桶访问凭据 Access Key。 | 空 | 使用 s3 驱动时需要 |
KWORK_S3_SECRET_KEY | S3 存储桶访问凭据 Secret Key。 | 空 | 使用 s3 驱动时需要 |
KWORK_S3_PATH_STYLE | 是否使用路径风格(Path-Style)访问。SeaweedFS 与 MinIO 设为 true;AWS、阿里云 OSS、腾讯云 COS 设为 false。 | true | 否 |
KWORK_STORAGE_ALLOW_PRIVATE | 是否允许租户自带存储使用 http 协议或内网私有地址。私有化部署通常设为 true。 | false | 否 |
KWORK_SECRETS | 密钥管理驱动类型,可选值为 local(本地主密钥)或 openbao(OpenBao 服务)。 | local | 必填(必须是二者之一) |
KWORK_MASTER_KEY | local 驱动下的系统主密钥(base64 编码的 32 字节)。 | 空 | 生产环境且使用 local 时必填 |
KWORK_OPENBAO_ADDR | OpenBao 密钥管理服务地址。 | 空 | 生产环境且使用 openbao 时必填 |
KWORK_OPENBAO_ROLE_ID | OpenBao AppRole 认证的 Role ID。需与 Secret ID 成对配置。 | 空 | 生产环境且使用 openbao 时必填(与 Token 二选一) |
KWORK_OPENBAO_SECRET_ID | OpenBao AppRole 认证的 Secret ID。需与 Role ID 成对配置。 | 空 | 生产环境且使用 openbao 时必填(与 Token 二选一) |
KWORK_OPENBAO_TOKEN | OpenBao bootstrap 访问令牌。 | 空 | 生产环境且使用 openbao 时必填(与 Role ID/Secret ID 二选一) |
KWORK_OPENBAO_TRANSIT | OpenBao Transit 密钥引擎挂载路径。 | 空(适配器默认 transit) | 否 |
KWORK_OPENBAO_KV | OpenBao KV 密钥引擎挂载路径。 | 空(适配器默认 secret) | 否 |
KWORK_OPENBAO_PREFIX | OpenBao 内部路径前缀。 | 空(适配器默认 kwork) | 否 |
KWORK_ASSERTION_KEY | Ed25519 种子私钥,用于签名断言、委托令牌与紧急访问(break-glass)。所有服务模块必须保持相同。 | 空 | 生产环境必填 |
KWORK_ASSERTION_KID | 断言签名的密钥标识 ID。 | k3-1 | 否 |
模型、搜索与 Agent 配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_LLM_BASE_URL | OpenAI 兼容的大模型 API 服务端点。 | 空 | 需要使用模型时配置 |
KWORK_LLM_API_KEY | 大模型网关或上游服务 API Key。 | 空 | 视上游认证要求配置 |
KWORK_LLM_ADMIN_URL | Bifrost 模型网关管理 API 地址。未设置时表示不同步供应商。启用 --shell 或 --llm 时写入。 | 空 | 否 |
KWORK_LLM_ALLOW_PRIVATE | 是否允许租户自带模型(BYO)连接内网私有地址或使用 http 协议。 | false | 否 |
KWORK_SERVICE_MODEL | 后台异步任务默认使用的大模型 ID。未设置时使用租户默认配置。 | 空 | 否 |
KWORK_EMBED_MODEL | 语义检索嵌入模型 ID。未设置时仅支持关键词检索。 | 空 | 否 |
KWORK_WEBSEARCH_ALLOW_PRIVATE | 是否允许运营控制台「模型」→「联网搜索」中填写的接口地址位于私网,仅测试使用。联网搜索服务(DeepSeek 搜索)在运营控制台配置,不使用环境变量。 | false | 否 |
KWORK_WEBSEARCH_PER_MINUTE | 单个组织每分钟允许发起的联网搜索请求次数上限。 | 20 | 否 |
KWORK_TEMPORAL_ADDR | Agent 运行时 Temporal 服务的访问地址。 | 空 | 启用了 agent-runtime 模块时必填 |
KWORK_AGENT_DRAIN_S | 服务停止时 Agent 任务的排空等待时间(秒)。设为 0 表示立即取消任务。 | 60 | 否 |
KWORK_AGENT_API_URL | Agent 运行时调用平台 API 的地址。未设置表示在当前进程内部调用。 | 空 | 拆分部署时需要 |
KWORK_AGENT_ENABLED | 工作台界面是否展示助手入口与定时任务。启用 --shell 时写入 true。 | false | 否 |
KWORK_OBJECTS_OPS_URL | Draft 草稿调用对象引擎的服务通信地址。未设置表示在当前进程内部调用。 | 空 | 否 |
KWORK_LANGFUSE_URL | 单租户大模型调用追踪项目地址。启用 obs-llm 组件时配置。 | 空 | 否 |
KWORK_PDF_URL | Gotenberg PDF 转换服务地址。使用 onprem 环境包时写入。 | 空 | 否 |
Temporal 与停机排空细节
- 若未配置 Temporal(
KWORK_TEMPORAL_ADDR为空),助手与 Agent 相关接口返回 503 错误,服务进程不会退出。 - 容器的停止宽限时间(
stop_grace_period,Compose 中设为 90 秒)必须大于排空等待时间KWORK_AGENT_DRAIN_S。
限流与运行时配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_APP_RPS | 单个应用安装实例允许的持续请求速率(RPS)。配置为 0 时使用网关默认限额:持续 50 RPS,突发 100 RPS,并发 32。 | 0 | 否 |
KWORK_APP_ANON_CEILING | 全应用匿名请求合计上限倍数。即持续 500 RPS。 | 10 | 否 |
KWORK_APP_WS_PER_INSTALL | 单个应用安装实例在每个副本中的 WebSocket 连接数上限。 | 200 | 否 |
KWORK_APP_WS_PER_USER | 单个成员在单个应用中每个副本的 WebSocket 连接数上限。 | 10 | 否 |
KWORK_REDIS_URL | 跨副本共享限流计数器的 Redis 连接串。未设置时每个副本独立在本地计数。设了之后启动若无法连接 Redis,服务进程将直接退出。 | 空 | 否(多副本部署建议配置) |
KWORK_RUNTIME | 托管第三方独立软件开发商(ISV)应用的容器运行时类型,可选 docker。未设置表示不启用托管运行。启用 --apps 时写入。 | 空 | 否 |
KWORK_RUNTIME_HOST | 容器引擎通信地址。Compose 常见值为 http://app-runner:2375。 | 空 | 启用托管运行时时需要 |
KWORK_RUNTIME_NETWORK | 应用沙箱容器所属的网络名称。Compose 中配置为 kwork_apps。 | 空 | 否 |
KWORK_RUNTIME_OCI | 安全容器 OCI 运行时名称(例如 runsc)。 | 空 | 否 |
KWORK_WEBHOOK_ALLOW_PRIVATE | 是否允许 Webhook 回调推送使用 http 协议或内网私有地址。 | false | 否 |
KWORK_PURGE_GRACE_DAYS | 租户注销后到其数据可彻底清除的宽限保留天数。 | 7 | 否 |
审计归档与计费配置
| 变量名 | 作用说明 | 默认值 | 必填要求 |
|---|---|---|---|
KWORK_AUDIT_ARCHIVE | 审计日志封存分段开关。非 false 即开启。 | 开启 | 否 |
KWORK_AUDIT_ARCHIVE_BUCKET | 具备对象锁保护的审计日志归档专用存储桶。未配置时使用平台默认存储桶且无对象锁。 | 空 | 否 |
KWORK_AUDIT_RETENTION_DAYS | 审计日志对象锁定保留天数。 | 0 | 否 |
KWORK_AUDIT_LOCK_MODE | 对象锁定合规模式,可选 COMPLIANCE 或 GOVERNANCE。 | COMPLIANCE | 否 |
KWORK_AUDIT_SEAL_AFTER_HOURS | 封存多少小时之前产生的审计事件。 | 24 | 否 |
KWORK_AUDIT_ONLINE_DAYS | 归档后从在线数据库中删除清理的天数。设为 0 表示不从在线库中删除。 | 0 | 否 |
KWORK_BILLING_PROVIDER | 平台订阅计费提供商。未设置时表示只生成账单开票而不实际扣款;可设为 sandbox 进行沙箱测试。 | 空 | 否 |
KWORK_BILLING_CURRENCY | 无定价订阅时的计量计费币种。Compose 与参考配置中通常为 CNY。 | 空 | 否 |
开发模拟器变量
以下变量属于开发调试模拟器,仅供本地开发环境使用:
KWORK_PAY_WECHAT_BASE:微信支付模拟器接口地址。KWORK_PAY_ALIPAY_BASE:支付宝支付模拟器接口地址。KWORK_WECHAT_MP_API_BASE:微信公众平台 API 模拟器地址。KWORK_WECHAT_MP_AUTHORIZE_BASE:微信公众平台网页授权模拟器地址。KWORK_SMS_ALIYUN_BASE:阿里云短信模拟器接口地址。KWORK_SMS_TENCENT_BASE:腾讯云短信模拟器接口地址。
生产环境禁止使用模拟器
在生产环境(KWORK_ENV≠dev)中,一旦配置了上述任何一个模拟器变量,系统将直接拒绝启动并退出。
除上述模拟器变量外,系统还提供以下辅助网络与通知变量:
KWORK_WECHAT_MP_EGRESS_IPS:对外网络出口 IP 地址列表(以逗号分隔),用于租户管理员填入微信公众平台的 IP 白名单。若未配置,界面会提示联系管理员。KWORK_OUTREACH_LINK_BASE:营销退订链接的基础地址。未配置时默认使用KWORK_PUBLIC_URL。KWORK_PAYSIM_ADDR:支付模拟器服务(paysim命令)的监听地址,默认:9100。
部署环境与凭据变量(.env)
执行安装脚本 install.sh 时会自动在 deploy/compose/.env 中生成以下底层基础设施变量:
| 变量名 | 作用说明 |
|---|---|
BASE_DOMAIN / ACME_EMAIL / OPS_BIND / OPS_TLS | 网关基础域名、ACME 证书申请通知邮箱、运营后台绑定地址与 TLS 模式。 |
PLATFORM_ADMIN_EMAIL / PLATFORM_ADMIN_PASSWORD | 首个平台管理员登录邮箱与初始生成的密码。 |
OPS_ADMINS / OPS_SUPPORT | 额外授权的完整运营人员与只读运营人员邮箱列表(重新执行安装脚本时授权)。 |
POSTGRES_PASSWORD、KWORK_APP_DB_PASSWORD、ZITADEL_DB_PASSWORD、ZITADEL_MASTERKEY | 数据库超级用户密码、主应用数据库密码、Zitadel 数据库密码及主加密密钥。 |
BI_DB_PASSWORD、BI_OPS_DB_PASSWORD、SUPERSET_DB_PASSWORD、LANGFUSE_DB_PASSWORD | 数据分析、运营看板、Superset 与 Langfuse 数据库角色的访问密码。 |
S3_ACCESS_KEY / S3_SECRET_KEY | 存储凭据,映射到主程序的 KWORK_S3_ACCESS_KEY 与 KWORK_S3_SECRET_KEY。 |
OPENBAO_ROLE_ID / OPENBAO_SECRET_ID | OpenBao AppRole 凭据,映射到主程序的 KWORK_OPENBAO_ROLE_ID 与 KWORK_OPENBAO_SECRET_ID。 |
OPS_COOKIE_SECRET、OPS_PROXY_TOKEN、OPS_OIDC_CLIENT_* | 运营后台单点登录(SSO)与网关认证代理所需的密钥凭据。 |
CUBE_API_SECRET、SUPERSET_*、LANGFUSE_*、CLICKHOUSE_PASSWORD | 各辅助分析与追踪工具的通信密钥与访问密码。 |
KWORK_BRAND_DIR | 品牌静态资源目录路径,默认 ../../brand/default。 |
ALERTMANAGER_CONFIG / ALERTMANAGER_SECRETS | 告警通知接收方配置文件路径与密钥。 |
BACKUP_* | 数据库自动化备份相关配置,详细说明参见备份与恢复。 |
内置 CA 代理配置
若需要为代理服务指定内置根证书,可在可选配置文件 deploy/compose/oauth2-proxy.env 中配置 OAUTH2_PROXY_PROVIDER_CA_FILES=…。
Helm 配置映射
在 Kubernetes 环境下通过 Helm 部署(deploy/helm/kwork)时:
- 值文件映射:
values.yaml中的secrets.*、database.maxConns、storage.*、llm.*、agent.*映射为对应的KWORK_*环境变量。 - Secret 拆分管理:系统拆分为三个独立的 Kubernetes Secret:
- 运行时应用 Secret
- 数据库迁移(migrate)所有者 Secret
- 运营后台 cookie 认证 Secret
- 避免端口变量污染:Chart 配置中已固定设置
enableServiceLinks: false,防止 Kubernetes 自动为名为kwork的 Service 注入KWORK_PORT环境变量,从而避免污染应用程序的端口配置。
状态说明
启动校验机制
系统在每次启动时按以下状态分支进行配置校验:
启动检查 → 判断 KWORK_ENV
├─ dev 模式 ──→ 跳过必填项校验,允许使用内存存储与临时密钥
└─ prod 模式(或任何非 dev 值)
├─ 检查必填项完整 ──→ 校验通过,正常启动
└─ 缺失任一必填项 ──→ 拒绝启动,终端打印缺失项并退出若生产模式缺少必填项,控制台会列出缺失项并提示由 install.sh 生成密钥,然后退出。
变更生效与热重载
| 配置类型 | 生效机制 |
|---|---|
| 普通环境变量 | 修改后必须重启容器或 Pod 才能生效。 |
商业许可 modules 或 features | 修改授权模块或功能特性后必须重启服务生效。 |
| 商业许可席位与应用清单 | 支持热加载,修改后自动生效无需重启。 |
| Caddy 网关配置 | 修改 Caddyfile 后执行 caddy reload 热加载生效。 |
| Prometheus 与 OTel 配置文件 | 修改后需执行 docker compose restart otel-collector prometheus 重启容器生效。 |
让助手帮你做
环境变量与部署配置属于系统底层基础设施,不是助手(Agent)的操作面:
- 助手无法查看、修改或应用任何系统级环境变量。
- 组织管理员若需要配置日常业务策略,可以在工作台打开「我的组织」,通过图形界面或让助手协助配置组织内部的模型与存储。
设置
系统没有图形化的设置界面。所有系统级运行参数、监听端口、存储后端、限流配额与密钥均通过本页列出的环境变量及配置文件进行配置。
注意事项
- 与其他应用的关系:几乎所有应用的行为上限、存储、模型与登录均读取这些环境变量。例如修改
KWORK_APP_RPS会影响所有应用({app}.apps.{base})的请求速率上限;修改KWORK_EMBED_MODEL会影响全平台的语义检索能力;修改KWORK_AGENT_ENABLED会影响工作台界面是否展示助手入口与定时任务。 - 断言密钥保持一致:修改
KWORK_ASSERTION_KEY时,必须同时更新kwork主服务与kwork-agent容器,否则断言委托令牌会失效。 - Redis 连通性强依赖:若显式配置了
KWORK_REDIS_URL,启动时若无法连接 Redis,服务将直接报错退出。 - 生产环境禁用开发模拟器:在生产环境(
KWORK_ENV≠dev)中,严禁配置任何以_BASE结尾的开发模拟器变量,否则系统拒绝启动。 - 许可证变更生效差异:修改许可证中的
modules或features需重启服务;席位配额与应用清单支持热加载。 - 数据库连接数上限规划:部署时需确保所有实例副本的连接池配额之和小于数据库最大连接数: 副本数 ×(连接池数 × KWORK_DB_MAX_CONNS + 1)< 数据库最大连接数(max_connections) 并且需要为 Zitadel、Temporal 与数据库迁移预留充足的连接。
- Agent 停机排空宽限期:容器的停止宽限时间(
stop_grace_period,Compose 中默认 90 秒)必须大于排空等待时间KWORK_AGENT_DRAIN_S(默认 60 秒)。 - 配置文件安全权限:
deploy/compose/.env文件权限必须保持为 600,包含数据库密码与主密钥,禁止将真实凭据文件提交至版本控制系统。
目前不支持
- 平台订阅在线支付渠道:平台订阅目前尚未实现微信支付与支付宝支付渠道(租户自身的收款业务通过支付渠道独立配置)。
- 图形化实例配置页面:系统尚未提供用于修改环境变量的图形化「实例配置」管理界面。
常见问题
为什么在生产环境中启动系统时直接报错退出,提示缺少必填配置?
生产环境(KWORK_ENV 不是 dev)会进行严格的配置项校验。若缺少基础域名 KWORK_BASE_DOMAIN、数据库连接 KWORK_DATABASE_URL、身份公钥 KWORK_OIDC_JWKS_URL、断言密钥 KWORK_ASSERTION_KEY,或存储与密钥驱动的必填项未填写,系统会拒绝启动并在终端列出所有缺失项。你可以使用安装脚本 install.sh 重新生成配置或手动补齐缺失项。
修改了 .env 文件后,为什么运行中的服务没有生效?
Raise 仅在容器启动时读取环境变量,不会在修改文件后自动热重载。在 Docker Compose 环境下,需要执行 docker compose --env-file ../versions.env --env-file ../packs/{pack}.env --env-file .env up -d 重新拉起容器;在 Helm 部署中,需要更新 Secret 或配置校验和以触发 Pod 滚动重启。此外,若修改了 otelcol.yaml 或 prometheus.yml,需执行 docker compose restart otel-collector prometheus;修改 Caddyfile 需执行 caddy reload。
为什么配置了 KWORK_REDIS_URL 之后,服务无法正常启动?
未配置 KWORK_REDIS_URL 时,各副本在本地内存中独立计算应用限流;一旦显式配置了 KWORK_REDIS_URL,系统会在启动时强校验 Redis 连通性。如果网络不通或 Redis 未就绪,服务将直接报错退出。多副本部署建议使用 Redis,但必须确保 Redis 服务正常可达。
可以在测试或预发环境中使用 KWORK_ENV=dev 吗?
不得在任何对外环境中使用 KWORK_ENV=dev。KWORK_ENV=dev 模式会跳过生产必填项校验,并允许使用内存存储与临时密钥,仅供本地开发调试。任何对外环境或正式生产环境必须将 KWORK_ENV 设为 prod。
为什么在生产环境中配置了 KWORK_PAY_WECHAT_BASE 或 KWORK_SMS_ALIYUN_BASE 会导致服务无法启动?
这一类以 _BASE 结尾的变量属于开发模拟器。在非 dev 环境下,系统禁止使用模拟器变量,一旦检测到配置会直接拒绝启动以防止测试数据污染或安全漏洞。