NAS 上自己开个传奇服!绿联 NAS 用 Docker 部署皓石传奇三,自带 Web GM 后台

绿联 NAS 用 Docker 部署传奇三服务端

一句话版本:皓石传奇三(Zircon Mir3)是开源的传奇三服务端,官方有现成 Docker 镜像,Linux、Windows、Docker 三平台都能跑。真正的门槛不在 Docker,而在数据包整理建网报错——这两件事我都踩过,下面直接给你可抄的 docker compose 和踩坑解法,凑齐「镜像 + 数据 + 配置」三样东西就能进游戏。

一、先看效果

部署完之后你会得到两样东西:一个跑在 NAS 上的传奇三服务端(四个职业、上千张地图、四职业技能升到 6 级),以及一个免装客户端就能用的 Web 管理后台——在线玩家、注册账号、物品库、刷怪、经验掉率全在里面改,等于自己给自己发 GM 权限。

这是我这边跑起来的后台仪表盘(服务端已经连续运行 2 小时 45 分钟,线程池和内存都很轻):

皓石传奇三 Web 管理后台仪表盘

二、准备三样东西

1. 服务端镜像

镜像名 raphzhang/zirconlegend:latest,Docker Hub 直接拉,211MB 左右,作者每次发版都会更新。绿联 NAS 是 x86 架构,正常拉取即可(国内网络建议在绿联 Docker 里先配好镜像加速器)。

2. 服务端运行数据(约 800MB 解压后)

地图数据太大,官方只放在网盘里。在项目 README 里能拿到百度网盘地址(提取码 j1rm),嫌慢的话 QQ 群文件里也有一份备份。

两个关键提醒:

  • 压缩包是加密的,解压密码就是作者公布的 QQ 群号 915941142;
  • 网盘里通常有 两个版本的服务器运行文件(比如 9/10 和 9/15 两个日期)。要选跟当前镜像版本配套的那份:新版里数据目录是 datas/Database/System.db,旧版是 datas/Data/System.db。选错了服务端会找不到数据库。

3. 最新的 Server.ini

去项目的 GitHub Releases 页面下载最新的 Server.ini(只有 3KB 上下),它要覆盖数据包里自带的旧配置文件。注意这里只下 Server.ini,那几个几十 MB 的 Server-xxx-win-x64.zip-linux-x64.zip 是给不用 Docker、直接跑二进制的场景准备的,容器方案里用不上。

三、三步部署

第 1 步:摆好数据目录

在绿联的共享文件夹里建一个项目目录(我这里用 共享文件夹/docker/mir3server),把数据包解开后的 datas 放进去,再把下载来的 Server.ini 覆盖进去:

docker/mir3server/
├── docker-compose.yaml
└── datas/
    ├── Database/
    │   ├── System.db        # 游戏数据库(必需)
    │   └── Users.db         # 账号库(可选,放进去就能用内置 GM 账号)
    ├── Map/                 # 上千张 .map 地图
    ├── Server.ini           # 用 Releases 里最新那份覆盖
    ├── block_devices.txt
    ├── 欢迎语.txt
    └── 转生标识设置.txt

两个小坑先说在前面:

  • 数据包里的中文文件名是 GBK 编码,用普通解压工具解出来可能变成乱码文件名,服务端就找不到 欢迎语.txt 这些文件了。解压后扫一眼文件名是不是正常中文;如果乱码,换用支持指定编码的解压工具;
  • Users.db 是账号库,官方运行文件里未必带。想要开箱就有的内置账号(管理员 raphael@gm.gm,密码 123456),就把这个文件补进 Database/;不放也行,进游戏时自己注册,服务器默认允许注册。

第 2 步:写 docker compose

绿联 Docker → 项目 → 创建项目,存放路径选上面那个目录,Compose 配置直接粘贴:

services:
  zircon:
    container_name: zircon
    image: raphzhang/zirconlegend:latest
    network_mode: bridge
    ports:
      - "17101:7000"   # 游戏端口,客户端连这个
      - "17181:7080"   # Web 管理后台
    restart: unless-stopped
    user: "0:0"
    volumes:
      - ./datas:/zircon/datas
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    environment:
      - PUID=1000
      - PGID=10
      - TZ=Asia/Shanghai

这里故意不写自定义网络,只用 Docker 自带的 bridge,原因见下一节的坑 1。端口左边的 17101 / 17181 可以按自己喜好改,但客户端和浏览器访问时要用同一个。

第 3 步:启动并确认

点「立即部署」。成功后看日志,出现下面这几行就说明服务端活着:

皓石传奇三 v1.14.0.xxxxx
客户端更新路径:
地图文件路径:./datas/Map/
最大连接数量限制:200
[xx:xx:xx]: 网络已启动.
[xx:xx:xx]: Web 服务已启动.
[xx:xx:xx]: 加载耗时: 6 秒

浏览器打开 http://你的NAS内网IP:17181,能看到登录页就全通了。默认管理员账号 raphael@gm.gm、密码 123456;登不上就直接注册一个新账号,登进后台之后在「账号管理」里给自己勾上管理员即可。

四、三个我真实踩过的坑

坑 1:建网报错 —— Pool overlaps / all predefined address pools have been fully subnetted

如果你按作者 README 那份 compose 抄,里面写死了 1panel-network 和一个固定的 ipv4_address,在绿联上大概率直接卡在创建网络这一步,报这两种错:

  • invalid pool request: Pool overlaps with other one on this address space:你指定的网段和 NAS 上已有的网络重叠(Docker 预留的默认地址池也算),换网段也可能继续撞;
  • all predefined address pools have been fully subnetted:不指定网段时要用默认池,而默认池已经被 NAS 上的一堆项目网络切满了。

正确解法有两个,任选:

  • 首选:不用自定义网络。把 compose 里的 networks: 段和 ipv4_address 全删掉,加上 network_mode: bridge,容器直接挂到 Docker 自带的默认 bridge 上,从头到尾不新建网络,这两类报错就不会出现;
  • 顺手清一下环境:如果你能 SSH 进 NAS,跑一次 docker network prune,把废弃项目遗留的无用网络删掉,以后新建项目也不容易再撞池子。

注意:用 network_mode: bridge 之后,不需要再去动 Server.ini 里的 IPAddress,保持默认的 0.0.0.0 就是对的(它表示监听容器内所有网卡)。

坑 2:目录里有两个 compose 文件

绿联的界面项目会生成 docker-compose.yaml,你要是又手动放了一份 docker-compose.yml,命令行工具每次都会警告「Found multiple config files」,而且界面点「重新部署」时读的可能还是那份旧的——一不小心就把容器用旧配置重建回去。留一个就行,建议统一成界面那份 docker-compose.yaml

坑 3:数据目录选错

前面提过的 DatabaseData 之分。日志里如果出现数据库相关报错,先 ls 一下 datas 目录,确认层级是 datas/Database/System.db,并且 Server.ini 就躺在 datas 根下。

五、后台能干什么

这个自研的 Web 后台是它比传统传奇服务端好用太多的地方,不用装任何 Windows 工具就能改服务端数据。比如物品管理,我这里 1660 条物品直接搜索、改属性、改价格和堆叠上限:

皓石传奇三后台物品管理

左侧菜单里还有玩家管理、账号管理、角色管理、地图管理、怪物管理、NPC 管理、技能管理、职业管理和服务器配置,常用的经验倍率、掉落倍率、刷怪倍率都能在这里调。另外服务端还支持 Webhook 事件通知,可以把关键运营事件推到手机上。

六、客户端怎么连(NAS 只跑服务端)

客户端是 Windows 桌面程序(.NET Framework 4.8 + SlimDX,DirectX 9),没有 Docker 版,也不能装到 NAS 上,要放在玩游戏的 Windows 电脑里:

  1. 下载客户端运行数据包(3GB 左右,同样在网盘,含 DataMapSoundTranslations 四个目录);
  2. 去客户端项目的 Releases 下载最新的 Client-v1.13.0-win-x86.zip,解压到同一个目录;
  3. 安装依赖:.NET Framework 4.8、DirectX 9.0c、C++ 运行库合集(SlimDX 需要);
  4. Legend.ini,把地址指向 NAS:
IPAddress=192.168.3.19   ; 你的 NAS 内网 IP
Port=17101               ; 对应 compose 里的 17101:7000
FullScreen=False
GameSize=1920, 1440

保存后双击 Legend.exe 就能进游戏。局域网里直接连就行;想让外网的朋友进来,再去路由器把 17101 映射到 NAS,把客户端里的地址改成域名或公网 IP。

七、日常运维命令

cd /volume1/docker/mir3server
docker compose ps            # 看运行状态
docker compose logs -f       # 实时看日志
docker compose restart       # 重启
docker compose down          # 停止并删除容器(数据不丢)
docker compose up -d         # 重新启动
docker compose pull && docker compose up -d   # 升级到最新镜像

玩家数据都躺在 datas/Database/ 里,down 不会动它们;要备份就整个 datas 目录打包(Map 可以跳过,主要备 Database 和那几个 txt)。compose 里写了 restart: unless-stopped,NAS 重启后容器会自己拉起来。

八、最后的几句实话

这套东西全程没花一分钱,镜像和数据都是开源项目现成的,资源占用也低——一台 N5095 + 8G 的威联通都能跑起来,绿联的 i5 机型更是绰绰有余。真正花时间的是前面那些坑:网段撞车、文件编码、目录层级,踩一次就明白了。

另外必须说明:皓石传奇三(Zircon)与 Crystal Mir2 都是供学习游戏技术使用的开源项目,作者明确禁止商用和非法用途,客户端里的图形资源也来自网络。自己局域网内玩、或者和几个朋友开个小服没问题,请不要拿去做公开收费服。

九、参考资料


本文记录的是我在绿联 NAS(DXP6800 Pro)上的真实部署过程,封面为 HTML 排版渲染,Docker Compose 可直接复制使用。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息