AzerothCore 魔兽世界3.3.5私服容器化部署:4条命令从源码到可登录
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
AzerothCore 是开源的魔兽世界 3.3.5(WoTLK)MMO 服务器项目,负责登录认证、世界逻辑与数据库全链路。本文带你用 Docker 完成一次 AzerothCore 容器化部署,敲完 4 条核心命令后,你会得到一个 3.3.5 客户端能用管理员账号直接登录进游戏的私服。
开工前的三件事
- 操作系统:Linux、macOS 或 Windows(WSL2 + Docker Desktop),执行
uname -a能正常输出即符合 - Docker 已安装且带 Compose v2 插件:执行
docker compose version,应输出Docker Compose version v2.x - 宿主机 3306、3724、8085、7878 端口空闲(3724 是认证端口、8085 是游戏端口、7878 是供外部工具调用的 SOAP 接口):执行
ss -tln | grep -E '3306|3724|8085|7878',无输出即空闲 - 磁盘预留至少 30GB,首次构建要在容器内完整编译一遍源码:执行
df -h .确认可用空间 - 准备一个魔兽世界 3.3.5 客户端,最后登录验证要用
构建并启动 AzerothCore 容器化部署
拉取仓库并切到项目目录
git clone https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk cd azerothcore-wotlk耗时取决于网速;ls能看到docker-compose.yml即拉取完整。
📦构建全部镜像
docker compose build这一步在 Ubuntu 24.04 容器里用 CMake(跨平台编译构建工具)+ clang 编译器编译 authserver、worldserver 和数据库导入工具,并顺带生成 MySQL、数据库导入、客户端数据初始化等配套镜像。首次约 30~60 分钟;docker images里出现acore/ac-wotlk-worldserver等镜像即成功,构建层有缓存,之后改代码再构建会快很多。
启动全部服务并等待数据库导入
docker compose up -d首次启动约 5~15 分钟:MySQL 先通过健康检查,ac-db-import 容器把data/sql下的基础数据和升级脚本依次导入acore_auth、acore_world、acore_characters三个库,全部跑完后 authserver 和 worldserver 才会被拉起。启动时 entrypoint 脚本会把镜像内自带的*.conf.dist模板自动复制成env/dist/etc/下的正式配置,你不需要手写任何配置文件。
🔑创建第一个管理员账号
docker compose attach ac-worldserver AC> account create admin password 3 -1attach把你接到 worldserver 的命令行控制台,3是账号安全等级(3 为管理员级),-1表示不限定地图权限。创建成功后按Ctrl+P再按Ctrl+Q脱离控制台,不要用Ctrl+C,那会停掉服务。
验证它真的能跑
先看服务状态:
docker compose ps预期看到ac-database、ac-authserver、ac-worldserver都处于Up。再用客户端走一遍登录路径:
- 打开魔兽世界 3.3.5 客户端,登录界面的服务器地址填
127.0.0.1(客户端不在同一台机器时填宿主机局域网 IP) - 服务器列表里出现 realm(即服务器条目)
- 用
admin/password登录、建角、进入游戏
能稳定看到角色和场景加载,说明部署完成。
AzerothCore 容器化部署架构速览
五个容器同处一个 Docker 网络,客户端经认证服校验账号后由世界服接管,数据全部落在同一个 MySQL 里:
ac-database:MySQL 8.4 实例,监听 3306,承载账号、角色、世界三套数据,root 密码为password,仅 3306 映射到宿主机ac-authserver:监听 3724,客户端先连它完成账号验证,通过后引导去连世界服ac-worldserver:监听 8085,加载世界数据并处理全部游戏逻辑7878(worldserver 附带):供外部工具调用的 SOAP 接口
卡住了?按顺序排查
worldserver 反复重启
- 现象:
docker compose ps里 ac-worldserver 状态反复变化 - 定位:
docker compose logs ac-worldserver搜WARNING,看到写权限告警说明挂载的env/dist目录属主是 root - 处理:宿主机执行
sudo chown -R $(id -u):$(id -g) env/dist后重启容器
登录界面看不到 realm
- 现象:服务器列表为空或一直转圈
- 定位:宿主机执行
ss -tlnp | grep -E '3724|8085',确认两条监听是否都在 - 处理:客户端地址改为宿主机局域网 IP;仍不行则检查两个服务是否都
Up
数据库导入迟迟不结束
- 现象:等十几分钟 worldserver 还没起来
- 定位:
docker compose logs -f ac-db-import末尾是否停在某个 SQL 文件的报错 - 处理:首次导入约 5~15 分钟属正常,勿中途停容器;有报错时按文件名到
data/sql下核对
3306 端口被占用
- 现象:
docker compose up报端口绑定失败 - 定位:
ss -tln | grep 3306确认宿主机已有服务占用 - 处理:项目根目录建
.env写入DOCKER_DB_EXTERNAL_PORT=3307,容器内部连接不受影响
改了配置不生效
- 现象:修改后重启容器行为没变
- 定位:确认改的是
env/dist/etc/worldserver.conf而不是*.conf.dist模板(模板只在正式文件不存在时起作用) - 处理:直接编辑
env/dist/etc/worldserver.conf再重启
往后再走一步
- 改端口:根目录
.env里设DOCKER_WORLD_EXTERNAL_PORT=8086、DOCKER_AUTH_EXTERNAL_PORT=3725,容器内部端口不用动 - 调配置:日常只需动
env/dist/etc/worldserver.conf里的PlayerLimit等参数,配置加载严格程度见 doc/ConfigPolicy.md - 写第一个模块:运行
bash modules/create_module.sh按提示输入模块名生成骨架,参考 modules/how_to_make_a_module.md 在env/dist/etc/modules/下启用并重新构建镜像
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考