Appearance
Windows Server 部署
Windows 正式部署把游戏服务、API 和 Web 分为可独立发布的组件。目标机必须是受控的空白安装或已登记实例;自动安装器会拒绝服务名、端口、路径或客户端版本冲突。
前置条件
| 项目 | 要求 |
|---|---|
| 权限 | 目标机 Administrator,部署机 Python 3 与 Paramiko。 |
| 传输 | OpenSSH 可达,主机指纹已核验。 |
| 客户端资源 | 目标机已有匹配版本 Game.exe 和 MPQ;部署包不携带大型客户端资源。 |
| 目录 | 项目工具在 C:\D2113server;实际游戏运行目录可由目录注册表映射到 D:\pvpgn、D:\d2 等现存位置。 |
| 隔离 | 109 save version 92,113c save version 96;账号、存档、锁、备份、索引和 API 不能跨版本共享。 |
初次安装
不熟悉组件边界时直接运行 python .\scripts\d2ctl.py 进入交互式向导。向导会先预演,并要求输入大写 APPLY 才执行。完整模式与手工恢复步骤见交互式部署向导和手工部署与多 GS。
powershell
# 只读查看正式版本、目标主机和放置关系,不执行部署。
python .\scripts\d2ctl.py list
# 只验证本地部署目录和必需文件,不连接或修改远端。
python .\scripts\d2ctl.py validate
# 预演 1.09b 游戏核心与 API 部署,只打印计划,不上传、不重启。
python .\scripts\d2ctl.py deploy 109b --component game --component api
# 正式部署 1.09b 游戏核心与 API;会修改远端文件和服务状态,执行前必须核对预演结果与备份。
python .\scripts\d2ctl.py deploy 109b --component game --component api --apply底层 deploy-windows.py 会打包 x86 二进制和配置,通过 SFTP 上传,调用 deploy/windows/install-profile.ps1 创建服务,并在变更前备份。deploy/windows/inventory.ps1 用于空主机与端口预检。
日常增量发布
| 组件 | 命令 | 影响 |
|---|---|---|
| 游戏核心 | python scripts/d2ctl.py deploy 109b --component game --apply | 成套更新 BNetD/D2CS/D2DBS/D2GS,按原运行集合恢复。 |
| 当前活动版 API | python scripts/deploy-windows-api.py --profile 109b | 更新 109 核心 API,并在 VIP 主机维护系统专用 D2109VipAgent;不启动 113 游戏。 |
| 109 管理后台 | python scripts/deploy-windows-admin.py --profile 109b | 只更新 d2109/admin-ui、D2Admin109 和 GM109.ZHIYESHI.CN。 |
| 113 管理后台 | python scripts/deploy-windows-admin.py --profile 113c | 只更新 d2113/admin-ui、D2Admin113 和 GM113.ZHIYESHI.CN。 |
| 论坛与 IIS 入口 | python scripts/deploy-windows-iis.py --apply --allow-reboot | 增量更新论坛、IIS 站点和两个版本独立 FastCGI 配置;首次安装 IIS 时允许受控重启。 |
| 在线文档 | python scripts/deploy-windows-docs.py | 只构建并更新 IIS /docs/ 静态应用。 |
当前正式服:仅运行 109
当前活动版本为 109。免费 GS 位于 109 核心主机,VIP GS 位于 Web/113 主机;113 的 BNetD、D2CS、D2DBS、免费 GS 和 VIP GS 均保持停止。D2Admin113 只是独立管理后台,不代表 113 游戏已经部署或启用。
109 后台使用两个同版本管理 Agent:D2109Api 负责账号、角色、交易和免费 GS,D2109VipAgent 只开放系统运维接口并负责远端 D2GS109Vip 的爆率、日志和服务控制。VIP Agent 不读取角色存档,也不会出现在账号/角色数据源选择器中。
powershell
# 只更新当前 109 核心 API,并同步安装或更新 109 VIP 系统运维 Agent;不部署 113 API 或游戏服务。
python .\scripts\deploy-windows-api.py --profile 109b
# 仅修复或更新 109 VIP 系统运维 Agent;不重启核心 API,也不重启免费/VIP游戏服务。
python .\scripts\deploy-windows-api.py --profile 109b --vip-agent-only
# 读取免费与 VIP 爆率,并把 VIP 当前值原样写回以验证热加载链路;不会改变运营设置。
python .\scripts\smoke-formal-drop-tuning.py --round-trip当前只需更新而不启动某版本时,使用对应 API 发布命令,不能执行该版本的 switch --apply 或游戏组件部署。
论坛目录发布结果
论坛增量发布在 113 Web 主机生成以下独立目录,并删除论坛根目录的 d2trade.php、d2trade109.php、d2trade113.php 和旧共享通知加载器:
text
# 109 独立业务入口。
D:\AH.DIABLO2.COM.CN\d2109\d2109.php
# 109 独立聊天兼容入口。
D:\AH.DIABLO2.COM.CN\d2109\d2chat.php
# 109 独立通知配置。
D:\AH.DIABLO2.COM.CN\d2109\d2109_notification_templates.php
# 113 独立业务入口。
D:\AH.DIABLO2.COM.CN\d2113\d2113.php
# 113 独立聊天兼容入口。
D:\AH.DIABLO2.COM.CN\d2113\d2chat.php
# 113 独立通知配置。
D:\AH.DIABLO2.COM.CN\d2113\d2113_notification_templates.php公网主入口分别为 /d2109/d2109.php 与 /d2113/d2113.php,聊天兼容入口分别为 /d2109/d2chat.php 与 /d2113/d2chat.php。后台、Agent 和 D2GS 必须使用对应版本路径,不能再调用论坛根目录的共享入口。
发布脚本会备份并修改两台游戏机上已存在的 d2server.ini,使下次 D2GS 启动直接使用版本独立的内部论坛 URL。大文件只通过部署机 SFTP 中继,不建立临时公网路由。
运维文档站
文档站独立发布到 113 Web 主机的 D:\AH.DIABLO2.COM.CN\docs,公网路径为 /docs/。专用脚本会生成正确的子路径资源、备份原文档、更新 IIS 应用配置并逐文件校验哈希;不重启游戏服务、论坛、后台或数据库。
powershell
# 构建文档并正式发布到 113 Web 主机的 IIS `/docs/` 应用;执行前确认 113 SSH 部署凭据有效。
python .\scripts\deploy-windows-docs.py服务配置
Windows 服务启动器必须提供 D2113_EXPECTED_SAVE_VERSION、角色目录、账号库、API 密钥、D2GS 管理口和版本标识。服务级变量优先于机器变量,避免 Services.exe 继续继承旧环境。
catalog.json 的 web 节点只维护跨主机拓扑。109 和 113 的 API、后台与 PHP runner 环境分别由 d2109/deploy/runtime.json、d2113/deploy/runtime.json 渲染。不要直接编辑正式机的生成结果作为长期配置;应先改对应项目配置,再重新发布该版本组件。
| 后台 | 正式目录 | 服务 | 回环端口 | 公网入口 |
|---|---|---|---|---|
| 109 | D:\GM109.DIABLO2.COM.CN\admin | D2Admin109 | 4139 | https://GM109.ZHIYESHI.CN/ |
| 113 | D:\GM113.DIABLO2.COM.CN\admin | D2Admin113 | 4143 | https://GM113.ZHIYESHI.CN/ |
两边项目根目录内的 run-admin.cmd 必须只保存本版本的 D2_ADMIN_*、D2_API_* 与 D2_FORUM_* 配置。后台源码不提供正式 IP、端口、论坛 URL 或另一版本凭据的回退值。
主机条目的 address、sshPort、rdpPort、username 与 passwordEnv 同样由所有 Windows 部署器和版本切换脚本读取。密码变量名可以写入清单,密码值不能写入清单。
临时变更可通过 catalog.json 顶部 environmentOverrides 已登记的 D2113_DEPLOY_* 变量覆盖;不要自行发明脚本专用变量。D2113_DEPLOY_* 只保存非敏感拓扑,D2113_WIN109_DEPLOY_PASSWORD、D2113_WIN113_DEPLOY_PASSWORD 等密码变量仍独立注入。
验收
powershell
# 只读查看 PvPGN、D2CS、D2DBS、D2GS、核心 API 与 109 VIP 运维 Agent的 Windows 服务状态。
Get-Service bnetd*,d2cs*,d2dbs*,D2GS*,D2113Api,D2109Api,D2109VipAgent
# 只读列出本机监听端口,用于确认端口与目录注册表一致。
Get-NetTCPConnection -State Listen | Sort-Object LocalPort
# 只读检查正式论坛、后台及 API 入口,不执行部署或业务写入。
python .\scripts\inspect-formal-web.py再按发布验收清单检查两个论坛入口、后台国度切换、角色只读、离线自助预检、VIP 时间和日志策略。