news 2026/8/26 16:02:09

从 clone 到登录:三十分钟用 Docker 部署 AzerothCore 魔兽世界私有服

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从 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-database3306MySQL 8.4,存放 auth/world/characters 三套库
ac-db-import一次性容器,把data/sql的数据导入数据库后退出
ac-client-data-init一次性容器,下载 DBC 等客户端数据到ac-client-data
ac-authserver3724登录握手与账号验证
ac-worldserver8085(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 -1

3是最高权限等级。退出控制台用 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).sql
docker compose exec -i ac-database mysql -u root -ppassword acore_world < world.sql

🛠️ 卡住了怎么办

  1. 症状:端口被占用,服务起不来 检查:sudo lsof -i :8085(3306、3724 同理) 处理:DOCKER_WORLD_EXTERNAL_PORT=8086 docker compose up -d,数据库用DOCKER_DB_EXTERNAL_PORT同理

  2. 症状:worldserver 反复重启或启动后立刻退出 检查:docker compose logs ac-worldserver处理:通常是数据库没就绪,等ac-db-import跑完再看docker compose ps

  3. 症状:客户端里看不到 realm 检查:docker compose logs ac-authserver处理:确认客户端指向的是本机 IP 且 3724 端口可达,本机一般填localhost即可

想继续折腾

  • 改端口:DOCKER_DB_EXTERNAL_PORTDOCKER_WORLD_EXTERNAL_PORTDOCKER_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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 15:58:24

C# Winform - SQL Server 2012 数据库放服务器,通过TCP连接访问

首先安装sql server 2012;安装后打开sql server 并连接&#xff1b;第一步&#xff1a;在服务器上启用远程连接然后右键点击服务器名称&#xff0c;选择 “属性”&#xff0c;勾选上允许远程连接&#xff1b;如上图&#xff1b;点击“确定”保存设置。第二步&#xff1a;配置 S…

作者头像 李华
网站建设 2026/8/26 15:48:09

5分钟上手psr/clock:从composer安装到第一个now()调用的快速教程

5分钟上手psr/clock&#xff1a;从composer安装到第一个now()调用的快速教程 【免费下载链接】clock PSR-20 repository 项目地址: https://gitcode.com/gh_mirrors/clo/clock psr/clock 是 PSR-20 官方标准库&#xff0c;提供统一的时钟读取接口 ClockInterface。本文带…

作者头像 李华
网站建设 2026/8/26 15:46:55

IntelliJ IDEA + phpStudy + ApiPost断点调试

碎碎念&#xff1a; 因项目原因&#xff0c;我一个java也是搞上php了 语言环境开发方式等等不一样就算了。这调试起来是真费劲 怀念我的java~ ~phpStudy配置 选择启动php项目的环境 选择扩展组件&#xff0c;打开XDebug组件&#xff0c;端口自己设置一个未使用的即可 设置-配置…

作者头像 李华