收起左侧

在NAS上从零开始部署AzerothCore

0
回复
93
查看
[ 复制链接 ]

2

主题

0

回帖

0

牛值

江湖小虾

零、前言

AzerothCore是目前最活跃的WoW服务器项目之一,它非常好的模拟了WLK 3.35a的服务器,也可以支持各种功能性MOD和Eluna脚本,极大的丰富了可玩性,很多部署单机/局域网服务器的方案都是依托这个项目或它的分支构建的。对于NAS而言,在群晖系统上通过由裙下孤魂前辈打包的第三方套件部署是目前最简单的方案,其他系统要么通过虚拟机部署,要么依靠Docker部署。

AzerothCore官方提供了Dorker Compose的部署方式,只需要修改一些简单的设置即可部署,但其提供的是纯净版镜像不含任何MOD(尤其是机器人MOD),对于个人或者少数亲朋好友一起游戏的情况并不友好。而其他第三方打包的镜像更新频率较低,打包过程中内置什么样的MOD、后续更新频率等完全依赖第三方打包者,自主性不强。

得益于AI时代,即使像本人这样完全不懂编程的小白,也能在AI辅助下完成复杂的部署+运行任务。本攻略就是面向NAS的基础玩家,介绍AzerothCore从零开始的自编译+部署+运行的全过程流程。

在开始之前,向提供各类资源的各位前辈致谢

一、搭建方案

为了加载机器人MOD(mod-Playerbots),我们需要使用mod-Playerbots分支的AzerothCore源码。

为了方便后续的维护与升级,我们将采取源码/服务器配置分离的模式,将Docker卷、数据库、游戏配置文件等映射到专门的单独文件夹。

在部署过程中,添加MOD和lua以丰富游戏体验

最后,我们将通过docker搭建web页面的账号注册系统

二、准备工作

1.确保工作环境

部署过程中需要拉取github上的源代码,请提前确认网络畅通。如果无法访问,请自行寻找替代源。

部署过程需要频繁通过SSH访问NAS或容器,可通过Windows自带的终端输入下方命令进行连接,更推荐使用专门的SSH软件(比如XPipe)连接:

SSH 你的NAS用户名@你的NAS IP
#输入密码
sudo -i #取得管理员权限
#再次输入你的密码

部署过程中需要用到git工具,虽然主流NAS系统基本自带,但还是建议手动安装最新版。通过SSH连接NAS,执行如下命令:

sudo apt update && sudo apt upgrade -y  #更新软件源
sudo apt install git -y  #安装git
git --version  #验证安装是否成功,显示版本号为2.4X.X就算成功

部署过程中需要编辑各种配置文件,可直接用记事本编辑,但推荐使用vs code等软件,显示内容更清晰直观

部署后期需要修改数据库、导入脚本,建议使用HeidiSQL等图形界面的数据库软件进行操作

2.建立目录并赋权

首先,挑选一个合适的位置建立一系列目录来存放项目的源代码和服务器数据文件,具体如下。需要注意的是以下展示的是相对路径,后续大部分命令你需要补充为绝对路径,绝对路径在文件管理器上面的地址栏,或者查看文件夹属性均可找到

—WOW  #总体根目
——acroe  # AzerothCore源码及Mod源码目录(可在拉取代码后改名)
——server  # Docker数据卷及其他服务运行文件目录
———ac-database  # 数据库数据卷:存储MySQL所有数据,实现数据持久化
———ac-client-data  # 客户端数据卷:存储提取后的客户端数据(地图、DBC等)
———etc  # 服务器及MOD配置文件目录
———logs  # 服务器日志文件目录
———lua # lua脚本储存目录
——web-reg  # web注册页面运行目录
———wow-sim-reg # WoWSimpleRegistration的源码目录

给目录赋权,确保Docker能够访问,以SSH方式连接NAS,取得管理员权限后执行命令

chmod -R 755 /WOW  # 改为绝对路径
chown -R 1000:1000 /WOW  # 改为绝对路径

3.拉取Playerbots分支的AzerothCore源代码

通过SSH方式进入WOW目录,随后执行拉取代码库的命令

cd WOW  # 改为绝对路径
git clone https://github.com/mod-playerbots/azerothcore-wotlk.git --branch=Playerbot

代码拉取完毕后,会在WOW文件夹下建立azerothcore-wotlk文件夹,需手动改名为acore

4.拉取mod-playerbots源代码

除了客户端外,还需要拉取mod-playerbots源代码,mod需要和客户端一起编译。通过SSH进入acore/modules文件夹,根据Mod页面和github的地址开始拉取源码:

