搭建开源AzerothCore《巫妖王之怒》私服


前言

在拥有轻量云主机的情况下

前置资源准备

  1. AzerothCore 源码Github
    1. 这里后续为了可以使用 PlayerBots 机器人,所以使用的是大佬魔改的 az 源码Bots 版,构建和部署方式与原版一致。
    2. 机器人模组Github,私服要求最高的配置就是凑齐一个小队的好友,这时候机器人可以填补这一空白,只需要一些 CPU 和内存即可,下本、PVP 都能实现。
  2. Linux 服务器,推荐 4C16G。
  3. Docker 环境。
  4. 一个喜欢折腾的心,和一丢丢数据库知识(MySQL)。
  5. 推荐客户端下载 WOTLK 3.3.5a,包含插件百度云,提取码:5o54

安装过程

下载源码

git clone https://github.com/mod-playerbots/azerothcore-wotlk.git --branch=Playerbot
cd azerothcore-wotlk/modules
# 下载playerbots模块源码
git clone https://github.com/mod-playerbots/mod-playerbots.git --branch=master

源码库包含全量数据库 SQL,体积较大下载较慢,如果在国内可选择国内镜像源下载

构建

构建过程可参考官方文档,推荐使用 Docker,依赖容器启动较方便,切不需要在服务器内额外安装构建环境文档

确认 docker 版本

首先检查 Docker 版本,我这里使用的版本是 Docker version 29.1.2, build 890dcca ,检查 Docker compose 版本,我这里是 Docker Compose version v5.0.0

docker --version
docker compose version

环境变量

构建前先确认好环境变量, docker-compose.yml 中两项关键配置需要留意。

这里的 DOCKER_DB_ROOT_PASSWORD 是数据库初始的 root 用户密码,建议注入自定义值或直接覆盖环境变量。

ac-database:
    container_name: ac-database
    image: mysql:8.4
    networks:
      - ac-network
    ports:
      - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306
    environment:
      - MYSQL_ROOT_PASSWORD=${DOCKER_DB_ROOT_PASSWORD:-password}
    volumes:
      - ${DOCKER_VOL_DB:-ac-database}:/var/lib/mysql
    restart: unless-stopped
    healthcheck:
      test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\""
      interval: 5s
      timeout: 10s
      retries: 40

ac-worldserverac-authserver 实例的环境变量文件,建议在代码库根目录下新建 .env 后替换配置,可从 conf/dist/env.ac 复制。

# 默认配置
env_file:
    ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}

# 改成
env_file:
    .env

.env 文件内的核心配置如下

#
# GENERAL
#
TZ=Asia/Shanghai
USER_CONF_PATH=/azerothcore/apps/docker/config-docker.sh
DATAPATH=/azerothcore/env/dist/data

#
# COMPILER
#

CTYPE=RelWithDebInfo
CSCRIPTS=static
AC_CCACHE=true

#
# dir config
#
AC_DATA_DIR="/azerothcore/env/dist/data"
AC_LOGS_DIR="/azerothcore/env/dist/logs"
AC_TEMP_DIR="/azerothcore/env/dist/temp"

#
# db config
#
DATABASE_ROOT_USER="root"
DATABASE_PORT="3306"
DATABASE_HOST="ac-database"
DB_AUTH="acore_auth"

DB_WORLD="acore_world"
DB_CHARACTERS="acore_characters"
DB_PLAYERBOTS="acore_playerbots"
DOCKER_DB_ROOT_PASSWORD="<自定义root密码>"
AC_CONNECTION_PREFIX="${DATABASE_HOST};${DATABASE_PORT};${DATABASE_ROOT_USER};${DOCKER_DB_ROOT_PASSWORD}"

