准备环境:Ubuntu20.04 LTS
配置: 4C8G 50G+100G
应AzerothCore 不支持 OpenSSL 3.x 的要求,Linux 发行版Ubuntu22.04暂时排除在外否则就要编译低版本的OpenSSL!
安装准备
安装方式:从源安装(支持,推荐)
该方法用于任何目的和支持所有操作系统。安装过程可让你更多地了解 AzerothCore 的结构
环境要求 |
---|
MySQL ≥ 5.7.0 |
Boost ≥ 1.74 |
OpenSSL ≥ 1.0.x |
CMake ≥ 3.16 |
Clang ≥ 10 |
编译环境准备
安装为编译时需要的必要组件,注意组件分2大类 主要是数据库类型,二选一
带MySQL 8.x
sudo apt-get update && \
sudo apt-get install git cmake make gcc g++ clang libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev mysql-server libboost-all-dev
⚠️虽Mysql8.0 是官方推荐安装方式,但讽刺的是:Mysql8.0在Ubuntu20.04下表现出各种不稳定,仅在环境准备阶段就无法完成,如:迁移或切换DataDir数据目录,博主在这个问题上话费了大量的时间和精力,仍然在报错中。
问题主要来自apparmor
的大量配置影响,当然mysql的/usr/share/mysql/mysql-systemd-start
启动脚本 功不可没,强制检查/var/lib/mysql
目录是否存在,权限是否正确等...
参考的文档包括但不限于一下:
- 如何将 MySQL 数据目录移动到 Ubuntu 20.04 上的新位置 By digitalocean
- Ubuntu 20.04 MySQL Datadir 权限(Errno 13)By AskUbuntu
- Mysql服务器无法启动错误13 Ubuntu 20.04 By AskUbuntu
- Ubuntu 中修改 MySQL 数据库存储数据的位置 By CSDN
- Linux 中改变 MySQL8 数据库存储路径 By CSDN
...
均以失败告终
为此不得不寻求 MariaDB的方案。 不过如果对于迁移 或 系统分区空间足够大的情况 使用Mysql后续可能会是一个不错的选择...
未来的扩容迁移或其他个性化设置可能就比较吃力...
如果扯上企业行为甲骨文近年对社区的糟蹋和对中国区的制裁,觉得Mysql使用下来未必会好...
这些都是猜测,实践出真理。我们决赛圈见...
带MariaDB的版本
注意目前仅支持 10.6 和 10.5 俩个版本,所以在输入命令前需要先添加对应版本的存储库 访问官方指南
可直接使用下命令添加(和官方一致)
sudo apt-get install apt-transport-https curl \
&& sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc 'https://mariadb.org/mariadb_release_signing_key.asc'\
&&sudo sh -c "echo 'deb https://mirrors.aliyun.com/mariadb/repo/10.6/ubuntu focal main' >>/etc/apt/sources.list"
添加后 查询版本是否达到要求
apt update && apt list mariadb-server
编译环境安装命令
sudo apt update && sudo apt full-upgrade -y \
&& sudo apt install git cmake make gcc g++ clang libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server mariadb-client libmariadb-dev libmariadb-dev-compat
MariaDB版本 优化·1
上步完成后 首选准备MariaDB的远程连接用户,用于远程管理 拥有root权限;但为了安全 这里不使用root。
mysql
登录到mysql中
use mysql;
切换到系统表,随后创建用户 moon
和密码 并且授权所有IP连接
CREATE USER 'moon'@'%' IDENTIFIED BY 'FCCMivvPqDCJggN6Vqk8k85DaVhwWrFg';
添加管理员权限(等同root)
GRANT ALL PRIVILEGES ON *.* TO 'moon'@'%';
用户添加成功后 退出mysql返回bash
quit;
开放mysql数据库远程连接
nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到bind-address = 127.0.0.1
修改为
bind-address = 0.0.0.0
重启mysql
systemctl restart mysql
随后使用管理软件测试是否连接上了
MariaDB版本 优化·2
迁移 数据库 数据目录
此步骤是有为专用数据盘的用户准备的,如果你的磁盘就1个默认的 那就无需操作这个步骤且还能去选择mysql版本
默认Mysql数据存储位置/var/lib/mysql/
此步需求迁移目标位置/Azeroth/mysql
MariaDB的迁移非常简单粗暴
停止服务
systemctl stop mysql
cp
复制 -a
是保持连接和权限 -r
递归目录
cp -ar /var/lib/mysql /Azeroth/
一般这个命令复制就会保持原有目录权限和用户过去,如果不放心可以在此授权
chown -R mysql:mysql /Azeroth/mysql
编辑mysql 服务器配置
nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到
...
#datadir = /var/lib/mysql
...
改为(记得去除注释 #
)
...
datadir = /Azeroth/mysql
...
直接启动服务
systemctl restart mysql
为确保新数据目录确实在使用中,请启动 MySQL 监视器:
mysql
登录到mysql中
SELECT @@datadir;
输出
MariaDB [(none)]> SELECT @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /Azeroth/mysql/ |
+-----------------+
1 row in set (0.000 sec)
退出 mysql
quit;
现在您已经验证了任何现有数据的完整性, 您可以选择删除原来的数据目录了:
rm -rf /var/lib/mysql
也可以选择不删除,因为是新库,不会有多少占用空间
到这里 全部准备环境均完成了。准备下一步编译
git准备
编译所需的代码 均在github中,国内对github访问有魔法,所以这里需要为git做一些准备
git初次设置
因为是首次安装,之后如自己有修改保存本地版本,需要一个git用户名和邮箱(仅是本地用户可随意设置)
设置用户
git config --global user.name "Moon Benjamin"
git config --global user.email "your@email.com"
设置代理
假设 你的HTTP Proxy为 127.0.0.1:1087
git config --global http.proxy http://127.0.0.1:1087
git config --global https.proxy http://127.0.0.1:1087
拉取代码
进入你准备存放编译代码的位置
博主预设为 /Azeroth
目录下
cd /Azeroth
拉取稳定分支 包含一些稳定版本的(推荐) 如果空间有限也可以只拉一个版本,这里安装官方推荐
git clone https://github.com/azerothcore/azerothcore-wotlk.git --branch master --single-branch azerothcore
拉取完成后 得到一个azerothcore
目录 这时候 所有准备工作就完成了,可以进行编译了
编译
创建构建目录
为了避免更新和冲突源构建的问题,要自己创建了一个特定的构建目录,主要是避免了任何可能的问题(如果可能发生的话)
cd azerothcore
mkdir build
cd build
配置编译
编译时间比较长,怕中途SSH断开导致编译终端的,请安装screen
来开单独的命令窗口防止中断
apt install screen -y
为编译起一个 备注为install_core
的screem
窗口
screen -S install_core
如果终端断开了,重新连接后 则使用screen -ls
查询窗口ID 然后使用screen -r ID
重新进入
在运行 CMake 命令之前,替换$HOME/azeroth-server/
为服务器安装路径(您要放置已编译二进制文件的位置)。
高级用户参数说明CMake options
。
此时,您必须位于build/
目录中。
注意:在以下命令中,变量$HOME
是当前用户的路径,因此如果您以 root
身份登录,$HOME
将为/root
。您可以检查环境变量的状态,如下所示:
官方推荐命令
cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/azeroth-server/ \
-DCMAKE_C_COMPILER=/usr/bin/clang \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
-DWITH_WARNINGS=1 \
-DTOOLS_BUILD=all \
-DSCRIPTS=static \
-DMODULES=static
因为这里安装位置本就不在root
目录下,所以需要修改为
cmake ../ -DCMAKE_INSTALL_PREFIX=/Azeroth/azeroth-server/ \
-DCMAKE_C_COMPILER=/usr/bin/clang \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
-DWITH_WARNINGS=1 \
-DTOOLS_BUILD=all \
-DSCRIPTS=static \
-DMODULES=static
主要是修改了DCMAKE_INSTALL_PREFIX
位置
查询可用CPU的数量
nproc --all
然后,替换4为你需要使用CPU数量以达到预期性能,键入:
make -j 4
make install
开始编译,如果不出什么意外,我们设置篇见。记得在输make install
后保存一下输出 这个命令会返回一些重要的文件路径给你
服务器设置
编译完成后,您需要通过下载或解压缩来添加一些必要的文件
有些文件是可选的,但强烈推荐:
Directory | 要求 |
---|---|
dbc(客户端数据库) | 必须 |
maps(客户端地图) | 必须 |
vmaps(客户端) | 强力推荐 |
mmaps(客户端) | 强力推荐 |
cameras(客户端) | 推荐 |
怎么获取这些文件:
- 直接从Azeroth的Github仓库中获取预先收集的包
- 从3.3.5a 客户端中提取它们
从Github下载
- 在名为Data的构建文件夹中创建一个新文件夹。博主的位置为
/Azeroth/azerothcore/RelWithDebInfo/Data
内解压出来 - 记住这个位置,下步需要将
DataDir
配置选项编辑到文件夹的位置
从客户端中提取
如果您下载了上面的文件,您可以跳过这一步
AzerothCore 需要从魔兽世界客户端提取某些文件。您需要从 3.3.5a 客户端中提取它们。
默认情况下,您将使用工具编译核心,您将获得以下可执行文件:mapextractor
、vmap4extractor
、vmap4assembler
、mmaps_generator
(Windows
上为 .exe
)
你需要使用这些工具从客户端中提取。请直接参考Wiki 本文这里直接使用下载的方式
创建数据库以及用户
官方的这一步骤是在创建配置文件之后,但为配置文件更好整理修改。我们先创建数据库和用户
创建命令直接参考 create_mysql.sql
这个文件在本地文件 /Azeroth/azerothcore/data/sql/create
也能找到
操作完成后,会得到一个账户密码均为acore
的用户,你也可以自定义密码
对于的数据库为acore_world
,acore_characters
,acore_auth
创建配置文件
配置文件位于编译好输出的文件夹中 /Azeroth/azeroth-server/etc
默认为.dist
的副本,需要拷贝并重命名
cp authserver.conf.dist authserver.conf \
&& cp worldserver.conf.dist worldserver.conf
worldserver.conf
编辑内容
...
LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth"
WorldDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_world"
CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters"
...
DataDir = "/Azeroth/azerothcore/RelWithDebInfo/Data" #上一步Data位置
...
authserver.conf
编辑内容
...
LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth"
...
数据库遵循这样的结构:
Variablename = "MySQLIP;Port;Username;Password;database"
填充数据库
自动数据库更新程序
默认情况下,启动Worldserver
和 Authserver
的时候将检查所有新文件并将其导入到您在配置中指定的数据库中。
这是确保您始终与核心保持同步的最简单且推荐的方法。
要编辑自动数据库更新程序,您将在UPDATE SETTINGS
下的 authserver.conf
和 worldserver.conf
中找到必要的设置。
- 启动授权服务器。
- 启动世界服务器。
注意后台驻留,目前Linux还没准备对应的主流程序。所以以screen
的方式先运行,以便排查问题
screen -S authserver
创建名为authserber
的控制台
/Azeroth/azeroth-server/bin/authserver
运行授权服务器,看到首次运行导入了数据库
screen -S worldserver
创建名为worldserver
的控制台
/Azeroth/azeroth-server/bin/worldserver
运行世界服务器,看到首次运行导入了数据库 数据库比较大 首次运行需要一定时间
直到
AzerothCore rev. af88c2428b91 2023-02-11 17:06:58 +0000 (master branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon) ready...
Starting up Auction House Listing thread...
Monthly quests reset for all characters.
Calendar deletion of old events.
Guild Daily Cap reset.
AC>
说明服务器开启成功
运行准备
公网访问设置
Worldserver
和 Authserver
配置 默认的本地主机 localhost (127.0.0.1) 的IP 设置都应该保留。
默认的 bindip (0.0.0.0) 也应该保持不变。
为 Internet 连接设置 auth
数据库 realmlist
这是您必须使用您的互联网 IP 的地方,以便来自互联网的客户端可以找到您的服务器。您必须从路由器/防火墙转发或打开端口 3724 (authserver)
和 8085 (worldserver)
。
您需要确保您的authserver
应用程序将传入连接定向到您的领域。
打开acore_auth
数据库并找到realmlist
表。您需要根据需要编辑地址字段:
- LAN IP (192.168.xx) - 如果您在运行 WoW 的不同计算机上安装 AzerothCore,但所有涉及的计算机都在同一网络(路由器)上,请使用该计算机的局域网 IP。
- 127.0.0.1 - 也称为“本地主机”。如果您在运行 WoW 的同一台计算机上安装了 AzerothCore,并且只有您连接到它,请在此处和您的配置中保留此设置。
- 公共 IP 地址——如果您希望其他人连接到您的服务器,请使用您的外部 IP。访问http://www.whatismyip.com/查找您的外部 IP 地址。
- 如果您从家庭网络托管它,您可能需要设置正确的端口转发,这不在本指南的范围内。https://portforward.com有大多数路由器的指南,您的互联网服务提供商应该能够提供帮助。
- 完全限定的域名 -(mydomain.com 或 warcraft.mydomain.com)类似于外部 IP 地址,如果您希望其他人连接到您的服务器,则可以使用它,并且不需要跟踪潜在的动态 IP 的额外好处地址。
与公共 IP 地址类似,如果您从家庭网络托管,则需要设置端口转发。
创建用户(GM/User)
Level | Security Level |
---|---|
0 | SEC_PLAYER |
1 | SEC_MODERATOR |
2 | SEC_GAMEMASTER |
3 | SEC_ADMINISTRATOR |
创建一个管理员GM
account create benjamin 6BL2gXKqe22 3 -1
注意:(-1 代表所有领域)