cd WOW/acore/modules  #改为绝对路径
git clone https://github.com/mod-playerbots/mod-playerbots.git --branch=master

5.拉取必要镜像

部署过程中需要mysql 8.4和ubuntu 22.04两个镜像,虽然部署文件可以自动拉取,但是为了避免网络因素等干扰部署过程,建议在开始前通过Docker的镜像仓库提前拉取两个镜像到本地,部署文件会自动读取本地文件,请一定注意版本正确

三、修改部署文件

Azerothcore的源码中附带了官方的Docker Compose文件docker-compose.yml,其中各类配置均设置引用了外部的环境变量。我们遵循官方的部署建议,保持docker-compose.yml文件不变,另建立.env文件提供环境变量,以及通过docker-compose.override.yml进行个性化部署。

官方提供的Docker Compose部署模板默认将建立5个容器,构建完成后将保留3个运行容器:

ac-database:数据库服务:基于MySQL8.4,存储账号、角色、世界、机器人等所有数据
ac-db-import:数据库导入服务:一次性将AzerothCore的基础库表、世界数据导入MySQL,执行完成后自动退出
ac-worldserver:世界服核心服务:游戏世界的核心容器,处理游戏内所有逻辑(地图、怪物、玩家交互等)
ac-authserver:认证服服务:处理玩家登录认证、账号验证,验证通过后跳转到世界服
ac-client-data-init:客户端数据初始化服务:一次性解压/初始化游戏客户端核心数据(地图、DBC、模型等),执行完成后退出

1..env环境变量文件

官方提供的源码中没有给出配套的.env文件,我们将根据我们的部署计划来自行创建。在电脑上先建立文本文件或通过vs code建立文件,写入相关内容后,改名并上传到WOW/acore/文件夹下(和docker-compose.yml同级),

文件整体代码和解释如下,你可以直接修改复制后生成.env文件。

其中端口、密码为范例,请务必更改。

# 飞牛OS自带的MariaDB占用了3306端口,因此在部署时应将容器的端口映射为别的端口
# 数据库端口
DOCKER_DB_EXTERNAL_PORT=33060

# 服务器运行端口,有默认端口,如果后期考虑对公网开放则必须做端口转发,为了增强安全性,建议改成比较冷门的端口,请自行设定修改
# 世界服务器端口
DOCKER_WORLD_EXTERNAL_PORT=1285
# SOAP 远程管理端口
DOCKER_SOAP_EXTERNAL_PORT=1278
# 认证服务器端口
DOCKER_AUTH_EXTERNAL_PORT=1224

# 内建数据库root账户密码,请务必改成自己设定的复杂密码
# 数据库 root 密码
DOCKER_DB_ROOT_PASSWORD=abc.123@sql

# 在默认的情况下这两部分会加载到源码目录去,不方便管理,我们将挂载到WOW/server文件下
# 服务器配置文件路径
DOCKER_VOL_ETC=../server/etc
# 服务器日志文件路径
DOCKER_VOL_LOGS=../server/logs

# 更改Docker卷路径,在默认情况下这两部分会加载到系统盘,不方便管理,我们将挂载到WOW/server文件下
# 数据库路径
DOCKER_VOL_DB=../server/ac-database
# 客户端数据路径
DOCKER_VOL_DATA=../server/ac-client-data

2.docker-compose.override.yml文件

然后,我们建立建立docker-compose.override.yml文件,来增加4组设置:

  1. 禁止下载官方镜像,而是本地编译镜像
  2. 增加mod和lua文件夹路径映射
  3. 增加mod编译需求
  4. 更改服务器配置文件

同样在电脑上先建立文本文件或通过vs code建立文件,写入相关内容后,改名并上传到WOW/acore/文件夹下(和docker-compose.yml同级)。

文件整体代码和解释如下,你可以直接修改复制后生成docker-compose.override.yml文件。

  1. 体代码如下,随后我将逐一讲解:
# AzerothCore Dcoker自编译部署override文件(Playerbots分支)

