Appearance
环境变量设置手册
环境变量是“名称 = 值”的外部配置。它让服务器地址、端口、目录和密码不必写死在源码中。变量名区分字符,值中的空格和标点必须完整保留。
配置来源与优先级
从高到低依次为:当前 PowerShell 会话变量、Windows 用户变量、deploy/realms/catalog.json 的非敏感默认值、对应项目的 deploy/runtime.json、正式机受 ACL 保护的 run-*.cmd。部署脚本读取高优先级值覆盖清单,但不会把密码写回 Git。
| 内容 | 正确位置 | 可否提交 Git |
|---|---|---|
| 主机地址、SSH 端口、Web 端口 | deploy/realms/catalog.json 或部署机环境覆盖 | 可以,前提是不含秘密 |
| 109 API 非敏感路径 | d2109/deploy/runtime.json | 可以 |
| 113 API 非敏感路径 | d2113/deploy/runtime.json | 可以 |
| SSH 密码、数据库密码、Token、签名密钥 | 部署机用户变量或正式机 runner | 不可以 |
| 临时测试值 | 当前 PowerShell $env: | 不可以提交 |
临时设置与永久设置
当前窗口设置在关闭 PowerShell 后消失,适合一次部署。
powershell
# 为当前 PowerShell 临时设置 109 SSH 密码;不要把真实值发到聊天或截图中。
$env:D2113_WIN109_DEPLOY_PASSWORD = '<109服务器密码>'
# 为当前 PowerShell 临时设置 113/Web SSH 密码。
$env:D2113_WIN113_DEPLOY_PASSWORD = '<113服务器密码>'
# 只显示变量是否存在,不打印秘密内容。
@('D2113_WIN109_DEPLOY_PASSWORD','D2113_WIN113_DEPLOY_PASSWORD') | ForEach-Object { "$_=" + [bool](Get-Item "Env:$_" -ErrorAction SilentlyContinue) }长期使用的部署机可保存到当前 Windows 用户。设置后关闭并重新打开 PowerShell。
powershell
# 永久保存 109 SSH 密码到当前 Windows 用户;只在可信开发机执行。
[Environment]::SetEnvironmentVariable('D2113_WIN109_DEPLOY_PASSWORD','<109服务器密码>','User')
# 永久保存 113 SSH 密码到当前 Windows 用户。
[Environment]::SetEnvironmentVariable('D2113_WIN113_DEPLOY_PASSWORD','<113服务器密码>','User')
# 读取用户变量是否已设置,但不显示变量值。
@('D2113_WIN109_DEPLOY_PASSWORD','D2113_WIN113_DEPLOY_PASSWORD') | ForEach-Object { "$_=" + [bool][Environment]::GetEnvironmentVariable($_,'User') }删除错误变量时把值设为 $null。
powershell
# 删除当前用户保存的错误 109 SSH 密码。
[Environment]::SetEnvironmentVariable('D2113_WIN109_DEPLOY_PASSWORD',$null,'User')部署连接变量
deploy/realms/catalog.json 的 environmentOverrides 是完整的部署覆盖表。常用变量如下:
| 变量 | 含义 | 默认来源 |
|---|---|---|
D2113_DEPLOY_WIN109_HOST | 109 主机地址 | hosts.win109.address |
D2113_DEPLOY_WIN109_SSH_PORT | 109 SSH 端口 | hosts.win109.sshPort |
D2113_DEPLOY_WIN109_USER | 109 SSH 用户 | hosts.win109.username |
D2113_DEPLOY_WIN113_HOST | 113/Web 主机地址 | hosts.win113.address |
D2113_DEPLOY_WIN113_SSH_PORT | 113/Web SSH 端口 | hosts.win113.sshPort |
D2113_DEPLOY_WIN113_USER | 113/Web SSH 用户 | hosts.win113.username |
D2113_DEPLOY_WEB_PORT | IIS 公网端口 | web.publicPort |
D2113_DEPLOY_HTTPS_PORT | IIS 公网 HTTPS 端口 | web.httpsPort |
D2109_DEPLOY_SITE_ROOT | 109 后台 IIS 站点根目录 | web.siteRoots.109b |
D2113_DEPLOY_SITE_ROOT | 113 后台 IIS 站点根目录 | web.siteRoots.113c |
D2113_DEPLOY_FORUM_SITE_ROOT | 论坛 IIS 站点根目录 | web.siteRoots.forum |
D2109_DEPLOY_PUBLIC_HOST | 109 后台 Host Header 域名 | web.publicHosts.109b |
D2113_DEPLOY_PUBLIC_HOST | 113 后台 Host Header 域名 | web.publicHosts.113c |
D2113_DEPLOY_FORUM_PUBLIC_HOST | 论坛 Host Header 域名 | web.publicHosts.forum |
D2109_DEPLOY_ADMIN_PORT | 109 后台回环端口 | web.adminPorts.109b |
D2113_DEPLOY_ADMIN_PORT | 113 后台回环端口 | web.adminPorts.113c |
D2109_DEPLOY_PHP_FASTCGI_PORT | 109 PHP FastCGI 端口 | web.phpFastCgiPorts.109b |
D2113_DEPLOY_PHP_FASTCGI_PORT | 113 PHP FastCGI 端口 | web.phpFastCgiPorts.113c |
D2113_DEPLOY_DATABASE_HOST | 论坛数据库地址 | web.databaseHost |
D2113_DEPLOY_DATABASE_PORT | 论坛数据库端口 | web.databasePort |
D2113_DEPLOY_FORUM_PATH | 论坛公网路径 | web.forumPath |
D2113_DEPLOY_DOCS_PATH | 文档公网路径 | web.docsPath |
临时切换测试主机时只在当前窗口覆盖,不要直接改生产清单。
powershell
# 临时覆盖 109 部署地址;只影响当前 PowerShell。
$env:D2113_DEPLOY_WIN109_HOST = '192.0.2.10'
# 查看覆盖后的部署拓扑;该命令只读。
python .\scripts\d2ctl.py list
# 完成测试后删除当前窗口覆盖,恢复清单值。
Remove-Item Env:D2113_DEPLOY_WIN109_HOST109 与 113 论坛变量
两套论坛业务文件与执行进程完全分开。不能把两个版本都指向同一内部 API,也不能提供公共 API 作为回退。
| 109 | 113 | 作用 |
|---|---|---|
D2109_FORUM_INTERNAL_BASE | D2113_FORUM_INTERNAL_BASE | 本版本论坛服务内部地址 |
D2109_FORUM_ENTRY_PATH | D2113_FORUM_ENTRY_PATH | 本版本论坛入口文件 |
D2109_FORUM_INTERNAL_TOKEN | D2113_FORUM_INTERNAL_TOKEN | 本版本内部调用令牌 |
D2109_FORUM_SIGNING_SECRET | D2113_FORUM_SIGNING_SECRET | 本版本请求签名密钥 |
这些变量应由对应项目的部署配置和受保护 runner 生成。源码中不得出现 http://某台正式机 形式的论坛内部地址。完整 API 变量自动索引见 GameAgent API 参数。
Windows 服务变量
正式服务通常由 srvany.exe 启动项目内 run-*.cmd。修改 Windows 用户变量不一定会立即影响已经运行的服务;部署器会生成或保留 runner 并重启目标服务。不要手工编辑服务注册表来临时改密钥。
powershell
# 查看 109 API 服务的启动包装器;只读。
sc.exe qc D2109Api
# 查看 109 API 的 srvany 参数;只读且可能包含路径,不应公开截图中的秘密。
reg.exe query "HKLM\SYSTEM\CurrentControlSet\Services\D2109Api\Parameters"
# 查看服务当前状态。
sc.exe query D2109Api.env 文件
Linux/Docker 使用 deploy/.env。从示例创建后只在服务器填写;.env 已被 Git 忽略,但仍要限制文件权限。
bash
# 从模板创建本机环境文件;不要把填写后的文件提交 Git。
cp deploy/.env.example deploy/.env
# 限制为文件所有者可读写。
chmod 600 deploy/.env
# 展开最终 Compose 配置并检查变量是否解析,不启动服务。
docker compose --env-file deploy/.env -f deploy/docker-compose.prod.yml config安全检查
powershell
# 搜索源码中可能误写的正式论坛 URL;结果需要人工判断。
rg -n "FORUM_INTERNAL_BASE=http|121\.5\.48\.184|8\.137\.127\.175" .
# 查看将被 Git 提交的文件,确认没有 .env、runner 或密码文件。
git status --short
# 执行清单和硬编码防护检查。
python .\scripts\d2ctl.py validate