拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AzerothCore 魔兽世界 3.3.5 私服容器化部署指南:Docker 一篇搞定从构建到登录

AzerothCore 魔兽世界 3.3.5 私服容器化部署指南:Docker 一篇搞定从构建到登录

AzerothCore 魔兽世界 3.3.5 私服容器化部署指南:Docker 一篇搞定从构建到登录

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

本文用 Docker Compose 完成 AzerothCore 这套开源魔兽世界服务器的容器化部署,跟完即可得到一个 3.3.5 客户端能直接登录的私服 realm。MySQL、编译工具链全部内置在镜像里,宿主机不需要装任何东西。

动手前先确认 Docker 可用、四个端口空闲

这一步的目标是排除环境因素。只需要两件事:Docker 带 Compose v2 插件(Docker Desktop 默认自带),以及宿主机 3306、3724、8085、7878 四个端口空闲——3724 走账号认证,8085 走游戏连接,7878 是给外部工具用的 SOAP 接口,3306 留给本地查库方便。磁盘至少留 30GB,首次构建要在容器里把整套源码编译一遍。

docker compose version docker ps

第一条能打印版本号、第二条不报错,环境就算合格。另外提前备好一个魔兽世界 3.3.5 客户端,最后登录验证要用到。

拉取源码,一次构建出全部镜像

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

构建过程在 Ubuntu 24.04 容器内完成:CMake + clang 依次编译出 authserver、worldserver、dbimport 等二进制,同时产出 MySQL 运行、数据库导入、客户端数据初始化等配套镜像。首次构建 30~60 分钟,执行成功后docker images里能看到acore/ac-wotlk-worldserver、acore/ac-wotlk-authserver等条目;此后由于有构建层缓存,改代码再构建会快得多。各镜像的构建细节可以查 Dockerfile。

启动顺序:数据库先行,导入完毕服务才拉起

docker compose up -d

docker-compose.yml 里已经排好依赖链:ac-database(MySQL 8.4)先启动并通过健康检查,ac-db-import 容器再把data/sql下的基础数据和升级脚本依次灌入 acore_auth、acore_world、acore_characters 三个库,最后 ac-authserver 与 ac-worldserver 才会被拉起(worldserver 还要求客户端数据初始化容器先完成)。首次启动大约 5~15 分钟,日志里会滚动出一条条 SQL 导入记录,全部结束后三个常驻容器才进入 Up 状态。

配置文件完全不用手写:entrypoint 脚本首次启动时会自动把镜像里自带的*.conf.dist模板复制成正式配置,落到env/dist/etc/目录下。

状态检查用这两条:

docker compose ps docker compose logs ac-worldserver | tail -n 20

判断标准:ac-database、ac-authserver、ac-worldserver 均为 Up,且 worldserver 日志尾部能搜到 "Server ready"。如果 worldserver 在反复重启,跳到后面的排障部分按场景对号入座。

建一个管理员账号,用客户端实测登录

docker compose attach ac-worldserver

执行后你会接到 worldserver 的命令行控制台(提示符为AC>),接着输入:

AC> account create admin password 3 -1

参数含义:3是账号安全等级,3 为管理员级;-1表示不限制地图权限。命令回显成功创建后,按Ctrl+P再按Ctrl+Q脱离控制台——直接 Ctrl+C 会连服务一起停掉。

打开 3.3.5 客户端,登录界面把服务器地址填127.0.0.1;客户端不在同一台机器上就填宿主机局域网 IP。服务器列表出现 realm 后,用 admin/password 登录、建角、进图。角色和场景能稳定加载,部署就算收尾了。

三个服务各自负责什么、端口怎么分

容器职责端口映射到宿主机
ac-databaseMySQL 8.4 实例,承载账号/角色/世界三套数据(root 密码为password)3306是
ac-authserver完成账号验证,通过后引导客户端连世界服3724是
ac-worldserver加载世界数据,处理全部游戏逻辑8085是
ac-worldserver(SOAP 接口)供外部工具调用7878是

三者跑在同一个容器网络里互相同名寻址,客户端只依赖 3724 与 8085 两个入口。

按故障场景排查:从导入卡住到配置不生效

数据库导入迟迟没动静,怎么判断该等多久

现象是 worldserver 十几分钟没起来。多半是 db-import 还在工作(首次 5~15 分钟属正常),也可能是 MySQL 还没通过健康检查:

docker compose logs -f ac-db-import

看日志末尾的 SQL 文件名是否在滚动即为正常推进;若导入失败,按报错末尾指向的 SQL 文件定位具体脚本。没报错前不要手动中断导入进程。

worldserver 反复重启,多半是目录权限问题

docker compose ps里 ac-worldserver 状态不停翻转时,先看日志有没有 WARNING。根源通常是源码以 root 克隆,挂载的env/dist属主变成 root,容器内用户写不进配置和日志。在宿主机执行:

sudo chown -R $(id -u):$(id -g) env/dist

然后重启容器即可恢复。

登录界面看不到 realm,按顺序验两个端口

服务器列表空白或一直转圈,按影响从大到小查两处:3724 或 8085 没有映射到宿主机;客户端填了localhost而服务器实际在别的机器上。

ss -tlnp | grep -E '3724|8085'

两个端口都在监听,就把客户端地址改成宿主机局域网 IP 再试。

3306 被占用时,用环境变量挪走数据库端口

docker compose up报端口绑定失败,说明宿主机已有 MySQL 或别的服务占着 3306。在项目根目录建.env:

DOCKER_DB_EXTERNAL_PORT=3307

重启后数据库改从 3307 暴露,容器内部连接不受影响。

改了配置却不生效,先分清哪份文件真正生效

只改*.conf.dist模板是没用的——模板仅在目标文件不存在时才被复制。实际加载的是首次启动生成的正式文件,直接编辑env/dist/etc/worldserver.conf再重启容器。

进阶:改端口、调参数、装第一个模块

自定义端口:容器内部端口保持不变,只需在项目根目录.env里调整映射,例如DOCKER_WORLD_EXTERNAL_PORT=8086、DOCKER_AUTH_EXTERNAL_PORT=3725。

调参数:日常基本只动env/dist/etc/worldserver.conf里的少量关键项,比如PlayerLimit限制最大在线人数;配置加载的严格程度和预设方案,仓库里的配置策略文档有完整说明。

模块扩展:运行仓库自带的骨架脚本modules/create_module.sh,按提示输入模块名即可生成骨架,然后写一份启用配置并重新构建镜像:

modules/create_module.sh echo "MyModule.Enabled = 1" > env/dist/etc/modules/MyModule.conf docker compose build

部署到这里就算跑通了。下一步建议把生成的模块骨架改出一个真实功能——写一条自定义指令是最快的路径,能一次性体验从部署到二次开发的完整闭环。

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

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

返回列表