# 各容器覆盖配置
services:
  # 1. 数据库服务:基于MySQL8.4,存储账号、角色、世界、机器人等所有数据
  ac-database:

  # 2. 数据库导入服务:一次性将AzerothCore的基础库表、世界数据导入MySQL,执行完成后自动退出
  ac-db-import:
    image: ac-db-import # 取消使用官方镜像,由本机编译镜像
    volumes:
      - ./modules:/azerothcore/modules:ro

  # 3.世界服核心服务:游戏世界的核心容器,处理游戏内所有逻辑(地图、怪物、玩家交互等)
  ac-worldserver:
    user: "0:0"  # 启用 root 用户运行,避免权限问题
    image: ac-worldserver # 取消使用官方镜像,由本机编译镜像
    build:
      args:
        # 如Mod有特殊编译需求,请在此后加入命令
    environment:
      # 更改服务器配置文件worldserver.conf的代码请加在下面
    volumes:
      - ./modules:/azerothcore/modules:ro
      - ../server/lua:/azerothcore/lua_scripts

  # 4. 认证服服务:处理玩家登录认证、账号验证,验证通过后跳转到世界服
  ac-authserver:
    image: ac-authserver # 取消使用官方镜像,由本机编译镜像
    volumes:
      - ./modules:/azerothcore/modules:ro

  # 5. 客户端数据初始化服务:一次性解压/初始化游戏客户端核心数据(地图、DBC、模型等),执行完成后退出
  ac-client-data-init:
    image: ac-client-data-init # 取消使用官方镜像,由本机编译镜像

# 容器网络配置
networks:
  ac-network:
    name: ac-network

3.docker-compose.yml文件

docker-compose.yml位于源码目录WOW/acore下,理论上这个文件是不需要更改的,但是在个别情况下部署时会出现override文件更改、仍拉取官方镜像部署的情况,此时可以直接将docker-compose.yml文件中除了ac-database这个容器之外的其他四个容器代码中image一行删除,确保部署使用自行编译的镜像

文件中还有两个容器是用于开发调试的,默认不启用,如有需求请自行研究。

四、部署容器

将.env和docker-compose.override.yml上传到/WOW/acore目录,通过SSH连接到NAS,转到/WOW/acore目录,执行建立Docker的命令,然后系统会自动根据配置好的文件编译、构建容器,过程大概需要30-60分钟

cd WOW/acore/ #改为绝对路径
docker compose up -d --build

容器构建完毕后,在NAS的docker web页面可以看到docker compose项目和五个容器,此时仍需等待一段时间,ac-worldserver首次启动需要导入大量数据

五.修改配置、新建账户

1.修改mod_playerbots配置文件

编译及构建完成后,会在WOW/server/etc/modules文件夹下生成mod的原始配置文件,此时需要将配置文件的.dist后缀名删掉,保持.conf的后缀名,才能被服务器读取

完成后重启ac-worldserver容器即可

2.修改服务器IP及端口号

我们通过HeidiSQL软件进入数据库修改认证服务服务器IP及端口号。在软件界面新建会话,输入你的NAS IP,数据库用户名为root,密码和数据库端口改为此前在.env文件中设置的密码和端口,其他默认即可连接。

进入数据库后,我们可以看到四个库:

  • acore_auth:账号数据库
  • acore_characters:角色数据库
  • acore_world:世界数据库
  • acore_playerbots:机器人数据库

我们先打开acore_auth的realmlist页面,在右侧切换到“数据”标签,将“address”的值改为你的NAS IP,将“port”改为此前在.env文件中设置好的世界服务器端口,修改完后保存退出,并重启ac-authserver容器即可。

3.创建游戏账户,提升GM权限

我们目前还只能通过命令的方式创建账户,依次执行下列命令进入docker内:

cd /WOW/acore # 改为绝对路径
docker attach ac-worldserver

进入docker后,执行下列命令,创建账户并将账户提升为gm权限(可选)

account create 账户名 密码 # 改成自己的账户名和密码,英文+数字 
account set gmlevel 账户名 3 -1

六、丰富游戏内容

1、添加mod

Azerothcore支持各种mod,可以优化游戏体验、丰富游戏内容。官方有专门的mod聚合平台,可以自行挑选:

这里我推荐几个常用的:

  • playerbots:机器人模组,我们已经加载了
  • ale:Azerothcore专属的lua脚本引擎
  • individual-progression:根据玩家进度匹配对应版本游戏内容
  • transmog:幻化系统
  • autobalance:根据人数自动平衡副本难度

部署mod的流程大同小异,对应的github页面上有详细步骤,我以ale为例子说明一下一般步骤:

(1)拉取mod源码

找到mod的github页面并记下网址,然后通过SSH连接NAS,定位至WOW/acore/modules/目录,通过命令下载代码:

cd WOW/acore/modules/ # 改为绝对路径
git clone https://github.com/azerothcore/mod-ale.git # 改为对应mod页面地址,并在结尾加上.git

