Appearance
目录与版本边界
仓库目录
text
C:\D2113server
├─ d2109/ Diablo II 1.09 独立项目
│ ├─ admin-ui/ 109 管理后台与 Node 网关
│ ├─ crates/ d2109-api、存档和文本库
│ ├─ pvpgn-server/ 109 BNetD、D2CS、D2DBS、PvPGN
│ ├─ d2gs/ 109 D2GS
│ ├─ data/ 109 静态数据
│ ├─ dependencies/ 109 构建依赖
│ └─ third_party/ 109 第三方源码
├─ d2113/ Diablo II 1.13c 独立项目
│ ├─ admin-ui/ 113 管理后台与 Node 网关
│ ├─ crates/ d2113-api、存档和文本库
│ ├─ pvpgn-server/ 113 BNetD、D2CS、D2DBS、PvPGN
│ ├─ d2gs/ 113 D2GS
│ ├─ data/ 113 静态数据
│ ├─ dependencies/ 113 构建依赖
│ └─ third_party/ 113 第三方源码
├─ forum/ 论坛与论坛服务前端独立项目
│ ├─ phpwind/ PHPWind 论坛和 d2109/d2113 业务入口
│ ├─ bridges/ QQ、微信等消息桥接
│ └─ tools/ 论坛修复与运营工具
├─ deploy/ 跨主机部署清单和平台模板
│ ├─ realms/ 主机、端口、实例和环境覆盖清单
│ ├─ windows/ Windows 服务、IIS 和安装模板
│ ├─ docker/ Linux 容器镜像构建文件
│ ├─ d2wine/ Wine32 游戏服务启动入口
│ ├─ phpwind/ 论坛容器与运行模板
│ ├─ pvpgn-lua/ PvPGN Lua 扩展部署文件
│ └─ host/ 宿主机初始化和权限脚本
├─ scripts/ 构建、发布、切换、审计和测试入口
├─ dist/ 本机构建与发布包;可重新生成,不是源码
├─ runtime/ 本机可变运行数据,不属于任何源码项目
├─ docs/ 开发与历史专题文档
└─ docs-site/ 在线运维文档d2109 和 d2113 是两个可单独构建、测试和发布的项目。禁止从一个项目的源码目录导入另一项目的 API、管理后台、PvPGN、D2GS、静态数据或构建依赖。根目录的 deploy/ 与 scripts/ 只负责编排,不承载版本业务实现。
两个版本目录中的常见子目录含义相同但内容不能共用:admin-ui 是 Vue/Node 后台;crates 是 Rust 工作区;pvpgn-server 是 BNetD、D2CS、D2DBS 源码;d2gs 是对应版本 D2GS;data 是规则和文本数据;dependencies、third_party、vendor 是可复现构建依赖;tools 是本版本专用转换和验证工具;deploy 是本版本非敏感运行配置。113 独有的 d2slib、d2gs-reference 只服务 113 开发,不得被 109 构建引用。
.git 是版本历史,不能手工删除;.gitignore 指定不提交的运行数据;.gitattributes 管理文本换行;AGENTS.md 是工作区维护约束;docker-compose.admin-ui.example.yml 是示例,不是当前正式部署入口。
正式 Web 目录
text
C:\D2109server 109 API、数据、日志与 VIP Agent
D:\GM109.DIABLO2.COM.CN
├─ admin\ 109 后台程序
├─ runtime\node\ 109 Node 运行时
├─ logs\ 109 后台日志
├─ backups\ 109 后台发布备份
├─ secrets\ 109 后台私密配置
├─ run-admin.cmd 109 后台启动入口
└─ web.config 109 IIS 根站点配置
C:\D2113server 113 API、数据与日志
D:\GM113.DIABLO2.COM.CN
├─ admin\ 113 后台程序
├─ runtime\node\ 113 Node 运行时
├─ logs\ 113 后台日志
├─ backups\ 113 后台发布备份
├─ secrets\ 113 后台私密配置
├─ run-admin.cmd 113 后台启动入口
└─ web.config 113 IIS 根站点配置
D:\AH.DIABLO2.COM.CN
├─ d2109\ 109 论坛业务入口和通知配置
├─ d2113\ 113 论坛业务入口和通知配置
├─ docs\ 运维文档站
├─ forum-services\d2109\ 109 独立 PHP 运行时和 runner
├─ forum-services\d2113\ 113 独立 PHP 运行时和 runner
├─ compat\ 旧地址的受控兼容入口
├─ backups\ 论坛和文档部署备份
├─ attachment\、data\等 PHPWind 论坛持久文件
└─ web.config 论坛 IIS 根站点配置两个后台使用不同服务、端口、Cookie、会话密钥、API 凭据、国度注册表和自动部署包:
| 项目 | 公网入口 | Windows 服务 | 回环端口 | 源码 |
|---|---|---|---|---|
| 1.09 | https://GM109.ZHIYESHI.CN/ | D2Admin109 | 4139 | d2109/admin-ui |
| 1.13 | https://GM113.ZHIYESHI.CN/ | D2Admin113 | 4143 | d2113/admin-ui |
任一后台收到另一版本的 profile 都应拒绝请求,不允许通过隐藏参数重新启用跨版本控制。
后台的客户端路径、方块尺寸、版本标签和部署 profile 由各项目的 project.ts / project-profile.js 固定,不再运行时判断另一版本。每个 GameAgent 也只接受与自身 profile 相同的 system-topology.json 项;错误版本的服务或配置项会被忽略并写入错误日志。新机器安装后分别创建 D2109Agent 或 D2113Agent 计划任务。
不存在公共或共享 /api/。两台公网入口的 /api 与 /api/* 固定返回 404;浏览器只能通过各版本后台的认证代理访问本版本 API。
同一版本的免费/VIP GS 可以分布在不同主机。此时后台仍只管理一个游戏版本,但可连接多个同版本 Agent。当前 109 使用核心 D2109Api 和系统专用 D2109VipAgent;后者只承载 VIP GS 运维接口,不是 113 API,也不代表 113 游戏服务已启用。
运行数据
text
runtime/
├─ pvpgn-109b/ 109 账号、配置、角色、锁和备份
├─ d2gs-109b/ 109 D2GS 运行文件
├─ pvpgn-113c/ 113 账号、配置、角色、锁和备份
├─ d2gs-113c/ 113 D2GS 运行文件
└─ formal-deployment-state.json运行数据虽然集中在根目录便于本机测试,但路径必须按版本隔离。var/users、var/charsave、D2DBS 锁、角色备份、API 索引、交易托管和审计目录均不得跨版本共享。
配置清单
deploy/realms/catalog.json 只保存主机拓扑和正式放置关系;109/113 非敏感运行配置分别位于 d2109/deploy/runtime.json 与 d2113/deploy/runtime.json。密码、令牌和签名密钥仅保存在各项目受 ACL 保护的正式机 runner 中。
| profile | 存档版本 | API | 论坛入口 | 后台入口 |
|---|---|---|---|---|
109b | 92 | d2109-api-x86.exe | d2109/d2109.php | GM109.ZHIYESHI.CN |
113c | 96 | d2113-api-x86.exe | d2113/d2113.php | GM113.ZHIYESHI.CN |
1.09b 与 1.09d 共用 v92 存档规则,不按补丁字母分叉存档解析。
历史协议兼容边界
代码隔离不等于立即重命名现网协议和数据库。pw_d2113_* 是已有论坛业务表前缀,X-D2113-* 是已部署的内部签名请求头,部分 D2113_* 是 GameAgent 的历史通用环境变量。这些名称在完成带回滚方案的数据/API 迁移前继续保留,但不得用于选择游戏版本、存档目录、论坛入口、后台 Cookie、Agent 注册表或系统拓扑。真正的项目选择只能来自 109/113 各自的固定 profile 和部署清单。