# 下面几项配置会覆盖worldserver.conf里对应的字段
AC_LOGIN_DATABASE_INFO="${AC_CONNECTION_PREFIX};${DB_AUTH}" # 覆盖 LoginDatabaseInfo
AC_WORLD_DATABASE_INFO="${AC_CONNECTION_PREFIX};${DB_WORLD}" # 覆盖 WorldDatabaseInfo
AC_CHARACTER_DATABASE_INFO="${AC_CONNECTION_PREFIX};${DB_CHARACTERS}" # 覆盖 CharacterDatabaseInfo
AC_PLAYERBOTS_DATABASE_INFO="${AC_CONNECTION_PREFIX};${DB_PLAYERBOTS}" # 覆盖 PlayerBotsDatabaseInfo

执行构建

docker compose build

等待 docker compose 根据源码构建镜像,并初始化客户端资源和数据库数据,核心是以下几个模块

  1. ac-database 数据库实例,存储账号、服务器、角色、世界内容等数据,其他模块的核心依赖
  2. ac-db-import 数据库数据导入,只会执行一次,一旦导入成功则后续不会再执行,主要初始化所有表的 DDL 和基础数据(NPC、物品等)
  3. ac-worldserver 游戏世界服务器,游戏服务端主模块
  4. ac-authserver 游戏认证服务器,客户端登录时验证账号密码
  5. ac-client-data-init 客户端文件初始化,会下载 DBC 数据
  6. ac-dev-server 开发服务端,基本用不到
  7. ac-tools 构建时需要的工具

启动检查

构建完成之后,执行 docker compose up -d 启动所有实例,启动成功后可以在客户端配置连接了。
如果是云服务器,记得防火墙开放 3724 , 8085 , 7878 三个端口。

客户端找到 Config.wtf 或者 realmlist.wtf ,配置 SET realmlist "<服务器IP地址>"

初始化账号可以通过 worldserver 的控制台创建,以下指令连接控制台,然后执行 account add <账号> <密码>

docker compose attach ac-worldserver

执行完之后 ctrl + P + Q 断开连接,切记不要直接 Ctrl+C

然后客户端登录,就可以愉快地玩耍啦~~~

后续

简单的注册页面

控制台创建账号操作性太差,且友友要加入还得服主手动操作,所以得要有个注册页面才行,可以试试开源的,找到一个 PHP 写的WoWSimpleRegistration,可以支持账号注册,还可以展示服务器状态、topX 的角色等,想要使用的朋友可以直接构建,或者构建 docker 镜像来部署,分享一下 Docker 构建文件

FROM composer:latest
RUN apk update && apk add build-base
RUN apk add libpng-dev \
 && apk add freetype-dev \
 && apk add libmcrypt-dev \
 && apk add libpng-dev \
 && apk add libjpeg-turbo \
 && apk add libjpeg-turbo-dev \
 && apk add zlib-dev git libzip-dev \
 && apk add gmp-dev libxml2-dev oniguruma-dev
RUN docker-php-ext-install gmp && docker-php-ext-enable gmp \
 && docker-php-ext-install gd && docker-php-ext-install gd \
 && docker-php-ext-install zip && docker-php-ext-enable zip \
 && docker-php-ext-install soap && docker-php-ext-enable soap \
 && docker-php-ext-install mbstring && docker-php-ext-enable mbstring \
 && docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable mysqli pdo pdo_mysql
COPY . /home/www-data
WORKDIR /home/www-data/application
RUN composer update && composer install --prefer-source --no-interaction
WORKDIR /home/www-data/
ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"
EXPOSE 8000
EXPOSE 587
EXPOSE 3306
ENTRYPOINT ["php", "-S", "0.0.0.0:8000"]

集成到上面的 docker-compose.yml 内

wowsignup:
    container_name: wowsignup
    image: wowsignup:dev
    networks:
      - ac-network
    ports:
      - 80:8000
    env_file:
      .env
    volumes
      - ./signup_conf.php:/home/www-data/application/config/config.php
    restart: unless-stopped
    depends_on:
      ac-database:
        condition: service_healthy
      ac-worldserver:
        condition: service_started

记得覆盖配置文件注入数据库连接信息和 SOAP 配置。

重写的简单注册页面

源码fight-net

线上效果:http://223.109.143.107/


  目录