系统会自动将源码下载到modules文件夹内

(2)编译

mod需要编译进游戏内才能运行,因此我们要重新编译镜像并部署docker,通过SSH连接NAS,先关闭容器:

cd WOW/acore/ #改为绝对路径
docker compose down

然后重新编译、部署

cd WOW/acore/ #改为绝对路径
docker compose up -d --build

考虑到每次编译时间较长,可以选择一次性多下载几个mod后一起编译,但如果其中一个mod出现问题,整个编译过程就全部失败。不同mod的维护状况不尽相同,实际部署的时候会遇到很多问题,请多多查询github页面的Issues、在discord里提问,或者让AI帮助你解决。

(3)更改配置文件

编译及构建完成后,会在WOW/server/etc/modules文件夹下生成对应mod的原始配置文件,此时需要将配置文件的.dist后缀名删掉,保持.conf的后缀名,才能被服务器读取

(4)导入数据库文件

理论上只要做好的了文件夹映射,mod所需的数据库会自动导入,但实际中因为各种各样的原因会出现无法导入的情况,进而导致服务器无法正常启动,此时我们需要手动导入。

数据库文件一般在源码文件中对应mod文件夹下的data或者sql文件夹中,比如/WOW/acore/modules/mod-ale/sql,其中一般会有auth、characters、world三个文件夹,分别对应数据库中的三个库,可以使用HeidiSQL连入数据库,选择对应的库,然后新建查询-加载本地SQL文件-执行查询的方式导入

(5)游戏内设置

类似幻化系统、特殊商人、共享银行之类的mod,需要在游戏内添加NPC,可用具备gm权限的账号登录游戏后,输入 “.gm on”打开gm模式后,通过命令放置NPC,具体的命令在mod介绍页面中有

以上是加载mod的一般步骤,不同的mod部署细节也有不一样,请善用AI帮忙解析部署步骤,避免踩坑。

2、添加lua

添加了mod-ale后,Azerothcore就支持lua脚本了,通过lua改动游戏内容无需编译mod,比较灵活。

常用的lua比如超级炉石,可以扩展炉石,提供各种便利的游戏功能,比如传送、召唤商人、召唤训练师等等。lua也可以在官方的mod平台上找,也可以去魔兽有爱论坛上找,也可以尝试在AI的辅助下自己写。

lua文件直接放在我们提前映射好的文件夹内/WOW/server/lua,重启ac-worldserver后即可识别工作,注意lua文件名必须是英文

小部分lua文件也需要导入数据库,具体看lua的说明,导入步骤和mod一样,不再赘述。

3、服务器配置文件

Azerothcore使用worldserver.conf文件来定义一些常见的游戏参数,每次ac-worldserver启动的时候,都会将worldserver.conf中的参数读取到内存中运行,比如移动速度、经验倍率、物品掉率等等,我们可以根据需要自行调整。

我们已经将配置文件映射好了,你能在/WOW/server/etc/下找到worldserver.conf文件。

配置文件在网上可以搜索到中文注释的版本,可参照修改。

我们有两种修改方法:

(1)直接修改

我们已经将配置文件映射好了,你能在/WOW/server/etc/下找到worldserver.conf文件,直接打开修改相应参数,改完了重启ac-worldserver容器即可

(2)通过docker-compose.override.yml文件修改

为了避免后续升级Azerothcore源码导致配置文件失效,我们也可以保持原始的worldserver.conf不做修改,而在docker-compose.override.yml添加相应的命令,让ac-worldserver容器在启动并加载worldserver.conf至内存时,在内存中实时修改,这样只要我们保持客制化的docker-compose.override.yml文件,即可保证升级不丢配置。

具体而言,我们需要将配置项按照一定规则转换为命令,添加到docker-compose.override.yml的相应位置:

environment:
  # 更改服务器配置文件worldserver.conf的代码请加在下面

转换规则也比较简单:

  • 所有变量统一前缀加上 AC_
  • 配置里的小数点 . 全部替换成下划线 _
  • 大小写相邻的字母(驼峰命名),中间插入下划线 _
  • 整条参数全部转为大写字母

范例:

在worldserver.conf文件内的格式:
AllowTwoSide.Interaction.Calendar = 1

改为

在docker-compose.override.yml文件内格式:
AC_ALLOW_TWO_SIDE_INTERACTION_CALENDAR: "1"

加入docker-compose.override.yml文件中的整体格式为

    environment:
      # 更改服务器配置文件worldserver.conf的代码请加在下面
      AC_ALLOW_TWO_SIDE_INTERACTION_CALENDAR: "1"

