找回密码
 立即注册
查看: 19|回复: 0

【Docker 整合】完美国际 173 端单容器镜像

[复制链接]

1588

主题

0

回帖

1588

积分

金牌会员

积分
1588
发表于 前天 13:56 | 显示全部楼层 |阅读模式
# 【Docker 整合】完美国际 173 端单容器镜像:NAS 一条命令开服,存档持久化,自带踩坑实录

> 来源:游蝶网单的完美国际 173 端 VMware 包(服务端 VM + 客户端 V3456),本人做了 Docker 化整合。
> 感谢原端作者与游蝶网单的整理打包。

## 一、这是什么

把 11.3GB 的 VMware 虚拟机服务端,整合成**一个 Docker 镜像**(约 5GB):Ubuntu 24.04 底座 + 原端 CentOS 同源 i386 老库注入,虚拟机里的全套服务(glinkd/authd/gamedbd/gdeliveryd/gfactiond/gs 等"八大件"+ MariaDB + JDK8 + iweb)全部装进单个容器,**内部互联零改动**,对外只开两个端口。

NAS(或任何 x86 Linux 机器)上 `docker compose up -d` 一条命令开服,`restart: unless-stopped` 开机自启,游戏存档走 Docker 卷持久化——`docker compose down` 不丢档。

## 二、亮点

- **镜像即整机**:不用装 VMware,不用改任何服务端配置(内部拓扑全是 127.0.0.1)
- **存档卷持久化**:角色数据(gamedbd 文件存储)+ 账号库(MySQL)独立数据卷,升级/重建容器存档都在
- **自愈**:容器入口脚本带 glinkd 存活监控,服务掉线自动重启
- **首次启动全自动**:空数据卷自动初始化 MariaDB、建账号库(含 adduser 等 26 个存储过程)、拉起全套服务
- 踩坑全记录(文末 FAQ),包括客户端连接的几个隐蔽大坑

## 三、环境要求

| 项 | 要求 |
|---|---|
| 架构 | **x86_64**(服务端是 32 位 i386 二进制,ARM 的 NAS 跑不了) |
| Docker | 18.09+(建议 20+;群晖/威联通/飞牛 fnOS/Unraid 均可) |
| 内存 | ≥2GB 空余 |
| 磁盘 | 镜像 ~5GB + 存档预留,建议 10GB+ |

## 四、部署(三步)

```bash
# 1. 导入镜像(1.84GB 压缩包,下载后)
docker load < wm-all.tar.gz

# 2. 写 docker-compose.yml(见下)或直接 docker run
# 3. 启动
docker compose up -d
# 看启动进度:docker logs -f wm-all
# 出现 &quot;glinkd 29000 就绪,服务器启动完成&quot; 即开服成功
```

`docker-compose.yml`:

```yaml
services:
  wm-all:
    image: wm-all:latest
    container_name: wm-all
    restart: unless-stopped
    ports:
      - &quot;29000:29000&quot;   # 游戏网关(客户端入口)
      - &quot;29200:29200&quot;   # 账号认证(完美国际登录是直连这个端口,不开放就&quot;连接断开&quot;!)
    volumes:
      - wm-saves-dbhome:/root/pwserver/gamedbd/dbhome       # 角色数据真实落点(存档就在这)
      - wm-saves-dbhomewdb:/root/pwserver/gamedbd/dbhomewdb # 写穿缓存
      - wm-saves-backup:/root/pwserver/gamedbd/backupwdb
      - wm-mysql:/var/lib/mysql                             # 账号库
    environment:
      - TZ=CST-8

volumes:
  wm-saves-dbhome:
  wm-saves-dbhomewdb:
  wm-saves-backup:
  wm-mysql:
```

> &#9888;&#65039; 卷映射请照抄上面这份:`dbhome` 才是角色数据的真实落点。老版本 compose 把卷挂到 `dbdata`/`dblogs` 等游戏根本不写的路径,平时看着正常,**重建容器就丢角色进度**。

> &#9888;&#65039; 29200 端口必须一起发布!这个端登录流程是客户端**直连 authd:29200** 认证,只开 29000 的话能进登录界面、一点登录就&quot;与服务器的连接已经断开&quot;(本人排了半天才定位的坑)。

## 五、客户端连接

用原帖的客户端 V3456,改**三个文件**里的服务器 IP 为你 NAS 的 IP(默认内置 `29000:192.168.200.100`,是原虚拟机的地址,必须改):

1. `element\serverlist.txt` —— 选服列表
2. `element\userdata\currentserver.ini` —— 登录界面实际用的&quot;当前服务器&quot;缓存
3. `patcher\server\serverlist.txt` —— **真正发起连接的地址**(`startbypatcher` 启动模式读的是它,最大的坑)

