2026-09-19 15:12:19 +08:00
|
|
|
|
# ============================================================================
|
|
|
|
|
|
# DSH 平台 — 部署配置模板
|
|
|
|
|
|
# ----------------------------------------------------------------------------
|
|
|
|
|
|
# 用法:cp config/platform.env.example config/platform.env → 按本机实际填写
|
|
|
|
|
|
# · platform.env 已被 .gitignore 排除,**不会入库、不会进入开源导出**
|
|
|
|
|
|
# · 代码里不含任何真实部署值;所有部署相关的值都从本文件(或同名 env)读取
|
|
|
|
|
|
# · 也可以用系统级 env 覆盖(systemd drop-in / /etc/dshs.env),优先级见 config/README.md
|
|
|
|
|
|
# ============================================================================
|
|
|
|
|
|
|
|
|
|
|
|
# --- 数据根:每用户 home / ws / 平台库 都在这下面 -------------------------
|
|
|
|
|
|
DSHS_DATA_ROOT=/var/lib/dshs
|
|
|
|
|
|
|
|
|
|
|
|
# --- 平台私有目录的父目录:其下放 state / backups / artifacts -------------
|
|
|
|
|
|
# 代码里的 stateDir / backupDir / artifactDir 都由它派生,见 src/config.ts
|
|
|
|
|
|
DSH_PLATFORM_DIR=/opt/dsh
|
|
|
|
|
|
|
|
|
|
|
|
# --- 代码安装根(lib/ 与 scripts/ 所在)----------------------------------
|
|
|
|
|
|
DSH_INSTALL_DIR=/opt/dshs
|
|
|
|
|
|
|
2026-09-24 07:25:16 +08:00
|
|
|
|
# --- 共享只读插件包库(节点一份;默认 <DSHS_DATA_ROOT>/bundled-plugins)----
|
|
|
|
|
|
# 每个节点各自建目录:`install -d -m 0755 -o root -g root <该路径>`。
|
|
|
|
|
|
# 实例内以 `--ro-bind-try` 只读挂入;留空 = 关闭该功能。
|
|
|
|
|
|
DSHS_BUNDLED_PLUGIN_DIR=/var/lib/dshs/bundled-plugins
|
|
|
|
|
|
|
2026-09-19 15:12:19 +08:00
|
|
|
|
# --- 对外域名 -------------------------------------------------------------
|
|
|
|
|
|
DSHS_BASE_DOMAIN=example.com
|
|
|
|
|
|
DSHS_COOKIE_DOMAIN=.example.com
|
|
|
|
|
|
|
|
|
|
|
|
# --- 监听端口 / 隔离方式 --------------------------------------------------
|
|
|
|
|
|
DSHS_PORT=3080
|
|
|
|
|
|
DSHS_ISOLATION_MODE=account
|
|
|
|
|
|
DSHS_BASE_UID=100000
|
|
|
|
|
|
|
|
|
|
|
|
# --- 部署形态:local | cluster | k8s --------------------------------------
|
|
|
|
|
|
DSHS_DEPLOY_MODE=local
|
|
|
|
|
|
DSHS_CLUSTER_HOST_ID=<host-id>
|
|
|
|
|
|
DSHS_CLUSTER_INSTANCE_HOST=127.0.0.1
|
|
|
|
|
|
DSHS_CLUSTER_WORKER_DATA_ROOT=/var/lib/dshs
|
|
|
|
|
|
|
|
|
|
|
|
# --- 覆盖网络引导种子(逗号分隔;留空 = 功能关闭)------------------------
|
|
|
|
|
|
DSHS_OVERLAY_BOOTSTRAP_SEEDS=
|
|
|
|
|
|
|
2026-09-24 07:25:16 +08:00
|
|
|
|
# --- 覆盖网络 · 设备登录接入(序㊻ S0)------------------------------------
|
|
|
|
|
|
# 在线签名者私钥(签发 per-device grant 用)。⚠️ 只读、0600;留空 = 取代码内缺省路径。
|
|
|
|
|
|
DSHS_OVERLAY_SIGNER_KEY_FILE=
|
|
|
|
|
|
# relay HMAC 密钥表(控制面签发设备时写入;relay 侧**热加载**本文件)。
|
|
|
|
|
|
# ⚠️ 与 relay 单元的 DSHS_RELAY_KEYS_FILE **必须是同一个文件**,否则签了也不生效。
|
|
|
|
|
|
DSHS_RELAY_KEYS_FILE=
|
|
|
|
|
|
# 设备 grant 租约(小时)与每用户设备上限。
|
|
|
|
|
|
DESKTOP_GRANT_TTL_HOURS=24
|
|
|
|
|
|
DESKTOP_GRANT_MAX_DEVICES=10
|
|
|
|
|
|
|
|
|
|
|
|
# --- 会话并存的每用户上限(序㊼ S1 / E3)----------------------------------
|
|
|
|
|
|
# 同一账号**同时**可持有的平台会话数上限;超限淘汰 `created_at` 最小者并落
|
|
|
|
|
|
# `audit_log: session_evicted`。留空 = 取代码内中性默认 20。
|
|
|
|
|
|
# ⚠️ 它只约束**平台会话**;设备 grant 配额是上面的 DESKTOP_GRANT_MAX_DEVICES。
|
|
|
|
|
|
DSHS_MAX_SESSIONS_PER_USER=20
|
|
|
|
|
|
|
|
|
|
|
|
# --- 服务器实例的设备凭据(序㊼ S4/S5)------------------------------------
|
|
|
|
|
|
# 实例(role=main)设备凭据的**定时续签**扫描间隔(毫秒)。控制面按此间隔扫
|
|
|
|
|
|
# `overlay_devices`(kind='instance' 且 status='active'),租约剩余不足 TTL 一半即重签。
|
|
|
|
|
|
# 留空 = 取代码内中性默认 300000(5 分钟);0 = 关闭定时续签(只剩"实例启动时检查")。
|
|
|
|
|
|
# ⚠️ 实例凭据的**文件**落在实例 home(`.overlay-device.json`),平台不留私钥副本。
|
|
|
|
|
|
# ⚠️ 与浏览器会话的 TTL(DSHS_SESSION_TTL)无关:实例常驻靠**设备租约**续签。
|
|
|
|
|
|
DSHS_INSTANCE_GRANT_RENEW_MS=300000
|
|
|
|
|
|
|
2026-09-19 15:12:19 +08:00
|
|
|
|
# --- 本机地址(出网护栏脚本用;填自己的公网/内网地址)--------------------
|
|
|
|
|
|
DSH_HOST_PUBLIC_IP=<server-public-ip>
|
|
|
|
|
|
DSH_HOST_LAN_IP=<host-lan-ip>
|
|
|
|
|
|
|
|
|
|
|
|
# --- 控制面 PG(cluster 形态用)-------------------------------------------
|
|
|
|
|
|
DSHS_PG_HOST=127.0.0.1
|
|
|
|
|
|
DSHS_PG_PORT=<pg-port>
|
|
|
|
|
|
DSHS_PG_USER=dshs
|
|
|
|
|
|
DSHS_PG_DB=dshs
|
|
|
|
|
|
DSHS_PG_PASSWORD=<pg-password>
|
|
|
|
|
|
DSH_PG_DATA_DIR=/var/lib/dsh-pg
|
|
|
|
|
|
|
|
|
|
|
|
# --- Worker 注册凭据(cluster 形态必填)----------------------------------
|
|
|
|
|
|
DSHS_CLUSTER_AGENT_TOKEN=<worker-token>
|
|
|
|
|
|
|
|
|
|
|
|
# --- 反向隧道目标(可选;留空 = 隧道关闭)--------------------------------
|
|
|
|
|
|
# 形如 root@<host>:<port> 或 ssh://root@<host>:<port>
|
|
|
|
|
|
DSHS_TUNNEL_TARGET=
|
|
|
|
|
|
|
|
|
|
|
|
# --- 平台库连接(cluster 形态用 PG;local 形态留空走 SQLite)-------------
|
|
|
|
|
|
DSHS_DB_URL=
|
|
|
|
|
|
|
|
|
|
|
|
# --- 注册验证外发(留空 = 该能力关闭)-----------------------------------
|
|
|
|
|
|
DSHS_MAIL_DRIVER=
|
|
|
|
|
|
DSHS_MAIL_API_KEY=
|
|
|
|
|
|
DSHS_MAIL_FROM=
|
|
|
|
|
|
DSHS_MAIL_FROM_NAME=
|
|
|
|
|
|
DSHS_TURNSTILE_SITE_KEY=
|
|
|
|
|
|
DSHS_TURNSTILE_SECRET=
|
|
|
|
|
|
DSHS_TURNSTILE_HOSTNAMES=
|