如果需要修改的配置较多,可以整理成表格,让AI根据规则帮忙转换

七、搭建web注册页面

游戏服务器设置完毕后,我们需要搭建一个能够创建账号的web注册页面,方便其他用户创建账号,同时实现一些管理功能。这里我推荐两个:

一是AzerothCore官方提供了acore-cms的web页面系统,它是基于wordpress+AzerothCore插件,通过soap的方式实现的账号注册和管理,同时可以开设网页商店,功能比较强大,而且官方提供了docker部署的指引,部署过程比较简单。但是设置wordpress和在线商店还需要大量的后续工作,对非专业人士并不友好。

二是比较流行的开源项目WoWSimpleRegistration,是一套轻量的PHP web系统,能够实现密码服务、服务器状态显示等一些基础功能,且内置美化模板,简单配置即可使用。但缺点是官方并不提供docker部署的指引,我们必须自行部署。

基于使用简单的原则,我们选择WoWSimpleRegistration,采取web+php双容器的方式部署

1、拉取代码

进入wow-sim-reg文件夹,从github上拉取项目的代码库

cd WOW/web-reg/wow-sim-reg # 改为绝对路径
git clone https://github.com/masterking32/WoWSimpleRegistration

2、编写Dockerfile

由于官方没有提供Docker部署的文件,我们需要自行编写Dockerfile,我们将按照官方的部署说明,用容器搭建PHP环境。代码如下,其中无需要自定义的部分,可直接复制生成Dockerfile文件(无后缀名)。

# 基础镜像,官方要求8.4版本以上,选取fpm+alpine版
FROM php:8.4-fpm-alpine

# 设置容器内工作目录
WORKDIR /var/www/html

# 下载PHP安装扩展
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions \
    /usr/local/bin/

# 一键安装所有官方必需的 PHP 扩展
RUN chmod +x /usr/local/bin/install-php-extensions && \
    install-php-extensions gmp gd zip soap mbstring pdo_mysql

# 确保权限属于 www-data 用户
RUN chown -R www-data:www-data /var/www/html

# 暴露 FPM 端口
EXPOSE 9000

3、编写docker-compose.yml文件

根据我们的部署方案,建立两个容器,一个web容器用于搭建web环境,一个php容器用于后台php运行,代码如下,需确认网络名称和之前部署的AzerothCore容器为同一个网络,同时记得改端口映射。修改完成后可复制生成docker-compose.yml文件。

services:
  # ------------------------------
  # Web 服务器 (Nginx)
  # ------------------------------
  wow-reg-nginx:
    image: nginx:alpine # 采取nginx alpine轻量版搭建web系统
    container_name: wow-reg-nginx
    restart: unless-stopped
    ports:
      - "12080:80"  # 对外映射端口,必须改为非常用端口
    volumes:
      - ./wow-sim-reg:/var/www/html:ro # 映射代码及工作目录
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro # 转发配置文件映射
    depends_on:
      - wow-reg-php
    networks:
      - ac-network # 加入AzerothCore网络

  # ------------------------------
  # PHP 环境 (PHP-FPM)
  # ------------------------------
  wow-reg-php:
    build: . # 根据同目录下的Dockerfile编译创建容器
    container_name: wow-reg-php
    restart: unless-stopped
    volumes:
      - ./wow-sim-reg:/var/www/html # 映射代码及工作目录
    networks:
      - ac-network # 加入AzerothCore网络
    # 加入权限修复,确保 NAS 上的文件能被容器内的 www-data 用户正常读写
    command: >
      /bin/sh -c "
      chown -R www-data:www-data /var/www/html &&
      exec php-fpm
      "

# ------------------------------
# 网络配置
# ------------------------------
networks:
  ac-network:
    external: true

4、编写nginx.conf

除了上述两个文件外,我们还需要编写一个nginx的配置文件来处理两个容器之间的信息转发,代码如下,其中无自定义内容,可直接复制生成nginx.conf:

