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 -ddocker-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-database | MySQL 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),仅供参考