AzerothCore 魔兽世界 WotLK 服务端 Docker 部署:3 条命令起服,坑位已标好
2026/9/19 22:23:47 网站建设 项目流程

AzerothCore 魔兽世界 WotLK 服务端 Docker 部署:3 条命令起服,坑位已标好

【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk

AzerothCore 是魔兽世界 WotLK 版本的开源服务端,这篇走一遍它最省事的 Docker 部署路径:三条命令拉齐数据库、认证、世界服务,改端口、备份、开发热更的日常操作也一并讲清。

先跑起来

先把代码拉到本机,后面所有命令都在这个目录里执行。

git clone https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk cd azerothcore-wotlk

跑完ls能看到docker-compose.ymlsrc/目录,这步就对了。

下面这条会把世界服、认证服、数据库导入、客户端数据四套镜像挨个编译出来。首次构建要下依赖、编整套 C++ 代码,半小时起步,后面再执行就快多了。

docker compose build

命令尾部打印 Successfully tagged、docker images里出现 acore/ac-wotlk- 开头的几个镜像,就算构建完成。

启动所有容器,数据库先起,数据导入和客户端数据生成跟在后面。

docker compose up -d

首跑时数据库导入 SQL 需要几分钟,耐心等。再看一眼状态:

docker compose ps

看到ac-database是 Up (healthy)、ac-db-importac-client-data-init是 Completed、ac-worldserver是 Up,进程就算真正跑起来了。

看懂架构

依赖链其实不长,捋一遍是:1.ac-database(MySQL 8.4)先启动并通过健康检查;2.ac-db-import往 acore_auth、acore_world、acore_characters 三个库里灌初始数据;3.ac-client-data-init把客户端数据写进命名卷 ac-client-data;4.ac-authserver(3724 端口)只等前两步,ac-worldserver(8085 端口,另开 7878 的 SOAP 接口)则要求 db-import 和 client-data-init 都以退出码 0 结束才会被拉起。所以第一次 up 之后 worldserver 迟迟不出现不是故障,是它卡在依赖条件上;两个一次性容器退出后它自然接活。

日常操作

查状态:看世界服是否活着、日志停在哪一行,追它的实时输出最直接。

docker compose logs -f ac-worldserver

看到周期性刷出的玩家上下线、地图加载日志,说明服务在正常运转;Ctrl+C 只退出日志跟踪,不会动容器。

改端口:默认对外端口是数据库 3306、认证 3724、世界 8085、SOAP 7878,对应的都是 DOCKER_…_EXTERNAL_PORT 这组变量。写进本地 .env 比每次在命令行前缀临时变量更省心,这个文件只留在你自己机器上、不纳入版本控制。

echo "DOCKER_DB_EXTERNAL_PORT=3307" > .env docker compose up -d

映射到 3307 是因为 3306 大概率已被本机装着的 MySQL 抢走,改完重启一下编排即可,其余端口变量同理。

做备份:游戏存档基本都在 acore_world 库里,一条 mysqldump 就够,密码是 compose 里默认的 root 口令。

docker compose exec ac-database mysqldump -u root -ppassword acore_world > world_backup.sql

文件生成在当前目录,定期跑一遍、把产物挪到别处,重建容器时数据就丢不了。

跑开发模式:dev 档会把整个代码目录挂进容器,改完代码重新编译就能生效,省去重新构建镜像。

docker compose --profile dev up -d docker compose exec ac-dev-server cmake --build /azerothcore/var/build

第一条拉起 ac-dev-server,第二条在容器内做增量构建,编译完成即等于热更。注意官方注释提醒过,宿主目录放在 Windows 共享盘上 I/O 会非常慢,Linux 或 WSL2 的 ext4 盘最合适。

踩坑实录

场景一:容器全绿,客户端却进不了登录界面。 现象:ps 里一堆 Up,客户端输入账号后被踢回登录页。 原因:服务端还没创建过任何账号,认证自然不通过。 解法:挂进世界服控制台建一个。

docker compose attach ac-worldserver AC> account create admin password 3 -1

gmlevel 3、secgroup -1 分别是 GM 权限和默认安全组。按 Ctrl+P 松开再按 Ctrl+Q 安全离开控制台,Ctrl+C 会把世界服进程一起带走。

场景二:up 直接报端口绑定失败。 现象:启动过程里冒出这样的报错:

[+] Running 2/3 ✔ ac-database Recreated ✘ ac-worldserver Error response from daemon: driver failed programming external connectivity for endpoint "ac-worldserver": Bind for 0.0.0.0:8085 failed: port is already allocated

原因:8085(或 3306、3724)已被本机别的服务占用,Docker 映射不上去。 解法:按上面改端口那节把对应变量写进 .env 换一个空闲端口再 up;如果本机没有必须占着端口的服务,把它停掉更省事。

场景三:up 完 ps 里始终没有 ac-worldserver。 现象:数据库、导入容器都在,唯独世界服不出现。 原因:它在等 ac-db-import 和 ac-client-data-init 两个一次性容器跑完,首次导入量大,等待时间以分钟计。 解法:用docker compose logs ac-db-import盯着导入进度,看到 Completed 后 worldserver 自己就起来了,别手动去 kill 数据库容器。

再往前一步

把容器资源圈个上限:compose 文件本身没写资源限制,而世界服在玩家密集时内存占用会明显抬升、dev 档全量重编译还会吃满 CPU。可以在本地新建 docker-compose.override.yml(同样不纳入版本控制)给 ac-worldserver 和 ac-dev-server 加 memory 与 cpus 限制,防止一个容器把宿主机拖死。

数据卷摆在哪、怎么迁:数据库和客户端数据默认放在命名卷 ac-database、ac-client-data 里,配置文件和日志挂在 ./env/dist 下。重建容器时命名卷自动保留,想跨机器迁移就得用 mysqldump 导出再导入;如果不想依赖 Docker 默认卷位置,把 DOCKER_VOL_DB 等变量指到自己的目录,数据落点就完全由你掌控。

收尾

下一步建议跑docker compose --profile tools把客户端地图数据抽出来,让你手头的 3.3.5 客户端真正能登录进世界。再往后可以翻翻 modules 目录的脚本框架和 e2e 测试套件,改完玩法逻辑用开发模式增量编译验证,从起服到改服的整条链路就闭环了。

【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询