魔兽世界 3.3.5 私服完整上手:AzerothCore-WoTLK 用 Docker 两条命令零编译跑起来
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
AzerothCore-WoTLK 是一个开源、模块化的 MMO 服务器框架,专为魔兽世界 3.3.5a 打造。用 Docker 部署它只需2 条命令、约10 分钟,你得到的是一套可直接登录的完整私服——含认证、世界、数据库等常驻服务,全程零编译、零手动导库。
这篇文章写给三类人:想给朋友开一个魔兽私服的运营者、想读懂 MMO 服务器内部协作的开发者、以及第一次碰 Docker 的新手。你不需要会 C++,也不用装 MySQL 或编译工具链,照着命令执行就能走到登录界面。下文所有端口、容器名、路径均已与仓库当前内容核对一致。
| 你的目标 | 对应命令 |
|---|---|
| 启动整套服务器 | docker compose build然后docker compose up -d |
| 创建私服管理员账号 | AC> account create admin password 3 -1 |
| 实时查看全部日志 | docker compose logs -f |
| 全库备份 | docker compose exec ac-database mysqldump -u root -p --all-databases > backup.sql |
| 生成一个新模块骨架 | cd modules && ./create_module.sh |
🧭 魔兽世界 3.3.5 私服成品预览:5 个容器分工与关键端口
这一节你先看到"目标状态"——启动成功后系统长什么样,再动手。
docker compose up -d完成后,docker compose ps会列出 5 个各司其职的容器:
| 容器名 | 职责 | 对外端口 |
|---|---|---|
ac-database | MySQL 8.4,存账号、角色、物品等全部数据 | 3306 |
ac-db-import | 一次性任务,导入基础数据后自动退出 | — |
ac-client-data-init | 一次性任务,初始化客户端数据卷后退出 | — |
ac-authserver | 认证服务器,处理登录与权限校验 | 3724 |
ac-worldserver | 世界服务器,运行核心逻辑、管理世界状态 | 8085 |
核心两条命令就是本文反复出现的:
docker compose build docker compose up -dbuild首次会编译镜像、耗时偏长,属正常现象;up -d将整套服务放到后台。当你在ps里看到ac-worldserver处于 running,即代表认证(3724)与世界(8085)均已就绪,可以进入下一步。
🚀 魔兽私服 Docker 部署首次点火:从克隆到登录四步
这一节是"最短路径",每个小节的代码都不超过 4 行,跟着做即可。
前置自检
先确认本机只有 Docker 与 Compose v2,不需要任何游戏相关依赖:
docker --version docker compose version执行后应各自打印出版本号;只要docker compose能返回版本,说明 v2 插件已就位。
构建与启动
克隆仓库并启动整套服务:
git clone https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk cd azerothcore-wotlk docker compose build docker compose up -d首次构建输出会持续较久;up -d后终端会列出各容器创建日志,此时世界服通常仍在等待导库,属预期现象。
创建管理员账号
接入世界服控制台并建号(admin为账号名、password为密码、3为 GM 等级、-1表示该账号可用于所有服务器):
docker compose attach ac-worldserver AC> account create admin password 3 -1命令回车后控制台会回显账号创建成功;随后按Ctrl+P再按Ctrl+Q退出控制台(detach,容器不会停)。
客户端接入
用魔兽世界 3.3.5a 客户端,把客户端根目录Data/zhCN/realmlist.wtf(中文客户端路径)中的服务器地址改为:
set realmlist 你的服务器IP:3724保存后启动游戏、输入刚建的账号登录,即可进入游戏。
🔗 AzerothCore-WoTLK 容器依赖链图解:五个容器如何协作
这一节解释"为什么顺序不会乱",看懂它你就理解了这套编排的骨架。
ac-database (MySQL, healthcheck 健康检查通过后放行) │ service_healthy ▼ ac-db-import (导完基础数据退出) ac-client-data-init (初始化客户端数据卷后退出) └──────────── 两者均成功 ────────────┘ │ service_completed_successfully ▼ ac-authserver (3724 登录) ac-worldserver (8085 世界)三个关键设计,每个用"它做什么 / 它防住什么"说明:
| 设计 | 它做什么 | 它防住什么 |
|---|---|---|
| 健康检查驱动顺序 | 每 5 秒探测 MySQL 是否可连,后续容器等服务"健康"而非"已启动" | 库没真正就绪就导数据、登录服务连不上库 |
| 一次性任务容器 | 两个 init 容器跑完即退出,世界服以service_completed_successfully为门槛 | 数据没导完世界服抢跑,"导库成功"只靠人盯日志 |
| 命名卷持久化 | 数据库与客户端数据分别落到ac-database、ac-client-data两个命名卷 | 容器重建或升级时数据丢失,这是"一键重启"的底气 |
⚙️ 私服端口、密码与配置策略按需定制
这一节覆盖三类常见改动:改端口密码、调配置严格度、挂自己的模块。
端口与密码(环境变量)
通过环境变量即可改,无需改任何文件。变量名以DOCKER_开头,完整清单见 conf/dist/env.docker:
export DOCKER_WORLD_EXTERNAL_PORT=8086 export DOCKER_AUTH_EXTERNAL_PORT=3725 export DOCKER_DB_ROOT_PASSWORD=your_secure_password docker compose up -d再次up -d后,docker compose ps的端口列会显示为你设定的新外部端口;官方建议不要直接改docker-compose.yml,而是用 conf/dist/docker-compose.override.yml 提供注释模板做持久覆盖。
配置策略三档
配置策略机制决定"配置文件缺失、配置项未知或取值非法"时核心是跳过、警告还是直接报错,由AC_CONFIG_POLICY环境变量控制,说明见 doc/ConfigPolicy.md:
| 策略 | 行为 | 适用场景 |
|---|---|---|
PRESET_DEFAULT | 缺文件报错、缺项警告、关键项致命 | 新手默认 |
PRESET_ZERO_CONF | 非关键缺口一律跳过,用默认值启动 | Docker 快速启动 |
PRESET_STRICT | 一切异常升级为错误/致命 | 生产环境严格审计 |
export AC_CONFIG_POLICY=$AC_CONFIG_POLICY_PRESET_ZERO_CONF docker compose up -d启动日志中会打印当前生效的策略行,据此可确认档位已切换。
模块化扩展
游戏逻辑被拆为核心(src/server/game)与脚本(src/server/scripts),任何新功能都可做成独立模块挂载,不污染核心代码。进入modules/运行 modules/create_module.sh,按提示输入模块名,它基于官方骨架模板克隆出一个可编译的新模块目录并初始化好 Git 仓库:
cd modules ./create_module.sh执行完会看到"Ready to code"提示,模块目录已生成;之后参照modules/how_to_make_a_module.md往里填逻辑,编译时通过conf/dist/config.sh的CMODULES变量控制其参与编译方式。
📊 魔兽私服长期运维:日志、备份与常见坑速查表
这一节给你日常要用的命令、排障对照表和上线前该做的加固。
日志与状态:
docker compose logs -f docker compose logs --tail=100 ac-worldserver | grep -i error docker compose pslogs -f会持续滚动全部服务日志,ps可核对各容器状态与端口映射。
数据库备份与恢复:
docker compose exec ac-database \ mysqldump -u root -ppassword --all-databases > backup_$(date +%Y%m%d).sql docker compose exec -T ac-database \ mysql -u root -ppassword < backup.sql备份命令执行后当前目录会生成一个.sql文件;恢复时把<指向该文件即可。
常见坑速查表:
| 现象 | 原因 | 解决 |
|---|---|---|
| worldserver 迟迟不启动 | 正等数据库导入完成,属正常 | docker compose logs -f ac-db-import看进度 |
| 端口被占用 | 默认 3306 / 3724 / 8085 被占 | 用DOCKER_*_EXTERNAL_PORT改外部端口,别改 compose 主文件 |
| 旧客户端登录失败 | realmlist 指向 IP 或端口错 | 核对认证端口 3724,勿与世界端口 8085 混淆 |
| 想从源码重新编译 | 需要完整工具链 | 用acore.sh仪表盘交互编译,或参考conf/dist/config.sh的编译参数 |
生产加固清单:
- 立刻改掉默认数据库密码
DOCKER_DB_ROOT_PASSWORD。 - 公网部署只开放 3724 / 8085,数据库端口保持内网可达。
- 把
docker-compose.override.yml与conf/dist/下的自定义配置纳入 Git,改动有迹可循。 - 在 override 文件中给
ac-worldserver设置deploy.resources.limits,避免单人服被无上限占用资源。
需要完整地图与寻路数据时,可启用 tools profile(docker compose --profile tools ...)配合客户端提取;边改代码边调试则可用docker compose --profile dev up -d的ac-dev-server做增量编译。
现在你手里已有一套能登录、能定制、能扩展的魔兽世界 3.3.5 私服平台。想继续深入,有三个方向值得投入:读src/server/下的 C++ 源码,理解 MMO 的网络与状态管理;沿doc/ConfigPolicy.md与modules/how_to_make_a_module.md把配置和模块吃透;以及跟着acore.sh从源码编译一份完全定制的核心。挑一个开始,改动的每一步都落在你看得见的文件里。
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考