• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Компиляция TrinityCore. Полное руководство на CentOS 7

Elvis

Поклонник кармы
Модератор
Агент нато
Чингачгук
Победитель в номинации 2022
Победитель в номинации 2021
Сообщения
141
Розыгрыши
0
Репутация
1 088
Реакции
252
Баллы
703
Всем привет, уважаемые форумчане. Статья написана специально для mmo-dev.info, в данной статье я попытаюсь передать весь свой опыт который я получил при создании сервера WoW, а, также мы поговорим об оборудовании, DDoS-защите ну и конечно же о настройке и установке самого сервера. Сразу хочу сказать что рекламы в данной статье нет.

1. Оборудование для проекта

Предположим, вы лишь хотите попробовать себя в этом деле, не обязательно доставать несколько тысяч рублей в месяц на оплату VPS в СНГ хостинг-провайдерах, самый дешёвый вариант - это конечно же Contabo, а именно:
Код:
VPS S SSD
4.99 EUR / month
За 4.99 евро мы получаем 4 ядра, 8 GB оперативной памяти, 200GB SSD и 200 mbit/s port, этого вполне хватит для самого простенького сервера. Ну и нужно будет доплатить за Setup в первый раз ещё 4.99 евро. Из минусов Contabo, это конечно же оплата только через paypal, а также вам нужно будет предоставить скан паспорта (это почти везде).
Возможно вы сразу обрадовались увидев цену, но не всё так однозначно, очень глупо будет хранить и сайт и ядро на одном сервере, соответственно на одном айпи, чуть далее вы поймёте почему. Поэтому вам придётся либо купить ещё одну такую железку для веба, либо взять какой-нибудь веб-хостинг (но я бы не рекомендовал использовать shared-хостинг, а взять всё-таки VPS).

2. Домен для проекта
Лично я приобретал домен на reg.ru и рекомендую его вам, потому что даже крупнейший и всем известный проект wowcircle, которому активно слали абузы в 2015 году Blizzard (это стандартная процедура если что) и никаких проблем у них нет и не было. Возможно вы спросите, откуда ты знаешь что он там зарегистрирован? Всё просто, я посмотрел whois.
Единственная претензия к wowcircle - одному из самых крупных WoW проектов от Blizzard была 1, это убрать с сайта прямые ссылки на их клиент и упоминание название игры в полной мере.

3. Выбор ядра для проекта и установка/настройка на CentOS 7.
Когда вы захотите выбрать ядро, я думаю вы конечно увидите сразу всем известный , над которым работа ведётся уже много лет, именно это ядро я бы вам и порекомендовал, все разработчики из мира WoW, так скажем, знакомы с ним. Есть также аналог основанный на TrinityCore, читая зарубежный форум, где сидят разработчики, многие из разработчиков как раз НЕ рекомендуют использовать это ядро, потому что много косяков в коде и т.д., но из плюсов AzerothCore - это то что на него есть уже много готовых встроенных вещей. Я выбрал TrinityCore и рекомендую его вам, что выбрать решать тоже вам, но в данном примере будет фигурировать только TrinityCore. Хочу подметить то, что я выбрал ОС CentOS 7 и буду показывать соответственно на примере этой оси.
Я пропущу момент связанный с подключением к серверу по SSH-протоколу, а также клиенту который мы будем использовать для подключения. Конкретно я использую BItvise SSH Client, но это не значит что не нужно пользоваться putty и т.д.

