前言
在拥有轻量云主机的情况下
前置资源准备
- AzerothCore 源码Github。
- Linux 服务器,推荐 4C16G。
- Docker 环境。
- 一个喜欢折腾的心,和一丢丢数据库知识(MySQL)。
- 推荐客户端下载 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: 40ac-worldserver 和 ac-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 根据源码构建镜像,并初始化客户端资源和数据库数据,核心是以下几个模块
- ac-database 数据库实例,存储账号、服务器、角色、世界内容等数据,其他模块的核心依赖
- ac-db-import 数据库数据导入,只会执行一次,一旦导入成功则后续不会再执行,主要初始化所有表的 DDL 和基础数据(NPC、物品等)
- ac-worldserver 游戏世界服务器,游戏服务端主模块
- ac-authserver 游戏认证服务器,客户端登录时验证账号密码
- ac-client-data-init 客户端文件初始化,会下载 DBC 数据
- ac-dev-server 开发服务端,基本用不到
- 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 配置。