Skip to content

图形化离线部署工具 ​

本工具没有预设运营域名、服务器 IP、邮箱或固定盘符。所有相对路径均以完整部署包的解压根目录为基准;保存的实例 JSON 是该实例唯一的环境配置来源。

可搬迁路径和自定义域名 ​

  • 默认安装目录为 instances/<实例ID>,默认组件目录为 .。
  • . 表示 CNBN-D2-Deployment-GUI.exe 所在的完整解压目录,不表示命令提示符当前目录。
  • PHP 和 Node.js 默认分别使用 runtime-dependencies/php/php-cgi.exe 与 runtime-dependencies/node/node.exe。
  • 论坛、管理后台和在线文档的公网域名都在“网络”页单独填写,不带 http://、https:// 或路径。
  • 证书域名在“HTTPS 证书”页填写,可与任意自有域名配合;申请邮箱默认为空,必须由当前运营方填写。
  • 需要私有 ACME 服务时填写完整“ACME 服务地址”;留空则使用 ACME 客户端默认服务。
  • 多个客户、多个版本或多个国度必须分别保存实例 JSON,不能复用密码、令牌、端口或证书状态目录。

实例安装完成后,API、后台及证书脚本通过自身目录定位 runtime、runtime-dependencies、日志和备份目录。移动整个实例目录后不需要搜索替换旧盘符;Windows 服务或计划任务若已安装,需要在新位置重新执行一次部署以刷新系统登记的可执行文件路径。

本页面向第一次接触服务器的管理员。准备 CNBN-D2-deploy-...zip 离线部署包;如果 D2GS 组件未带齐游戏运行资源,还需准备对应版本的 DLL、MPQ 资源目录(也可以选择完整客户端目录)。D2GS 不需要 Game.exe。目标服务器不需要预装 Python、Node.js 或 PHP。

一、压缩包里有什么 ​

解压后请保持整个目录不变,不要只复制 EXE。

