从 clone 到登录:三十分钟用 Docker 部署 AzerothCore 魔兽世界私有服
从 clone 到登录:三十分钟用 Docker 部署 AzerothCore 魔兽世界私有服
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
适合会用命令行、但没碰过魔兽世界服务器框架的读者。本文按实际仓库的docker-compose.yml走一遍 Docker 部署 AzerothCore 的流程,跑完后能用 3.3.5 客户端登录自己搭的服务器。
🚀 先说结果:三条命令之后的样子
clone 仓库、构建镜像、启动服务,一共三条核心命令。首次构建会在容器里用 cmake + ninja 从零编译整个引擎,视机器性能与网络,通常要 30 到 60 分钟;之后每次启动都是分钟级。最终得到的是:一个 MySQL 数据库、一个 authserver、一个 worldserver,外加生成好的配置与日志目录。建好管理员账号后,客户端就能直接登录。
跑之前看一眼
- 装了 Docker 且带 Compose v2,Docker Desktop 已内置 buildx
- 4GB 以上可用内存,全量编译比较吃内存
- 20GB 以上空闲磁盘,镜像层加数据库卷都不小
- 网络稳定,构建阶段和首次启动都要下载依赖与客户端数据
- Linux、macOS 或 Windows + WSL2 均可
📦 这套东西是怎么拼的
| 服务 | 对外端口 | 一句话职责 |
|---|---|---|
ac-database | 3306 | MySQL 8.4,存放 auth/world/characters 三套库 |
ac-db-import | — | 一次性容器,把data/sql的数据导入数据库后退出 |
ac-client-data-init | — | 一次性容器,下载 DBC 等客户端数据到ac-client-data卷 |
ac-authserver | 3724 | 登录握手与账号验证 |
ac-worldserver | 8085(7878为 SOAP) | 跑全部游戏玩法与地图逻辑 |
两个一次性容器是 worldserver 的前置条件,docker-compose.yml里用depends_on排好了顺序:先等数据库健康检查通过,再导数据、下载客户端数据,最后才拉起两个服务器,不用手动操心次序。文件注释明确提醒不要改主文件,所有端口、密码都支持环境变量覆盖,改动一律放docker-compose.override.yml。
🔧 动手部署:三步把整套服务跑起来
第一步,取代码:
git clone https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk cd azerothcore-wotlk构建上下文就是仓库根目录,Dockerfile 位于apps/docker/内。
第二步,构建镜像:
docker compose build这一步把源码完整编译一遍,是首次最慢的环节;镜像里启用了 ccache,后续重编译会快很多。
第三步,启动全部服务:
docker compose up -d首次启动会卡在数据库导入上,耐心等docker compose ps里所有容器都变 running/healthy 即可。
进去之后:建管理员账号并验证登录
docker compose attach ac-worldserver进入控制台后执行:
AC> account create admin admin123 3 -13是最高权限等级。退出控制台用 Ctrl+P 再按 Ctrl+Q,直接 Ctrl+C 会把容器停掉。建完记得改默认密码,然后让 3.3.5 客户端指向本机,应能在服务器列表里看到 realm。
日常运维速查
| 场景 | 命令 | 备注 |
|---|---|---|
| 看容器状态 | docker compose ps | 关注 healthy 状态 |
| 跟踪日志 | docker compose logs -f ac-worldserver | 排错第一站 |
| 安全停止 | docker compose down | 数据卷保留 |
| 完全重置 | docker compose down -v | 删光所有数据,慎用 |
| 重启单服务 | docker compose restart ac-worldserver | 改配置后常用 |
备份与恢复,root 密码默认是password,改过DOCKER_DB_ROOT_PASSWORD的自行替换:
docker compose exec ac-database mysqldump -u root -ppassword acore_world > world_$(date +%F).sqldocker compose exec -i ac-database mysql -u root -ppassword acore_world < world.sql🛠️ 卡住了怎么办
症状:端口被占用,服务起不来 检查:
sudo lsof -i :8085(3306、3724 同理) 处理:DOCKER_WORLD_EXTERNAL_PORT=8086 docker compose up -d,数据库用DOCKER_DB_EXTERNAL_PORT同理症状:worldserver 反复重启或启动后立刻退出 检查:
docker compose logs ac-worldserver处理:通常是数据库没就绪,等ac-db-import跑完再看docker compose ps症状:客户端里看不到 realm 检查:
docker compose logs ac-authserver处理:确认客户端指向的是本机 IP 且 3724 端口可达,本机一般填localhost即可
想继续折腾
- 改端口:
DOCKER_DB_EXTERNAL_PORT、DOCKER_WORLD_EXTERNAL_PORT、DOCKER_AUTH_EXTERNAL_PORT三个环境变量在up前带上即可。 - 热更新:改了
src/server/game/下的代码后,docker compose build ac-worldserver && docker compose restart ac-worldserver;仓库还带了一个挂载整个源码树的 dev profile,适合长期开发,见apps/docker/Dockerfile.dev-server。 - 写自定义模块:
./modules/create_module.sh MyModule,模板和说明在modules/how_to_make_a_module.md。
服务到这里就跑起来了,接下来一般可以先打开env/dist/etc/下首次生成的 worldserver 配置文件,把 realm 名字和玩家上限改成自己的(以实际仓库为准)。
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
