Files
admin e6207aa691
build / build-and-scan (push) Waiting to run
chore(仓库对齐): 文档库结构治理 + IM/插件线落地
文档库:目录改为编号制(01-规范/02-架构设计/03-数据库/04-调整方案/
05-交接单/06-ops/07-scripts/08-skills/09-archive),顶层散文件归入 01-规范/;
INDEX.md 与 docs-manifest.json 重刷(档案 146 篇);旧目录名引用全量对齐。

IM 线:src/im/**(SDK / hub / store / presence / ws / gateway-token)、
src/web/routes/im.ts、src/db/plugin-data/**、src/supervisor/plugin-assembly.ts
及对应 test/**。

插件线:poc/{im-agent-bridge,im-connection-gateway,im-conversation-tabs,
business-plugins-im,carbon-mcp-probe}、src/web/routes/{sessions,overlay-device}.ts、
src/net/relay/{device-grant,instance-credential}.ts。

仓库卫生:清出 40 个历史误入库 / 已改名文件(34 个交接单归档 + 6 个旧结构,
本地均有副本);dsh-server-docs/.gitignore 补 tmp/;交接单不入库(政策)。
2026-09-24 07:25:16 +08:00

3.4 KiB
Raw Permalink Blame History

config/ — 平台部署配置

本目录集中存放部署相关的值。源码里不再写任何真实部署值,一律从这里(或同名环境变量)读取。

文件

文件 是否入库 说明
platform.env.example ✅ 入库 模板,只有占位符。复制成 platform.env 后填写
platform.env ⛔ 不入库 本机真实值。已被 .gitignore 排除;也不会进入开源导出
load.sh ✅ 入库 shell 加载器,供 scripts/ 下的脚本 source

怎么用

首次配置

cp config/platform.env.example config/platform.env
${EDITOR:-vi} config/platform.env

shell 脚本里引用

. "$(dirname "$0")/../config/load.sh"
echo "$DSH_PLATFORM_DIR/state"      # → 平台状态目录

load.sh 找不到文件时不报错,脚本继续用系统 env 或自身默认值。

TypeScript 里引用

src/config.ts 负责解析,业务代码只读 ServerConfig 上的字段,不直接读 process.env:

const cfg = resolveConfig()
cfg.platformDir     // <platform-dir>
cfg.stateDir        // <platform-dir>/state
cfg.backupDir       // <platform-dir>/backups
cfg.installDir      // 代码安装根

优先级

系统环境变量 > config/platform.env > 代码内中性默认值

  • systemd drop-in(/etc/systemd/system/dshs.service.d/*.conf)与 /etc/dshs.env 属"系统环境变量",优先级最高;
  • load.sh 逐键判断,已由系统 env 提供的键不会被文件覆盖;
  • 代码内默认值一律是中性值(不含任何真实域名、地址、路径),只保证"不配也能起"。

⚠️ 注意:dshs 的 systemd drop-in 里同名键会压掉 /etc/dshs.env —— 两个地方都写同一个键时,以 drop-in 为准。

键一览

键 含义 中性默认(代码内)
DSHS_DATA_ROOT 数据根(每用户 home/ws、平台库) ~/.dshs
DSH_PLATFORM_DIR 平台私有目录的父目录 <dataRoot>/platform
DSH_INSTALL_DIR 代码安装根(lib/、scripts/) 模块相对路径推导
DSHS_BUNDLED_PLUGIN_DIR 共享只读插件包库(节点一份;每节点需自建 0755 root:root) <dataRoot>/bundled-plugins
DSHS_BASE_DOMAIN 对外域名 空(子域功能关闭)
DSHS_COOKIE_DOMAIN 会话 cookie 域 空(host-only)
DSHS_OVERLAY_BOOTSTRAP_SEEDS 覆盖网络引导种子,逗号分隔 空(功能关闭)
DSHS_OVERLAY_SIGNER_KEY_FILE 在线签名者私钥(签发 per-device grant) /etc/dshs/overlay-signer-key.pem
DSHS_RELAY_KEYS_FILE relay HMAC 密钥表(控制面写、relay 热加载) /etc/dshs/relay-keys.json
DESKTOP_GRANT_TTL_HOURS 设备 grant 租约(小时) 24
DESKTOP_GRANT_MAX_DEVICES 每用户设备数上限 10
DSHS_INSTANCE_GRANT_RENEW_MS 服务器实例设备凭据的定时续签间隔(毫秒;0 = 关) 300000
DSHS_CLUSTER_HOST_ID 本机在 dsh_hosts.id 里的标识 空
DSHS_CLUSTER_AGENT_TOKEN Worker 注册凭据 空
DSHS_TUNNEL_TARGET 反向隧道目标 空(隧道关闭)
DSH_HOST_PUBLIC_IP / DSH_HOST_LAN_IP 出网护栏要封的本机地址 空(只封回环)

派生字段(不用单独配):stateDir = $DSH_PLATFORM_DIR/state、backupDir = $DSH_PLATFORM_DIR/backups、artifactDir = $DSH_PLATFORM_DIR/artifacts。