server {
    listen 80;
    server_name localhost;
    root /var/www/html;  # 指向容器内根目录
    index index.php index.html;

    # 1.处理 CodeIgniter 框架的伪静态路由(防止二级页面404)
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 2. 安全防御:严禁外部直接访问 PHP 框架的内部核心代码目录
    location ~* ^/(application|system|vendor)/ {
        deny all;
        return 404;
    }

    # 3. 安全防御:禁止访问 Apache 的分布式配置文件(防止残留文件泄露)
    location ~ /\.ht {
        deny all;
    }

    # 4. 优化:静态资源缓存与兜底
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        try_files $uri /index.php?$query_string;
    }

    # 5. PHP 请求转发给 PHP-FPM
    location ~ \.php$ {
        try_files $uri =404;
      
        fastcgi_pass wow-reg-php:9000; 
        fastcgi_index index.php;
      
        # 引入标准 FastCGI 参数
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      
        # 额外防护:防止跨站脚本攻击 (XSS) 和缓冲区溢出风险
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }
}

5、编译、部署容器

将准备好的Dockerfile、docker-compose.yml和nginx.conf放在web-reg目录下,然后通过SSH连接NAS,进入目录后开始部署,首次部署需要进行简单的编译,大概5分钟左右即可完成:

cd WOW/web-reg/ # 改为绝对路径
docker compose up -d --build

6、修改config.php文件

容器成功启动后,我们还需要修改config.php文件,导入相关设置,才能让web页面正常工作。进入WOW/web-reg/wow-sim-reg/application/config目录下,将config.php.sample改名为config.php,并进行修改。我把其中的内容翻译成中文,代码说明如下:

<?php
/**
 * 魔兽世界网页注册界面配置文件
 *
 * @author Amin Mahmoudi (MasterkinG)
 * @copyright Copyright (c) 2019 - 2024, MasterkinG32. (https://masterking32.com)
 * @link https://masterking32.com
 **/

// 基础配置 - 修改为你的网站信息
$config['baseurl'] = "http://NAS IP:12080 "; // 网站首页地址,改为你的NAS IP + 容器设置的对外监听端口号
$config['page_title'] = "Simple Register"; // 浏览器标签页显示的网站标题,可自定义
$config['language'] = "chinese-simplified"; // 网站默认语言改为简体中文
$config['supported_langs'] = [ // 支持的语言列表,不需要的可以删除
    // 如果要禁用语言切换,直接写成:$config['supported_langs'] = false;
    'english' => 'English',
    'persian' => 'Persian',
    'italian' => 'Italian',
    'chinese-simplified' => 'Chinese Simplified',
    'chinese-traditional' => 'Chinese Traditional',
    'swedish' => 'Swedish',
    'french' => 'French',
    'german' => 'German',
    'spanish' => 'Spanish',
    'korean' => 'Korean',
    'russian' => 'Russian',
    'portugues' => 'Portuguese',
];

// 调试模式 - 遇到空白页/报错时开启,用于排查问题
$config['debu**ode'] = false; // true=开启调试显示错误,false=关闭,请务必关闭
// 重要提示:线上正式运营必须设为 false,关闭调试以保证安全与性能

// 服务器信息 - 修改为你的服务器信息
$config['realmlist'] = 'NAS IP:1285'; // 游戏登录地址(realmlist),为NAS IP + 容器设置的对外监听端口号
$config['patch_location'] = '-'; // 补丁下载地址,没有就留空
$config['game_version'] = '3.3.5a (12340)'; // 服务端游戏版本

/* 资料片设置 - 填写数字选择服务器版本
0 = 经典旧世
1 = 燃烧的远征(TBC)
2 = 巫妖王之怒(WotLK)
3 = 大地的裂变
4 = 熊猫人之谜(MOP)
5 = 德拉诺之王(WOD)
6 = 军团再临
7 = 争霸艾泽拉斯
 */
$config['expansion'] = '2'; // 必须选择巫妖王之怒

/* 服务端核心类型 - 根据你使用的核心选择
0 = TrinityCore
1 = AzerothCore
2 = AshamaneCore
3 = Skyfire Project
4 = OregonCore
5 = CMangos
10 = 其他
 */
$config['server_core'] = 1; // 必须改为AzerothCore对应的1

// Battle.net 支持 - 只有 WoD/Legion/BFA 服务端才需要开启
$config['battlenet_support'] = false;

// SRP6 密码加密 - 新版AzerothCore必须开启
$config['srp6_support'] = true;

/* SRP6 版本选择
0 = SRP6 - 无 srp_version 字段
1 = SRP6v1
2 = SRP6v2
 */
$config['srp6_version'] = 2;

// 功能开关 - 禁用/启用某些页面或功能,请自行选择
$config['disable_top_players'] = false; // 禁用巅峰玩家页面
$config['disable_online_players'] = false; // 禁用在线玩家页面
$config['disable_changepassword'] = false; // 禁用修改密码功能

// 是否允许同一个邮箱注册多个账号
$config['multiple_email_use'] = false; // false=不允许,true=允许