Установка/настройка
И так, после подключения мы находимся с правами root, пока это нам и нужно, потому что мы будет устанавливать много пакетов и т.д.
Первым делом создадим пользователя для компиляции и запуска ядра TrinityCore. Я назову пользователя server.
Код:
useradd -mU -s /bin/bash server
passwd server
Так как CentOS 7 не имеет достаточно новой версии GCC в репозиториях. Версия Boost также слишком старая, поэтому нам нужно скомпилировать нашу собственную.Для этого нам понадобится пара инструментов для распаковки и компиляции. Итак, мы сделаем это в первую очередь. Мы также должны убедиться, что у нас есть актуальный cmake.
Код:
yum -y install epel-release
yum -y install make cmake3 gcc gcc-c++ bzip2 p7zip nano
ln -s /usr/bin/cmake3 /usr/bin/cmake
Теперь для компиляции нового GCC, мы будем использовать GCC 7.3.0 (это займет некоторое время).
Код:
curl -L http://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-7.3.0/gcc-7.3.0.tar.gz -O
tar zxf gcc-7.3.0.tar.gz
cd gcc-7.3.0
./contrib/download_prerequisites
./configure --disable-multilib --prefix=/usr --enable-languages=c,c++
make -j $(nproc)
make install
С GCC, установленным вручную, мы должны сказать yum не устанавливать старый GCC поверх того, который мы установили вручную. Мы делаем это, добавляя строку в yum.conf.
nano /etc/yum.conf
P.s не обязательно использовать конкретно нано, но мы заранее выше его уже установили, никто не мешает юзать vim и т.д.
Добавляем следующую строку:
exclude=gcc gcc-c++
Нажмите Ctrl + O (и нажмите ENTER), чтобы сохранить изменения. - Это буква «О», а не ноль («0»). Нажмите Ctrl + X, чтобы выйти из nano.
С установленным GCC 7.3.0 нам теперь нужно скомпилировать и установить Boost 1.64.0 (это также займет некоторое время, хотя и не так много, как компиляция самого GCC).
Код:
cd
yum -y install libquadmath-devel python-devel
curl -L https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz -O
tar zxf boost_1_64_0.tar.gz
cd boost_1_64_0
./bootstrap.sh
./b2 install
Нам больше не нужны source'ы для GCC или Boost, поэтому давайте удалим их, чтобы сэкономить место.
Код:
cd
rm -rf boost_1_64_0*
rm -rf gcc-7.3.0*
Теперь мы устанавливаем пакеты, которые нам понадобятся для Trinity, а также для сервера MySQL и sshfs.

Код:
yum -y install git mariadb-devel openssl-devel bzip2-devel readline-devel ncurses-devel
yum -y install mariadb-server fuse-sshfs
Теперь для инициализации, запуска и защиты сервера MySQL. На последнем шаге ответьте на вопросы следующим образом: «текущий» пароль root отсутствует, поэтому нажмите клавишу ВВОД, задайте новый пароль root, а для всех оставшихся вопросов ответьте Y (да).
Код:
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation
Откройте необходимые порты в брандмауэре. Мы используем брандмауэр CentOS 7 по умолчанию. Здесь я показываю только базовые порты, чтобы все заработало. Во-первых, нам нужно выяснить, в какой «зоне» мы сейчас находимся.
firewall-cmd --get-active-zones
Теперь давайте откроем нужные порты для Trinity.
Код:
firewall-cmd --zone=public --add-port=3724/tcp --permanent
firewall-cmd --zone=public --add-port=8085/tcp --permanent
systemctl restart firewalld

Компиляция ядра/Установка
Первым делом переключимся на нашего пользователя которого мы сразу создали, с именем server (если что можете написать любое).
sudo -u server -i
Теперь скачиваем ядро и компилим. Если что в данном примере я показываю версию 3.3.5а (Wrath of The Lich KIng).
Код:
git clone -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git
cd TrinityCore
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/core
make -j $(nproc)
make install
DBC, maps, vmaps & mmaps извлечение
Чтобы извлечь DBC и карты, нам потребуется доступ к файлам данных из клиента WoW (папка Data).
Далее зайдем в папку с ядром и создадим директории для логов сервера авторизации, игрового мира и директории этих самых карт из самого клиента WoW.
Код:
cd ~/core
mkdir -p logs/auth
mkdir -p logs/world
mkdir -p data/Data
cd data
Теперь закинем сюда ту самую папку Data, используя SSHFS.
sshfs user@192.168.1.100:/home/World\ of\ Warcraft/Data ./Data

Показанная команда sshfs работает следующим образом: имя пользователя sshfs @ IP-адрес вашего компьютера: путь / к / вашей / папке WoW / путь к данным / где / к / монтировать / это
Имя пользователя и IP - это имя пользователя и IP-адрес вашего SSH-сервера с WoW-клиентом.
Ну либо если есть сервер с хорошим интернет-каналом и у вас хороший интернет, вы можете закинуть на него эту папку через SFTP(садомаза) и потом через scp перекинуть, но это такое.....
Ну и далее введём команду ls Data чтобы убедиться в том что всё смонтировалось, вы должны увидеть те самые файлы WoW.
Теперь распакуем DBC и карты.
Код:
../bin/mapextractor
../bin/vmap4extractor
mkdir vmaps
../bin/vmap4assembler Buildings vmaps
mkdir mmaps
../bin/mmaps_generator
Так как это займет довольно-таки приличное количество времени, вы можете открыть ещё одну сессию SSH (соответственно второе окно).
Так мы уже закончили работу с SSHFS, размонтируем папку.
Код:
rm -r Buildings
fusermount -u ./Data
Скачивание и установка БД
Нам нужно создать базы данных сервера и заполнить базы данных по умолчанию для аутентификации и самого игрового мира/персонажей.
Код:
cd ~/TrinityCore/sql
mysql -uroot -p < ./create/create_mysql.sql
mysql -uroot -p auth < ./base/auth_database.sql
mysql -uroot -p characters < ./base/characters_database.sql
Теперь нам нужно установить и извлечь TDB и установить на нашем сервере.
Код:
cd
mkdir database
cd database
curl -L https://github.com/TrinityCore/TrinityCore/releases/download/TDB335.19081/TDB_full_world_335.19081_2019_08_16.7z -O
7za x TDB_full_world_335.19081_2019_08_16.7z
mysql -uroot -p world < TDB_full_world_335.19081_2019_08_16.sql
На данный момент это самая последняя версия, на момент прочтения вами данной статьи может быть совершенно другая.
echo 'update auth.realmlist set name="Trinity on CentOS 7", address="192.168.1.4";' | mysql -uroot -p
Эта команда для настройки базы данных. Здесь мы устанавливаем информацию об области в базе данных. А именно IP и имя сервера. Можно также установить порт, если требуется что-то отличное от значения по умолчанию. Отрегулируйте IP-адрес и имя области соответствующим образом. Если вы не знаете IP, вы можете использовать команду ip addr для его обнаружения.

