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

75 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# config/ — 平台部署配置
本目录集中存放**部署相关的值**。源码里不再写任何真实部署值,一律从这里(或同名环境变量)读取。
## 文件
| 文件 | 是否入库 | 说明 |
|---|---|---|
| `platform.env.example` | ✅ 入库 | 模板,只有占位符。复制成 `platform.env` 后填写 |
| `platform.env` | ⛔ **不入库** | 本机真实值。已被 `.gitignore` 排除;也不会进入开源导出 |
| `load.sh` | ✅ 入库 | shell 加载器,供 `scripts/` 下的脚本 `source` |
## 怎么用
**首次配置**
```sh
cp config/platform.env.example config/platform.env
${EDITOR:-vi} config/platform.env
```
**shell 脚本里引用**
```sh
. "$(dirname "$0")/../config/load.sh"
echo "$DSH_PLATFORM_DIR/state" # → 平台状态目录
```
`load.sh` 找不到文件时不报错,脚本继续用系统 env 或自身默认值。
**TypeScript 里引用**
`src/config.ts` 负责解析,业务代码只读 `ServerConfig` 上的字段,不直接读 `process.env`:
```ts
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`。