三个文件都是 UTF-16LE 编码,用记事本能改(改完另存为&quot;Unicode&quot;编码)。改完用登录器或 `element\elementclient.exe game:cpw nocheck startbypatcher console:1` 启动。

## 六、账号

- 镜像内置账号:`1234` / `123456`(登录后可直接建角色)
- 新建账号(NAS 上执行,密码与用户名拼接取 md5 后入库):

```bash
docker exec wm-all mariadb -uroot -p123456 wm -e \
&quot;call adduser('新账号', 0x<md5(新账号+密码)>, 'q', 'a', '127.0.0.1', '0', '[email&#160;protected]', '0','0','0','0', '密码明文', '0','0','0', '0', 0x<同前哈希>)&quot;
```

- 客户端限制:密码 **6~10 位**,账号建议 6 位以上

## 七、数据与备份

- 游戏存档(角色/物品/进度)在 `wm-saves-*` 卷,账号在 `wm-mysql` 卷
- 备份:`docker run --rm -v wm-docker_wm-saves-dbhome:/data -v $(pwd):/backup alpine tar czf /backup/saves.tgz /data`(卷名按 `docker volume ls` 实际为准;`wm-docker_` 前缀对应你的 compose 目录名)
- &#9888;&#65039; `docker compose down -v` 会**删除全部存档**,平时只用 `down`/`stop`

## 八、FAQ(全是本人实测踩过的坑)

**Q1:能进登录界面,点登录就&quot;与服务器的连接已经断开&quot;**
按顺序查:① 29200 端口发布了没有(见第四节);② 客户端三个 serverlist 文件都改了没有(第五节);③ 如果开着代理/VPN 的 TUN 模式,先关掉再试——fake-IP 代理会把&quot;连不上&quot;伪装成&quot;连上又被断开&quot;,极难排查。

**Q2:登录提示密码错误但密码明明对**
本镜像密码哈希已修复为正确的 binary 存储。如果你是自己从原 VM 的 MySQL 导数据:注意原库 `users.passwd` 是 latin1 按字节存的 md5,跨字符集 mysqldump 导入 utf8 库会把哈希转坏(所有账号集体登录失败),需把列改成 `VARBINARY(64)` 后用 `UNHEX()` 重写。

**Q3:双倍经验等时间类功能不对**
容器内时区已设 `TZ=CST-8`。这个端的老 C++ 二进制不认 `Asia/Shanghai` 格式,自己改配置时别换回去。

**Q4:怎么确认服务起来了**
`docker exec wm-all ss -tln` 应看到 29000/29100/29200/29300/29301/29400/29401/29500/29600/29702/29712/10901/11101/65535 共 14 个游戏端口监听(MySQL 3306 默认只听容器内 127.0.0.1,不对外);`docker logs wm-all` 末尾有&quot;glinkd 29000 就绪&quot;。

**Q5:容器/NAS 重启后,新建的账号和角色进度还在吗**
在。账号库持久化在 `wm-mysql` 卷,角色数据在 `wm-saves-*` 卷;入口脚本带首启判定(库只导一次),本人实测重启零重导、新建账号原样存活。

**Q6:想改回原虚拟机方案**
镜像与 VMware 包互不干扰;客户端三个 serverlist 改回 `192.168.200.100` 即可(需虚拟机在跑)。

## 九、下载

- 服务端镜像:通过网盘分享的文件:wm-all.tar.gz
链接: https://pan.baidu.com/s/1quJxf4m-iHaVO-Kq4zWiRQ?pwd=n9ww 提取码: n9ww 复制这段内容后打开百度网盘手机App,操作更方便哦
  SHA256:`a02db0e88262fc44522b1c93776310a526bda8566559a81a3b95c875dce7db24`
  导入:`docker load < wm-all.tar.gz`
- 客户端:用原帖 V3456 客户端
- **客户端连接修正包**:通过网盘分享的文件:wm-client-fixpack.zip
链接: https://pan.baidu.com/s/1DMvrIQ1ZSiTuT7y6a5iuDw?pwd=rggr 提取码: rggr 复制这段内容后打开百度网盘手机App,操作更方便哦
  含三文件自动切换脚本(switch-server.ps1)、启动游戏.bat、中文使用说明——不会改配置的直接用这个包,一条命令切服,不用手动碰 UTF-16 编码

个人整合作品,仅供本地单机研究学习,请勿商用;转载注明原端来源(游蝶网单)与本帖。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|白黑论坛 |网站地图

GMT+8, 2026-9-24 01:47 , Processed in 0.900859 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表