Установка файлов конфигурации сервера

Код:
cd ~/core/etc
cp authserver.conf.dist authserver.conf
cp worldserver.conf.dist worldserver.conf
Здесь мы зашли в папку core/etc и переименовали файлы конфигурации, для того чтобы они соответственно работали.
Откроем authserver.conf и отредактируем с помощью текстового редактора nano(либо любого другого).
nano authserver.conf
Теперь, чтобы сервер запускался для ошибок, в этом файле нам нужно прописать пути для записи логов. Ищем в конфиге LogsDir и прописываем вот такой путь, он у вас может отличаться если у вас другое имя пользователя.
LogsDir="/home/server/core/logs/auth"
Сохраняем и выходим из нано.
Теперь нам нужно отредактировать worldserver.conf
nano worldserver.conf

И установим путь для LogsDir и DataDir
Код:
DataDir="/home/server/core/data"
LogsDir="/home/server/core/logs/world"
Поскольку мы хотим, чтобы Trinity обновляла базу данных сервера при первом запуске, выставим следующие значения в конфиге:
Код:
Updates.EnableDatabases = 7
Updates.AutoSetup   = 1
Теперь включим игровой мир и создадим себе аккаунт с правами GM
Код:
cd ~/core/bin
./worldserver
И пропишем следующую команду:
account create admin testpass
admin - логин аккаунта, testpass - пароль.
Далее дадим этому аккаунта права GM
account set gmlevel admin 4 -1
И выставим аддон, айди у версии 3.3.5а = 2
account set addon admin 2
Теперь отключаем игровой мир с помощью команды server shutdown 0
Откроем наш worldserver.conf и изменим те значения которые мы меняли на следующие:
Код:
Updates.EnableDatabases = 0
Updates.AutoSetup   = 0
Работа сервера 24/7
Теперь нам нужно сделать так, чтобы после того как мы запустили игровой мир и сервер авторизации, когда мы завершаем нашу SSH сессию, у нас выключается сервер, как сделать чтобы он работал 24/7? Всё очень просто.
yum install screen
Устанавливаем screen, далее с помощью команды cd заходим в директорию home/server/core/bin.
cd /home/server/core/bin
Далее пишем следующую команду
screen -dmS auth ./authserver, после этого пишем screen -r auth, после его запуска выходим из этого скрина с помощью CTRL + A + D,
Далее пишем следующую команду screen -dmS world ./worldserver, после этого пишем screen -r world и также выходим из скрина с помощью CTRL + A +D.
И запускаем соответственно игровой мир, теперь снова CTRL + A + D, если вы потом захотите подключиться к ним для рестарта сервера и т.д., напишите команду screen -ls и там вы увидите названия окон, после этого screeen -r названиеокна
Вауля, теперь у нас сервер будет работать 24/7

DDoS Защита
Как пример, мы можем проксировать наш веб-сайт с помощью cloudflare, а с сервером такое не выйдет, поэтому в качестве DDoS-защиты придется использовать туннели от , почему именно от них? Потому что они предоставляют услуги по защите самым крупным проектам ( ), сейчас мы определим парочку из них:
1)Sirus.su (можно проверить с помощью eomy.net или других whois).
2)Wowcircle.com (можно проверить с помощью eomy.net или других whois).
Так что конкретно в нашей ситуации GRE Туннели для защиты самый лучший вариант.


Если есть вопросы задавайте в теме.
 
Последнее редактирование:

Назад
Сверху Снизу