// 网站模板选择
$config['template'] = 'light'; // 可选:light, advance, icecrown, kaelthas, battleforazeroth

// SMTP 邮件配置 - 用于找回密码等功能,如有需要请自行设定
$config['smtp_host'] = 'smtp1.example.com'; // SMTP 服务器地址
$config['smtp_port'] = 587; // SMTP 端口
$config['smtp_auth'] = true; // 是否开启验证
$config['smtp_user'] = 'user@example.com'; // SMTP 用户名
$config['smtp_pass'] = 'SECRET'; // SMTP 密码
$config['smtp_secure'] = 'tls'; // 加密方式 tls / ssl
$config['smtp_mail'] = 'no-reply@example.com'; // 发件邮箱

// 投票系统配置
$config['vote_system'] = false; // 开启/关闭投票
$config['vote_sites'] = array(
    // 投票站配置,格式如下
    // array(
    //     'image' => '投票站图片',
    //     'site_url' => '投票跳转地址'
    // ),
);

// 验证码配置,请根据需要选择
$config['captcha_type'] = 4; // 0=图片验证,1=HCaptcha,2=谷歌验证,3=Cloudflare,>3=关闭
$config['captcha_key'] = ''; // 验证码公钥
$config['captcha_secret'] = ''; // 验证码私钥
$config['captcha_language'] = 'en'; // 验证码语言

// 用于账号注册的 SOAP 接口,不建议开启,如有需要请自行设定
// 使用默认注册方式(数据库)时,不需要开启
$config['soap_for_register'] = false; // 建议关闭
$config['soap_host'] = '127.0.0.1'; // SOAP 服务地址
$config['soap_port'] = '7878'; // SOAP 端口
$config['soap_uri'] = 'urn:MaNGOS'; // SOAP 标识
$config['soap_style'] = 'SOAP_RPC'; // SOAP 模式
$config['soap_username'] = 'admin_soap'; // SOAP 用户名
$config['soap_password'] = 'admin_soap'; // SOAP 密码
$config['soap_ca_command'] = 'account create {USERNAME} {PASSWORD}'; // 创建账号的 SOAP 命令

// 两步验证(2FA),默认关闭,如有需要请自行开启
// 开启 2FA 需要配置 SOAP,但不需要开启 soap_for_register
$config['2fa_support'] = false; // 关闭 2FA
$config['soap_2d_command'] = 'account set 2fa {USERNAME} off'; // 关闭 2FA 命令
$config['soap_2e_command'] = 'account set 2fa {USERNAME} {SECRET}'; // 开启 2FA 命令

// ===================== 数据库配置(账号库) =====================
$config['db_auth_host'] = 'ac-database'; // 数据库地址,改为AzerothCore的数据库容器名称
$config['db_auth_port'] = '3306'; // 数据库端口
$config['db_auth_user'] = 'root'; // 数据库用户名
$config['db_auth_pass'] = 'abc.123@sql'; // 请改为此前为AzerothCore数据库设定的密码
$config['db_auth_dbname'] = 'acore_auth'; // 必须修改为AzerothCore的账号数据库名

// ===================== 角色数据库配置 =====================
// 多服可在这里添加多个区服
$config['realmlists'] = array(
    "1" => array(
        'realmid' => 1, // 服务器ID
        'realmname' => "AzerothCore", // 服务器名称,可自定义
        'db_host' => "ac-database", // 角色库地址
        'db_port' => "3306", // 角色库端口
        'db_user' => "root", // 角色库账号
        'db_pass' => "001.Hades@mysql", // 角色库密码
        'db_name' => "acore_characters", // 角色库名(AC 是 acore_characters)
    ),
);

/*
多服配置示例(复制粘贴即可增加服务器,如有需要请自行修改)
$config['realmlists'] = array(
"1" => array(
    'realmid' => 1,
    'realmname' => "服务器1",
    'db_host' => "127.0.0.1",
    'db_port' => "3306",
    'db_user' => "root",
    'db_pass' => "root",
    'db_name' => "acore_characters"
),
);
 */

// 脚本版本号
$config['script_version'] = '2.0.2';

修改完毕后,用浏览器访问http://NAS IP+12080(改成自己设定的IP + 端口号),即可访问WoWSimpleRegistration的注册页面

7.其他修改

根据部署时选择的页面主题不同,还需要补充一些类似“介绍说明”之类的内容,在访问页面的时候会有明确的提示,一般是在主题文件夹下的某个php网页。这部分不影响核心的注册功能,但可以提供引导,请根据需要自行设置。

