把散落在代码里的真实部署值统一收进 config/,代码改为引用配置, 使仓库副本/开源导出不再带出生产域名、IP、内网路径与凭据。 新增 config/:platform.env.example(模板)· load.sh(shell 加载器)· index.cjs(node 加载器)· README.md(键一览与优先级)。 真实值放 config/platform.env —— 已 .gitignore 排除,不入库、不进导出。 TS 侧新增 src/platform-paths.ts 作部署路径的唯一解析处(零副作用): platformDir/stateDir/backupDir/artifactDir/installDir/scriptPath。 config.ts 接入这些字段;内置中继种子由生产 URL 改为空(改由 DSHS_OVERLAY_BOOTSTRAP_SEEDS 提供)。修掉 5 处硬编码绝对路径, src/** 注释中性化 116 行/53 文件。 scripts/** 36 个内部运维脚本:真令牌/PG 口令/隧道目标/主机号/路径 一律改从配置取;web/wake.html 的注册域白名单改为运行时从 location.hostname 推导;test/** 夹具 119 行/13 文件改 RFC 2606/5737 保留值,并把「内置种子必须为空」固化为回归断言。 取证:tsc 0 错;npm test 373/375(唯一失败 lease 属既有); 全仓扫描(大小写不敏感)代码面涉密标识 = 0;已部署 47 并零回归 (/opt/dsh/* 未搬家,/var/lib/dshs/platform 未被误建)。
80 lines
3.5 KiB
Bash
80 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
||
# ============================================================================
|
||
# DSH 平台 — 配置加载器(供 scripts/ 下的 shell 脚本 source)
|
||
# ----------------------------------------------------------------------------
|
||
# 用法(脚本开头):
|
||
# . "$(cd "$(dirname "$0")/.." && pwd)/config/load.sh"
|
||
#
|
||
# 加载后可用(全部已 export):
|
||
# DSHS_DATA_ROOT 数据根
|
||
# DSH_PLATFORM_DIR 平台私有目录父目录
|
||
# DSH_INSTALL_DIR 代码安装根
|
||
# DSH_STATE_DIR = $DSH_PLATFORM_DIR/state (派生)
|
||
# DSH_BACKUP_DIR = $DSH_PLATFORM_DIR/backups (派生)
|
||
# DSH_ARTIFACT_DIR = $DSH_PLATFORM_DIR/artifacts (派生)
|
||
#
|
||
# 优先级:系统环境变量 > config/platform.env > 这里的**中性默认值**
|
||
# ⛔ 中性默认值不含任何真实部署路径;配置文件缺失时**发告警**而不是静默用错路径。
|
||
# ============================================================================
|
||
|
||
_dsh_load_platform_env() {
|
||
local f="${DSH_CONFIG_FILE:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/platform.env}"
|
||
if [ ! -f "$f" ]; then
|
||
echo "[config] 警告:未找到 $f —— 将只用系统环境变量与中性默认值" >&2
|
||
return 0
|
||
fi
|
||
local line key val
|
||
while IFS= read -r line || [ -n "$line" ]; do
|
||
case "$line" in
|
||
''|'#'*) continue ;;
|
||
*=*) ;;
|
||
*) continue ;;
|
||
esac
|
||
key="${line%%=*}"
|
||
val="${line#*=}"
|
||
key="$(printf '%s' "$key" | tr -d '[:space:]')"
|
||
[ -n "$key" ] || continue
|
||
case "$val" in
|
||
\"*\"|\'*\') val="${val%?}"; val="${val#?}" ;;
|
||
*) val="$(printf '%s' "$val" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')" ;;
|
||
esac
|
||
# 系统 env 已有该键 ⇒ 不覆盖(系统 env 优先级更高)
|
||
if [ -n "$(printenv "$key" 2>/dev/null)" ]; then
|
||
continue
|
||
fi
|
||
export "$key=$val"
|
||
done < "$f"
|
||
}
|
||
|
||
_dsh_load_platform_env
|
||
unset -f _dsh_load_platform_env 2>/dev/null || true
|
||
|
||
# --- 中性默认值(仅当仍未设置时才填)--------------------------------------
|
||
export DSHS_DATA_ROOT="${DSHS_DATA_ROOT:-$HOME/.dshs}"
|
||
export DSH_PLATFORM_DIR="${DSH_PLATFORM_DIR:-$DSHS_DATA_ROOT/platform}"
|
||
export DSH_INSTALL_DIR="${DSH_INSTALL_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
|
||
|
||
# --- 派生目录(统一在这里算,⛔ 别在脚本里各写一套)------------------------
|
||
export DSH_STATE_DIR="${DSH_PLATFORM_STATE_DIR:-$DSH_PLATFORM_DIR/state}"
|
||
export DSH_BACKUP_DIR="${DSH_PLATFORM_BACKUP_DIR:-$DSH_PLATFORM_DIR/backups}"
|
||
export DSH_ARTIFACT_DIR="${DSH_PLATFORM_ARTIFACT_DIR:-$DSH_PLATFORM_DIR/artifacts}"
|
||
|
||
# --- 常用组合 -------------------------------------------------------------
|
||
export DSH_DB_FILE="${DSHS_DB_FILE:-$DSHS_DATA_ROOT/dshs.db}"
|
||
export DSH_USERS_DIR="${DSHS_USERS_DIR:-$DSHS_DATA_ROOT/users}"
|
||
|
||
# --- 本机 / 对端地址(出网护栏、双机脚本用;留空 = 不填该项)---------------
|
||
export DSH_HOST_PUBLIC_IP="${DSH_HOST_PUBLIC_IP:-}"
|
||
export DSH_HOST_LAN_IP="${DSH_HOST_LAN_IP:-}"
|
||
export DSH_PEER_HOST_ID="${DSH_PEER_HOST_ID:-}"
|
||
export DSH_PEER_PUBLIC_IP="${DSH_PEER_PUBLIC_IP:-}"
|
||
export DSH_PEER_AGENT_TOKEN="${DSH_PEER_AGENT_TOKEN:-}"
|
||
|
||
# --- 控制面 PG ------------------------------------------------------------
|
||
export DSHS_PG_HOST="${DSHS_PG_HOST:-127.0.0.1}"
|
||
export DSHS_PG_PORT="${DSHS_PG_PORT:-5432}"
|
||
export DSHS_PG_USER="${DSHS_PG_USER:-dshs}"
|
||
export DSHS_PG_DB="${DSHS_PG_DB:-dshs}"
|
||
export DSHS_PG_PASSWORD="${DSHS_PG_PASSWORD:-}"
|
||
export DSH_PG_DATA_DIR="${DSH_PG_DATA_DIR:-$DSHS_DATA_ROOT-pg}"
|