config.json 配置参考
本文是 ~/.open-ace/config.json(Open ACE 服务端应用配置文件)的参考文档,覆盖当前示例文件(config/config.json.sample)的全部字段,并整理了 the former config/CONFIG_GUIDE.md (absorbed here) 中的行为说明。
位置与优先级
- 默认路径:
~/.open-ace/config.json。目录可通过OPENACE_CONFIG_DIR环境变量重定位(Kubernetes 清单中设为/home/open-ace/.open-ace,挂载 PVC)。 - 配置优先级:环境变量 > config.json > 内置默认值。 已核实的消费方:
DATABASE_URL(或拆分形式的DB_HOST/DB_PORT/DB_NAME/DB_USER/DB_PASSWORD)优先于 config.json 中的database.*—— docker entrypoint 与scripts/shared/config.py都按该顺序解析数据库连接。- 环境中设置了
SECRET_KEY时优先于secret_key字段。 DATA_FETCH_INTERVAL/DATA_FETCH_ENABLED优先于data_fetch段。
- Docker 下,entrypoint 首次启动时根据环境变量生成 config.json(
PORT写 入server.web_port,SERVER_IP拼出server.server_url,缺失密钥自动生成并持久化)。容器自身固定监听 19888;PORT只映射宿主机端口。 - 与 ENV_REFERENCE.md 的分工:环境变量负责部署层关注点(端口、数据库、安全模式、密钥 —— Docker Compose 见
.env.example),config.json 负责应用行为(工作区、告警、集成、功能开关)。本文是 config.json 的权威字段表。 - 应用读取方对 config.json 有最长 60 秒的缓存(
app/utils/config.py),多数修改在一分钟内免重启生效。需要重启的例外:自主开发调度器只在启动时拉起(autonomous.enabled)。
顶层字段
| 字段 | 说明 | 示例 / 默认值 |
|---|---|---|
host_name | 主机名标识,用于区分不同机器的数据。这是唯一的主机名字段,所有工具的数据都以它归属;请勿在 tools.* 下重复配置主机名。 | localhost, server-01 |
secret_key | Flask 会话签名密钥。SECRET_KEY 环境变量优先。谨慎轮换 —— 轮换会使所有已登录会话失效。 | 随机字符串 |
server.*
| 字段 | 说明 | 默认值 |
|---|---|---|
server.upload_auth_key | 上传认证密钥,用于验证远程机器上传的数据(/api/upload/batch 的 X-Auth-Key 头) | 随机字符串 |
server.server_url | 服务器地址,远程机器需要配置此地址 | http://192.168.1.100:19888 |
server.web_port | Web 服务端口 | 19888 |
server.web_host | Web 绑定地址 | 0.0.0.0 |
server.events_ingest_key | 调度器 → Web 的 SSE 事件摄取共享密钥(自主开发活动面板)。至少 32 字符,过短将被忽略 | "" |
server.events_ingest_url | 调度器转发自主开发 SSE 事件的摄取 URL | "" |
server.events_ingest_trusted_sources | 允许提交摄取事件的受信来源列表 | [] |
database.*
| 字段 | 说明 | 默认值 |
|---|---|---|
database.type | 数据库类型,可选 sqlite 或 postgresql | sqlite |
database.path | SQLite 数据库路径(仅 SQLite 有效) | ~/.open-ace/ace.db |
database.url | PostgreSQL 连接 URL(仅 PostgreSQL 有效) | null |
注意: 环境变量
DATABASE_URL优先级高于配置文件。如果设置了DATABASE_URL,将忽略配置文件中的数据库 配置。
SQLite 配置示例:
{
"database": {
"type": "sqlite",
"path": "~/.open-ace/ace.db"
}
}
PostgreSQL 配置示例:
{
"database": {
"type": "postgresql",
"url": "postgresql://user:password@localhost:5432/ace"
}
}
workspace.*
| 字段 | 说明 | 默认值 |
|---|---|---|
workspace.enabled | 是否启用 Workspace 功能 | false |
workspace.url | Workspace 服务地址 | http://localhost:8080 |
workspace.isolation | 用户之间的隔离:{"level": ..., "backend": ...},见下表与 WORKSPACE_ISOLATION.md | {"level": "none", "backend": "shared"} |
workspace.port_range_start | 多用户模式下端口池起始端口 | 3100 |
workspace.port_range_end | 多用户模式下端口池结束端口 | 3200 |
workspace.max_instances | 最大同时运行的 webui 实例数 | 30 |
workspace.idle_timeout_minutes | 空闲实例自动关闭时间(分钟) | 30 |
workspace.cleanup_interval_minutes | 空闲实例清理扫描间隔(分钟) | 5 |
workspace.token_secret | Token 签名密钥(建议使用强随机字符串) | "" |
workspace.webui_path | qwen-code-webui 安装路径(留空自动探测) | "" |
多用户模式下,Open ACE 会为每个用户启动独立的 qwen-code-webui 进程,以该用户的 system_account 身份运行。这确保了:
- 每个用户只能看到自己的 qwen 项目和对话历史
- 用户操作会以正确的身份记录到 qwen 日志中
- 多用户环境下的数据隔离和审计追溯
workspace.isolation:level 与 backend(每个 backend 只属于一个 level;不匹配的组合、已移除的旧键 multi_user_mode / required_isolation_level / os_user_confinement / sandbox_tier / confinement_* 都会让服务器拒绝启动并给出替代写法):
| level | backend | 需要什么 | Docker 安装可用 |
|---|---|---|---|
none | shared | 无(默认) | ✅ |
os_user | plain | 每用户系统账户 + openace-webui-launch wrapper(安装脚本提供) | ✅(root 叠加配置) |
os_user | bwrap | Linux + systemd + bubblewrap ≥ 0.8 + webui_callback_url + 约束 wrapper | ❌ |
sandboxed | local-gvisor | 同 bwrap + Docker + gVisor 运行时 + root 策略文件 local-gvisor 分节 | ❌ |
sandboxed | local-kata | 同 bwrap + Docker + /dev/kvm + Kata ≥ 3.32 + root 策略文件 local-kata 分节 | ❌ |
sandboxed | opensandbox | Kubernetes 上的 OpenSandbox + sandbox-backends.json 中的 webui_image + webui_callback_url | ✅ |
可选键:tier(仅 opensandbox)、limits(memory / cpu_percent / tasks)与 egress_allow(仅 bwrap / local-gvisor / local-kata)、container_webui(仅 local-gvisor / local-kata)。
单用户模式配置示例:
{
"workspace": {
"enabled": true,
"url": "http://localhost:8080",
"isolation": {"level": "none", "backend": "shared"}
}
}
多用户模式配置示例:
{
"workspace": {
"enabled": true,
"url": "http://localhost",
"isolation": {"level": "os_user", "backend": "plain"},
"port_range_start": 3100,
"port_range_end": 3200,
"max_instances": 30,
"idle_timeout_minutes": 30,
"token_secret": "generate-a-strong-random-secret-key-here"
}
}
其他段落
| 字段 | 说明 | 默认值 |
|---|---|---|
data_fetch.interval | 数据采集间隔(秒,最小 60) | 300 |
data_fetch.enabled | 是否启用应用内数据采集调度器 | true |
quota_enforcement.interval | 配额执行扫描间隔(秒) | 60 |
quota_enforcement.enabled | 是否启用配额执行 | true |
autonomous.enabled | 是否启用 AI 自主开发功能(需重启生效) | true |
autonomous.acceptance_verification_enabled | 自主开发流程合并后是否执行验收校验 | true |
run_timeline.enabled | 是否持久化远程会话运行时间线 | false |
model_gateway.enabled | 是否启用 LiteLLM 兼容模型网关 | false |
policy.enabled | 是否启用中央策略与审批功能 | false |
policy.approval_ttl_seconds | 策略 审批的默认有效期(单条规则可覆盖) | 3600 |
insights.temperature / insights.max_tokens | 洞察生成的采样参数 | 0.3 / 4096 |
data_fetch.* 与 quota_enforcement.* 可被 DATA_FETCH_INTERVAL / DATA_FETCH_ENABLED 与 QUOTA_ENFORCEMENT_INTERVAL / QUOTA_ENFORCEMENT_ENABLED 环境变量覆盖,优先级见上文。
alerts.*
| 字段 | 说明 | 默认值 |
|---|---|---|
alerts.allow_private_webhook_urls | 是否允许告警 webhook 指向私网 / 回环 / 链路本地地址。默认关闭,用于阻断 SSRF 风险。 | false |
alerts.dingtalk_webhook_secret | 钉钉自定义机器人"加签"密钥(全局,所有用户共用)。留空时按普通 webhook 发送;配置后发送前自动附加 timestamp / sign。也可在「告警偏好」里按用户设置各自的密钥(写入 webhook URL 的 openace_dingtalk_secret=<secret>,加密存储),其优先级高于此全局值。 | "" |
alerts.webhook_secret | 通用 webhook(非飞书 / 非钉钉)的 HMAC-SHA256 共享密钥。配置后对发送的请求体签名并把签名写入 X-OpenACE-Signature 头,接收方可据此校验请求来源;留空则不签名。 | "" |
默认情况下,告警 webhook 仅允许公开可达的
http(s)地址。飞书 / Lark 和钉钉群机器人 webhook 可直接使用 ;如果你确实需要向内网地址推送,请显式打开alerts.allow_private_webhook_urls,并在网络层自行控制访问范围。
tools.*
| 字段 | 说明 | 默认值 |
|---|---|---|
tools.openclaw.enabled | 是否启用 OpenClaw | true |
tools.openclaw.token_env | OpenClaw API Token 环境变量名 | OPENCLAW_TOKEN |
tools.openclaw.gateway_url | OpenClaw Gateway 地址 | http://localhost:18789 |
tools.claude.enabled | 是否启用 Claude | true |
tools.qwen.enabled | 是否启用 Qwen | true |
feishu.* 与 dingtalk.*
两个集成都覆盖导入会话中的用户/群名解析、手动或定时的组织架构同步,以及(钉钉)告警中心机器人推送;均不包含飞书 SSO 登录。完整字段表、配置步骤与排障见专属指南:
- 飞书:
feishu.app_id、feishu.app_secret、feishu.org_sync_enabled(默认false)、feishu.org_sync_tenant_id(默认1)、feishu.org_sync_interval_minutes(默认60)—— 见 FEISHU_CONFIG.md - 钉 钉:
dingtalk.app_key、dingtalk.app_secret、dingtalk.org_sync_enabled(默认false)、dingtalk.org_sync_tenant_id(默认1)、dingtalk.org_sync_interval_minutes(默认60)、dingtalk.org_sync_root_dept_id(默认"1")—— 见 DINGTALK_CONFIG.md
配置步骤
-
复制示例配置文件:
cp config/config.json.sample ~/.open-ace/config.json -
编辑
~/.open-ace/config.json:- 设置
host_name为主机名 - 生成随机的
upload_auth_key - 根据需要配置其他可选参数
- 设置
-
启动服务:
python3 server.py