Всем привет, уважаемые форумчане. Статья написана специально для mmo-dev.info, в данной статье я попытаюсь передать весь свой опыт который я получил при создании сервера WoW, а, также мы поговорим об оборудовании, DDoS-защите ну и конечно же о настройке и установке самого сервера. Сразу хочу сказать что рекламы в данной статье нет.
1. Оборудование для проекта
Предположим, вы лишь хотите попробовать себя в этом деле, не обязательно доставать несколько тысяч рублей в месяц на оплату VPS в СНГ хостинг-провайдерах, самый дешёвый вариант - это конечно же Contabo, а именно:
За 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.
Когда вы захотите выбрать ядро, я думаю вы конечно увидите сразу всем известный
Я пропущу момент связанный с подключением к серверу по SSH-протоколу, а также клиенту который мы будем использовать для подключения. Конкретно я использую BItvise SSH Client, но это не значит что не нужно пользоваться putty и т.д.
Установка/настройка
И так, после подключения мы находимся с правами root, пока это нам и нужно, потому что мы будет устанавливать много пакетов и т.д.
Первым делом создадим пользователя для компиляции и запуска ядра TrinityCore. Я назову пользователя server.
Так как CentOS 7 не имеет достаточно новой версии GCC в репозиториях. Версия Boost также слишком старая, поэтому нам нужно скомпилировать нашу собственную.Для этого нам понадобится пара инструментов для распаковки и компиляции. Итак, мы сделаем это в первую очередь. Мы также должны убедиться, что у нас есть актуальный cmake.
Теперь для компиляции нового GCC, мы будем использовать GCC 7.3.0 (это займет некоторое время).
С GCC, установленным вручную, мы должны сказать yum не устанавливать старый GCC поверх того, который мы установили вручную. Мы делаем это, добавляя строку в yum.conf.
P.s не обязательно использовать конкретно нано, но мы заранее выше его уже установили, никто не мешает юзать vim и т.д.
Добавляем следующую строку:
Нажмите Ctrl + O (и нажмите ENTER), чтобы сохранить изменения. - Это буква «О», а не ноль («0»). Нажмите Ctrl + X, чтобы выйти из nano.
С установленным GCC 7.3.0 нам теперь нужно скомпилировать и установить Boost 1.64.0 (это также займет некоторое время, хотя и не так много, как компиляция самого GCC).
Нам больше не нужны source'ы для GCC или Boost, поэтому давайте удалим их, чтобы сэкономить место.
Теперь мы устанавливаем пакеты, которые нам понадобятся для Trinity, а также для сервера MySQL и sshfs.
Теперь для инициализации, запуска и защиты сервера MySQL. На последнем шаге ответьте на вопросы следующим образом: «текущий» пароль root отсутствует, поэтому нажмите клавишу ВВОД, задайте новый пароль root, а для всех оставшихся вопросов ответьте Y (да).
Откройте необходимые порты в брандмауэре. Мы используем брандмауэр CentOS 7 по умолчанию. Здесь я показываю только базовые порты, чтобы все заработало. Во-первых, нам нужно выяснить, в какой «зоне» мы сейчас находимся.
Теперь давайте откроем нужные порты для Trinity.
Компиляция ядра/Установка
Первым делом переключимся на нашего пользователя которого мы сразу создали, с именем server (если что можете написать любое).
Теперь скачиваем ядро и компилим. Если что в данном примере я показываю версию 3.3.5а (Wrath of The Lich KIng).
DBC, maps, vmaps & mmaps извлечение
Чтобы извлечь DBC и карты, нам потребуется доступ к файлам данных из клиента WoW (папка Data).
Далее зайдем в папку с ядром и создадим директории для логов сервера авторизации, игрового мира и директории этих самых карт из самого клиента WoW.
Теперь закинем сюда ту самую папку Data, используя SSHFS.
Показанная команда sshfs работает следующим образом: имя пользователя sshfs @ IP-адрес вашего компьютера: путь / к / вашей / папке WoW / путь к данным / где / к / монтировать / это
Имя пользователя и IP - это имя пользователя и IP-адрес вашего SSH-сервера с WoW-клиентом.
Ну либо если есть сервер с хорошим интернет-каналом и у вас хороший интернет, вы можете закинуть на него эту папку через SFTP(садомаза) и потом через scp перекинуть, но это такое.....
Ну и далее введём команду
Теперь распакуем DBC и карты.
Так как это займет довольно-таки приличное количество времени, вы можете открыть ещё одну сессию SSH (соответственно второе окно).
Так мы уже закончили работу с SSHFS, размонтируем папку.
Скачивание и установка БД
Нам нужно создать базы данных сервера и заполнить базы данных по умолчанию для аутентификации и самого игрового мира/персонажей.
Теперь нам нужно установить и извлечь TDB и установить на нашем сервере.
На данный момент это самая последняя версия, на момент прочтения вами данной статьи может быть совершенно другая.
Эта команда для настройки базы данных. Здесь мы устанавливаем информацию об области в базе данных. А именно IP и имя сервера. Можно также установить порт, если требуется что-то отличное от значения по умолчанию. Отрегулируйте IP-адрес и имя области соответствующим образом. Если вы не знаете IP, вы можете использовать команду ip addr для его обнаружения.
Установка файлов конфигурации сервера
Здесь мы зашли в папку core/etc и переименовали файлы конфигурации, для того чтобы они соответственно работали.
Откроем authserver.conf и отредактируем с помощью текстового редактора nano(либо любого другого).
Теперь, чтобы сервер запускался для ошибок, в этом файле нам нужно прописать пути для записи логов. Ищем в конфиге LogsDir и прописываем вот такой путь, он у вас может отличаться если у вас другое имя пользователя.
Сохраняем и выходим из нано.
Теперь нам нужно отредактировать worldserver.conf
И установим путь для LogsDir и DataDir
Поскольку мы хотим, чтобы Trinity обновляла базу данных сервера при первом запуске, выставим следующие значения в конфиге:
Теперь включим игровой мир и создадим себе аккаунт с правами GM
И пропишем следующую команду:
admin - логин аккаунта, testpass - пароль.
Далее дадим этому аккаунта права GM
И выставим аддон, айди у версии 3.3.5а = 2
Теперь отключаем игровой мир с помощью команды
Откроем наш worldserver.conf и изменим те значения которые мы меняли на следующие:
Работа сервера 24/7
Теперь нам нужно сделать так, чтобы после того как мы запустили игровой мир и сервер авторизации, когда мы завершаем нашу SSH сессию, у нас выключается сервер, как сделать чтобы он работал 24/7? Всё очень просто.
Устанавливаем screen, далее с помощью команды cd заходим в директорию home/server/core/bin.
Далее пишем следующую команду
Далее пишем следующую команду
И запускаем соответственно игровой мир, теперь снова CTRL + A + D, если вы потом захотите подключиться к ним для рестарта сервера и т.д., напишите команду
Вауля, теперь у нас сервер будет работать 24/7
DDoS Защита
Как пример, мы можем проксировать наш веб-сайт с помощью cloudflare, а с сервером такое не выйдет, поэтому в качестве DDoS-защиты придется использовать туннели от
1)Sirus.su (можно проверить с помощью eomy.net или других whois).
2)Wowcircle.com (можно проверить с помощью eomy.net или других whois).
Так что конкретно в нашей ситуации GRE Туннели для защиты самый лучший вариант.
Если есть вопросы задавайте в теме.
1. Оборудование для проекта
Предположим, вы лишь хотите попробовать себя в этом деле, не обязательно доставать несколько тысяч рублей в месяц на оплату VPS в СНГ хостинг-провайдерах, самый дешёвый вариант - это конечно же Contabo, а именно:
Код:
VPS S SSD
4.99 EUR / month
Возможно вы сразу обрадовались увидев цену, но не всё так однозначно, очень глупо будет хранить и сайт и ядро на одном сервере, соответственно на одном айпи, чуть далее вы поймёте почему. Поэтому вам придётся либо купить ещё одну такую железку для веба, либо взять какой-нибудь веб-хостинг (но я бы не рекомендовал использовать 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
Код:
yum -y install epel-release
yum -y install make cmake3 gcc gcc-c++ bzip2 p7zip nano
ln -s /usr/bin/cmake3 /usr/bin/cmake
Код:
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
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
Код:
cd
rm -rf boost_1_64_0*
rm -rf gcc-7.3.0*
Код:
yum -y install git mariadb-devel openssl-devel bzip2-devel readline-devel ncurses-devel
yum -y install mariadb-server fuse-sshfs
Код:
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation
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 и карты, нам потребуется доступ к файлам данных из клиента WoW (папка Data).
Далее зайдем в папку с ядром и создадим директории для логов сервера авторизации, игрового мира и директории этих самых карт из самого клиента WoW.
Код:
cd ~/core
mkdir -p logs/auth
mkdir -p logs/world
mkdir -p data/Data
cd data
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
Так мы уже закончили работу с 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
Код:
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
Откроем 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"
Код:
Updates.EnableDatabases = 7
Updates.AutoSetup = 1
Код:
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
Теперь нам нужно сделать так, чтобы после того как мы запустили игровой мир и сервер авторизации, когда мы завершаем нашу 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 Туннели для защиты самый лучший вариант.
Если есть вопросы задавайте в теме.
Последнее редактирование: