马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 0001 于 2026-6-11 02:02 编辑
曾经跟大家分享交流过传奇3的docker部署流程,评论区有个用户朋友留言问nas能不能部署魔兽世界服务器?现在补上这个坑。 项目资料:开源框架AzerothCore、群晖第三方套件WoWServer_v1.0.52_x64_DMS7.2.spk (WoWServer v1.0.52)。 (AzerothCore 是一个采用 AGPL v3.0 开源协议的游戏服务器框架,由全球开发者社区共同维护。它不包含任何受版权保护的游戏资源(模型、贴图、音乐等),仅实现了网络通信与游戏逻辑模拟的服务器端功能。) 声明: 本文仅用于技术学习与交流。请遵守当地法律法规及游戏用户协议。本文不提供任何游戏客户端资源的获取方式。
一次在家用 NAS 上部署 Docker 容器化游戏服务端的技术记录,涵盖 Compose 编排、数据库管理、网络配置等实战经验。
本文记录我在绿联 NAS 上通过 Docker 部署该框架的技术过程,涉及容器编排、服务依赖管理、数据库迁移等常见 DevOps 场景,适合对 Docker 和家庭服务器感兴趣的读者参考。
部署方式我写了两种,一种是给本地用户使用命令行学习使用,另一种我适配了绿联nas docker项目部署方式,给绿联的朋友学习使用docker-compose(先写好的上一种,为了绿联nas的docker-compose限制又返回修改适配,真磨人)。 游戏画面 本地部署 本文不做过多介绍,详细文档请查看仓库 README.md。 - # 1. 克隆项目到本地
- git clone https://github.com/asm0x1/wow-docker.git
- cd wow-docker
- # 2. 复制 .env 模板并编辑
- cp .env.dist .env
- # 3. Apple Silicon Mac 必须设置 (Intel Mac 跳过)
- export DOCKER_DEFAULT_PLATFORM=linux/amd64
- # 4. 启动
- docker compose up -d
复制代码
NAS部署
项目结构
采用 Docker Compose 管理多服务依赖,运行时共 4 个容器: - ac-database
- ├─► ac-worldserver (游戏世界)
- ├─► ac-authserver (认证 + realm初始化 + 账户创建)
- │ └─► ac-registration (Web 注册)
- └─► phpmyadmin (可选)
复制代码技术栈一览: | 组件 | 技术 | | 数据库 | MariaDB 10.11 | | 服务器 | C++ 编译的 AzerothCore 二进制 | | Web | Apache 2.4 + PHP 8.2 | | 容器编排 | Docker Compose v3 | | 脚本 | Bash (entrypoint 自动初始化) |
部署步骤
1. 准备地图数据
将提取的数据放入项目目录: - docker/wow/
- └── data/
- ├── maps/
- ├── dbc/
- ├── vmaps/
- ├── mmaps/
- └── cameras/
复制代码 地图数据约 2-3GB,不包含在项目仓库中。
2. 复制 docker-compose
将我写好的内容复制到剪贴板
3. 修改并部署 绿联 NAS(Docker → 项目 → 新建项目): - 项目名称:wow - 项目文件夹:选择步骤 1 创建的目录 - 将剪贴板内容粘贴到编辑器,修改编辑器顶部修改两个值 - x-deploy-config:
- REALM_IP: &REALM_IP 192.168.1.100 # ← 改成 NAS 的局域网 IP
- DB_ROOT_PASS: &DB_ROOT_PASS wow@asm0x1 # 数据库密码,按需修改
复制代码 项目使用 YAML 锚点(&name / *name)实现配置集中管理——顶部定义一次,下方所有服务自动引用,告别"一处改、处处改"的维护噩梦。 - 点击「部署」其他支持 Docker Compose 的环境(命令行): - docker compose -f nas/docker-compose.yml up -d
复制代码
关键技术细节 容器启动顺序与依赖管理
服务间有严格的启动顺序依赖,通过 depends_on + healthcheck 实现: - ac-worldserver:
- depends_on:
- ac-database:
- condition: service_healthy # 等待数据库健康检查通过
复制代码
入口脚本 entrypoint-worldserver.sh 在启动时自动完成: 这种 "entrypoint 自动化" 模式避免了手动执行 SQL 脚本的繁琐操作。
NAS 环境的特殊处理
部分 NAS 的 Docker UI 不支持 Compose 的 ${VAR:-default} 变量替换语法。项目采用了锚点 + 直接值的方案,彻底规避此问题: - # ❌ 不可靠的写法(依赖 Compose 解析 .env)
- environment:
- REALM_IP: ${REALM_IP:-127.0.0.1}
-
- # ✅ 可靠的写法(锚点引用 + 直接值)
- x-deploy-config:
- REALM_IP: &REALM_IP 192.168.1.100
-
- environment:
- REALM_IP: *REALM_IP
复制代码
数据持久化
所有持久数据存储在 Docker 命名卷 ac-database-data 中,包括账户、角色、世界状态等。容器删除后数据依然保留,重新部署自动恢复。 如需完全重置,删除项目时勾选「同时删除卷」。
防火墙配置
确保 NAS 防火墙放行以下端口: | 端口 | 协议 | 用途 | | 3724 | TCP | 游戏登录认证 | | 8085 | TCP | 游戏世界通信 | | 8765 | TCP | Web 注册页面 |
常见问题:1.开启了防火墙,禁止了对应IP段连接导致连接服务器失败。2.只放了 3724 而忽略 8085,导致能登录但进不去游戏世界。
日常运维
调整服务参数
编辑 YAML 中 x-bot-config 部分,修改后重新部署: - x-bot-config:
- BOT_MIN_COUNT: 10 # AI 玩家最小在线数
- BOT_MAX_COUNT: 30 # AI 玩家最大在线数查看日志
复制代码查看日志 命令行环境下: - docker compose -f nas/docker-compose.yml logs -f ac-worldserver
复制代码绿联 Docker UI:点击容器 → 日志。
更新镜像
踩坑记录
Apple Silicon Mac 本地开发:需要 export DOCKER_DEFAULT_PLATFORM=linux/amd64,因为二进制是 x86_64 编译的 NAS 上 realmlist 地址错误:客户端能登录但进不去世界——排查发现 REALM_IP 配错了,改对后问题消失 端口没放全:NAS 防火墙容易只放 3724 忽略 8085,导致"能选服不能进"的尴尬
总结
通过这个项目,可以实践以下 Docker/DevOps 技能: 对于一个家庭 NAS 来说,这也是检验其性能的好机会——2-3GB 地图数据加载、数百 MB 内存占用、多客户端并发连接,对 CPU 和磁盘 I/O 都是不小的考验。
关于 AzerothCore: 这是一个采用 AGPL v3.0 协议的开源项目,源代码完全公开,不含任何受版权保护的游戏素材。所有代码由社区贡献者出于技术研究目的编写。本项目仅涉及服务端框架的技术部署,使用前请确保你了解并遵守适用的法律、法规及用户协议。
|