文件或目录用途能否删除
CNBN-D2-Deployment-GUI.exe图形化部署工具不能
components/realm/109b1.09 PvPGN、D2CS、D2DBS、D2GS部署 109 时不能
components/realm/113c1.13c PvPGN、D2CS、D2DBS、D2GS部署 113c 时不能
components/api109 与 113 各自独立的 API部署 API 时不能
components/admin109 与 113 各自独立的管理后台部署后台时不能
components/forumPHPWind 与分版本论坛服务文件部署论坛时不能
components/docs-site已编译的在线文档部署文档站时不能
runtime-dependencies/php已展开的 PHP 5.6 运行环境部署论坛时不能
runtime-dependencies/node已展开的 Node.js 12 运行环境部署后台时不能
runtime-dependencies/*.zipPHP、Node 原始离线包,便于校验和恢复建议保留
SHA256SUMS.txt包内文件完整性清单不能

GUI 会从自身所在目录自动发现 components、php-cgi.exe 和 node.exe。如果这三处仍是空白,最常见原因是压缩包没有完整解压,或 EXE 被单独移到了别处。

二、部署前只做三件事 ​

  1. 使用管理员账号登录目标 Windows Server。
  2. 把完整离线包解压到短路径,例如 D:\CNBN-Deploy。
  3. 如果部署 D2GS 且组件未带齐运行资源,把对应版本的 DLL、MPQ 目录放到服务器本地磁盘,例如 D:\D2-109-assets。所选目录中应直接包含资源文件;组件已完整时,“游戏资源目录(可选)”可留空。

不要把客户端的 Save、截图、私人密钥或玩家存档放进部署包。GUI 只读取客户端程序文件,正式角色存档由 PvPGN/D2DBS 管理。

三、第一次打开 ​

右键 CNBN-D2-Deployment-GUI.exe,选择“以管理员身份运行”。首次运行时 Windows 可能显示安全提示,请核对文件名和随包 SHA-256 后再允许。

打开后,以下三项应已经自动填写:

  • 组件包根目录:当前解压目录。
  • php-cgi 路径:runtime-dependencies\php\php-cgi.exe。
  • node 路径:runtime-dependencies\node\node.exe。

管理员通常只需要修改:游戏版本、实例 ID、国度名称、免费或 VIP、安装根目录、游戏资源目录(按需),以及准备安装的组件。

四、最简单的单机部署 ​

  1. 在“实例”页选择游戏版本。
  2. 实例 ID 使用容易识别的英文小写名称,例如 109-free 或 109-vip。
  3. 安装根目录建议使用 D:\CNBN\realms\109-free 这类独立目录。
  4. 若 D2GS 组件未带齐资源,选择对应版本的游戏资源目录;组件完整时留空。
  5. 在“组件”页选择需要的组件。第一次建立完整国度可选择 BNetD、D2CS、D2DBS、D2GS 和 API。
  6. 打开“网络”页检查端口。相同主机上的实例不能监听同一个端口。
  7. 点击“预检”。只有错误数量为零才可以正式部署。
  8. 点击“正式部署”。部署工具先备份旧目录,再复制组件并写入本实例配置。
  9. 在“计划与日志”页确认每项均完成,并保存配置 JSON,方便以后更新同一个实例。

选择论坛时,PHP 会复制到当前实例的 runtime-dependencies\php;选择后台时,Node.js 会复制到当前实例的 runtime-dependencies\node。因此两个实例不会共用运行中的 PHP 或 Node 文件。

五、多国度和多主机 ​

每台主机都运行一份 GUI,只选择本机实际承载的组件。不要在 A 主机的工具里填写 B 主机的磁盘路径。

中心主机 ​

中心主机通常部署 BNetD、D2CS、D2DBS 和 API。允许连接 D2CS/D2DBS 的 GS 地址 填写所有 GS 主机地址;多个地址按现有 PvPGN 配置约定分隔。

GS 主机 ​

每台 GS 主机只选择 D2GS,并把 D2CS 主机地址、D2DBS 主机地址 填成中心主机的内网地址。如果填写游戏资源目录,该目录必须位于当前 GS 主机本地。

多个免费或 VIP 国度 ​

每个国度使用不同实例 ID、安装目录和监听端口。连接到同一个中心服务时,要保证 realmName、D2CS 地址和端口组合与中心主机的国度配置一致。部署前先导出计划,逐台核对后再执行。

六、版本范围 ​

GUI 可配置 1.09b、1.09d、1.10、1.11、1.11b、1.12a、1.13c、1.13d、1.14a、1.14b、1.14c 和 1.14d。当前完整离线包内置经过本项目验证的 109b 与 113c 成品。

其他版本可以使用 GUI,但必须另行提供与所选版本完全一致、包含 bundle.json 的组件包。GUI 会拒绝把 113d D2GS 部署到 114d 实例,也不会通过删除版本检查来强行混用存档格式。

七、常见提示 ​

找不到组件包 ​

确认 EXE 旁边仍有 components 目录;不要只把 EXE 拖到桌面。重新解压完整 ZIP 通常即可恢复。

D2GS 缺少核心运行文件 ​

GUI 对内置 1.09/1.13c 按 D2GS 源码的核心文件清单检查 DLL 和 MPQ,包括 d2server.dll、D2Game.dll、D2Data.mpq、D2Exp.mpq、Patch_D2.mpq 等。文件可分布在组件目录和游戏资源目录中,部署时优先保留组件文件,再补齐资源目录中的缺项。按提示补全对应版本文件,不需要上传 Game.exe;仅有 Game.exe 也不能证明服务端资源完整。其他版本继续校验外部包的 bundle.json 版本,不套用内置版本的文件清单。

如果仍出现“组件包内必须包含 Game.exe”的旧提示,请更新 GUI 可执行文件。

缺少 php-cgi.exe 或 node.exe ​

runtime-dependencies 没有完整解压。不要从网上临时下载不同版本替换,重新解压随包运行时。

端口已被占用 ​

更新已有实例时可能是旧服务仍在运行;新建实例时必须改用空闲端口。不要直接结束不认识的系统进程。

Windows 服务安装失败 ​

关闭 GUI,右键选择“以管理员身份运行”,再次预检并部署。GUI 会检查提权状态;已通过该检查仍失败时,需要查看退出码,不能只归因于权限。

  • 0xC0000135:程序缺少依赖 DLL。随包 PvPGN 是 x86 程序,需要对应版本的 Visual C++ v14 x86 运行库、Universal CRT 和随包 zlib.dll;仅安装 x64 运行库不够。
  • 0xC000007B:程序或 DLL 架构不匹配,例如混用 x86、x64 文件。
  • 0xC0000139:DLL 入口点不兼容,检查运行库和操作系统版本。
  • 退出码 5 或 740:检查管理员提权、服务管理权限及目录权限。

运行库版本不得早于服务端编译工具链版本。当前本地 PvPGN 成品的链接器版本为 14.51;微软最新 v14 运行库支持 Windows Server 2016/2019/2022/2025。GUI 使用 Python 3.8 打包并不表示包内所有服务端程序都兼容旧 Windows。Server 2008 R2、2012/R2 应使用另行验证的旧系统兼容服务端构建,不能简单替换成更旧的运行库。参见微软运行库版本及系统要求。

BNetD 的实际 Windows 服务名为 bnetd,D2CS、D2DBS 分别为 d2cs、d2dbs。GUI 仅在服务不存在(1060)时执行注册,并在注册后验证服务存在。仍失败时,从“计划与日志”复制命令、退出码和输出,并核对 Windows 事件查看器的应用程序日志。

八、更新与回滚 ​

更新时打开上次保存的配置,不要重新建立一个默认配置。保持“部署前备份”勾选,预检通过后再部署。备份位于实例目录的 backups 下;回滚前先停止对应实例服务,只恢复本实例目录,不要拿 109 的备份覆盖 113。

九、HTTPS 证书与自动续期 ​

部署包已经附带 lego.exe、PHP 证书有效期检查器和续期脚本,不需要管理员另行下载 ACME 客户端。打开“组件”页勾选“HTTPS 证书与续期”,再到“HTTPS 证书”页填写参数。

参数填写方法
申请邮箱用于 Let's Encrypt 注册和到期通知,必须是可用邮箱
证书域名填写已经解析到当前主机的域名,多个域名用英文逗号分隔
HTTPS 端口通常为 443;防火墙和云安全组都必须放行
提前续期天数默认 30,表示剩余不足 30 天时续期
每日检查时间24 小时制 HH:MM,例如 03:37
计划任务名称前缀同一主机部署多个实例时必须不同
HTTPS 绑定地址默认 0.0.0.0;多 IP 主机可填写该实例实际绑定的 IPv4 地址
ACME 服务地址通常留空;使用企业或自建 ACME 时填写完整 https://... 地址
部署后立即申请首次部署应勾选;只准备文件时可以暂时取消
开机绑定修复建议保持勾选,服务器启动时重新确认 HTTP.sys 证书绑定

首次申请使用 TLS-ALPN-01 验证。域名必须先解析到当前服务器,公网 443 端口必须可达;申请期间 IIS 会短暂停止。证书仍有足够有效期时,每日任务只检查证书和绑定,不会停止网站。组件的证书、ACME 账号、密码、日志和计划任务都保存在当前实例目录,两个实例不会共用状态。

部署完成后,任务计划程序中应存在 <任务前缀>-Certificate-Renewal 每日续期任务,以及勾选开机修复时创建的 <任务前缀>-Certificate-Binding-Repair。续期日志位于 <安装根目录>\https\renew.log。不要删除 state、pfx-password.txt 或 current-thumbprint.txt。

仅供 CNBN D2 服务管理与开发人员使用