七、配置客户端

Azerothcore需使用WoW 3.35a的客户端进行游戏,可以使用原始纯净的客户端,也可以寻找第三方打包的高清客户端。

下载好客户端后,进入客户端文件夹下的\Data目录,可以看见各语言的资源文件夹,比如\enus或者\zhCN之类,进入每个语言资源文件夹后,找到realmlist.**文件,用记事本打开,将里面的内容修改为自己的NAS IP + 设置好的游戏服务器端口,比如中文的话修改\Data\zhCN\下的realmlist.**:

SET realmlist "NAS IP:1224" 

至此,客户端也准备好了,启动游戏后即可登录游戏

八、故障排除

在整个部署的过程中,可能会遇到各种各样的问题,对于新手非常棘手,这些问题的通用解决方案是将日志发给AI,让AI定位问题源头并给出解决方案。

日志一般分两类,一类是通过SSH进行编译部署时的编译部署日志,会在编译部署时实时显示,如果因为错误被打断,它会清楚的显示出错误的源头;另一类是容器运行的日志,一般可以通过NAS web面板的docker管理页面中看到,日志中红色的提示就是严重错误。同时,在WOW/server/logs文件夹下也会生成一些日志文件,其中也有专门的错误日志。通过这些日志可以很清晰的排查问题源头

从我个人的经验而言,AI在定位源头上比较准确,但是给出的解决方案却往往不靠谱,尤其是国内的AI在无法直接读取github代码库的情况下,给出的方案往往偏离甚远。我的建议是要学会把问题分解,从翻译问题代码、解释问题原因入手,同时自己要从github库、搜索引擎等寻找信息或实例给AI做参照,才能最终解决问题。

在此,我也总结一些常见的问题:

1、镜像拉取问题:由于国内网络及不同NAS系统的设置等原因,用docker-compose部署时经常会遇到无法拉取目标镜像的问题,直观的解决方案是将源换为国内的镜像库,提前将要用到的镜像下载到本地,在部署时它会直接从本地读取。单独下载时,无论是通过docker的web面板还是SSH命令,往往都会成功。

2、MOD兼容性问题:AzerothCore的各类MOD虽然多,但是有相当一部分长久未更新,很多都不匹配目前的服务器,这导致在编译时经常出现各种各样的问题。可以将编译日志发给AI来确定出问题的MOD,然后考虑是否放弃这个功能,如果放弃的话直接删除modules文件夹下对应的mod文件夹即可;如果仍想保留,可以看看代码库的Issues有没有解决方案,或者看看有没有更新的fork分支可用

3、MOD、lua配置及数据库问题:就算能通过编译这关,在服务器启动时仍可能被MOD的各种问题卡住,尤其是某些MOD或者lua需要导入数据库,而不同类型、版本的数据库可能有略微差异,导入失败要么服务器无法启动,要么是某些功能缺失。将错误内容或日志直接发给AI,并且让AI辅助修改,往往能解决问题。

九、结语

至此,整个Azerothcore部署搭建完毕,可以开始游戏了。

最后声明:

1.本文只做技术探讨使用,不提供任何可直接使用的镜像或部署文件,禁止根据本文内容开设对公众开放的服务器。

2.文中涉及的的代码库、代码均为开源或使用免费AI编写,使用时请遵照各代码库开源协议和AI的使用协议。

3.由于水平有限,本人不对文中任何代码承担责任,部署时请自行判断代码安全性。由于开源代码库、代码引起的安全问题或损失,本人概不负责。

4.由于水平有限,本人不提供任何部署帮助或针对具体故障的答疑,请自行探索。

5.本文谢绝转载,谢绝洗稿。

6.再次感谢开源代码库的开发者、群晖魔兽世界套件的开发者及各平台提供参考实例的开发者。

引用代码库:

1.azerothcore:azerothcore/azerothcore-wotlk: Complete Open Source and Modular solution for MMO

2.azerothcore playerbots分支:mod-playerbots/azerothcore-wotlk: Complete Open Source and Modular solution for MMO

3.mod-playerbots:mod-playerbots/mod-playerbots: AzerothCore Playerbots Module

4.mod-ale:masterking32/WoWSimpleRegistration: Simple Registration page for TrinityCore/AzerothCore/AshamaneCore/CMangos

5.WoWSimpleRegistration:masterking32/WoWSimpleRegistration: Simple Registration page for TrinityCore/AzerothCore/AshamaneCore/CMangos

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则