Вступление
Приветствую читателей данной статьи. Сразу хочу отметить, что статья не несет никакой профессиональной информации, но нацелена на аудиторию, которая имеет представление о том, что такое терминал и хостинг, и с чем это едят. Автор лишь делится своим опытом и оставляет это здесь, чтобы не потерять свои наработки и вернуться к ним при необходимости. Если у читателя есть альтернативные советы, прошу поделиться ими и я так же постараюсь закрепить их здесь (после проверки на работоспособность). Приступим…
P.S. Если вдруг что-то из статьи перестало работать или на каком-то этапе у вас возникли трудности, вы всегда можете связаться с автором статьи через стим или через дискорд.
Безопасность
Никогда не будет лишним напомнить, что на этапе обучения всегда нужно иметь привычку брать хостинги за копейки, а размещать на этих хостингах файлы, которые никогда не страшно потерять. Пока вы не знаете, что такое кибер-безопасность, dos/ddos атаки и всё в этом духе, не выпускайте ничего публично, чтобы не пожалеть, если вдруг вас взломают и угонят ваши наработки или снесут вашу машину. Если вы думаете о нормальном публичном проекте, позаботьтесь по пути о защите своего сервера и приобретите нормальный хостинг (DS/VDS) с защитой от атак. Так же не рекомендую размещать проекты на аккаунте с root правами, тем более, если Вы на «Вы» знакомы с ОС и фаерволами.
Аккаунт Steam
Знали вы или нет, но лицензионный сервер csgo требует от будущего администратора учетную запись steam без ограничений и всяческого рода блокировок. Иными словами, для установки сервера вам потребуется steam аккаунт, в котором как минимум можно выставлять вещи на торговую площадку (продавать) и добавлять любых людей в друзья самостоятельно. Аккаунт лучше защитить и привязать steamguard, почту, телефон. Так же аккаунт лучше иметь чистый (новый), чтобы на случай “взлома” вы не потеряли свой любимый аккаунт со своим богатеньким инвентарем, модным профилем и впечатляющей статистикой.
Токены
Если вы планируете ставить на свой сервер любые плагины, за которые Valve выдают блокировку токена, то вам непременно придется генерировать новый токен. Чтобы не заморачиваться над этим вопросом регулярно, можно воспользоваться сервисом TokenAutoUpdater. Инструкция по работе с ним есть на самом сайте tau.
Хочу отметить, что за несколько месяцев работы сервера со всевозможными плагинами, блокировок токена я не получал хоть в интернете и встречается подобное предостережение нередко. Верить или нет, решайте сами, но я всё же не отказался подстраховаться.
Хостинг
Для своих первых тестов вы можете взять вообще любой хостинг за 2-5$. Главное, чтобы это была VDS и имела параметры не ниже:
-
1vCPU x 3.0ghz
-
1Гб RAM
-
30Гб диск (SSD/NVME).
Это минимальные системные требования, чтобы ваши тесты шли предельно мягко, без лишнего дискомфорта.
Софт
Для удобной работы с файлами сервера, вам потребуются некоторые программы, с которыми вы должны уметь мало-мальски работать. В сети хватает информации, учитесь. Вот список:
Установка сервера (linux)
Приступая к работе над сервером, лучше всего начинать именно с Debian или Ubuntu, если вы еще совсем новичок. Я воспользуюсь Debian’ом и буду писать статью именно под него. Хотя для большинства опытных принципиальной разницы наверняка не будет.
Теперь нам необходимо подготовить машину для работы с серверами csgo. Для этого потребуется выполнить несколько команд через терминал для установки дополнительного софта. Каждая команда легко гуглится и вы сможете узнать, что она делает.
apt-get update
apt-get -y upgrade
apt-get -y install htop
apt-get -y install screen
apt-get -y install sudo
apt-get -y install lib32gcc1
apt-get -y install lib32stdc++6
apt-get install lib32z1
Теперь необходимо создать две папки server и steamcmd для вашего будущего сервера. Сделать это можно через файлменеджер, а можно и командами в терминале. Располагайте папки там, где вам удобно. Я буду делать это в /home/. Если создавать командами, то так:
mkdir /home/server
mkdir /home/steamcmd
Так же нужно установить SteamCMD. Этот софт как раз и необходим для скачивания и обновления сервера. Чтобы скачать его, нужно перейти в нашу папку steamcmd. Я буду действовать всё так же по своему примеру:
cd /home/steamcmd/
wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
tar xvfz steamcmd_linux.tar.gz
Теперь можно запустить SteamCMD, указав id нашего приложения, где 740 – csgo. Запускается он через скрипт steamcmd.sh. Процесс скачивания сервера может занимать до 20-и минут, а обновления до 10-и минут, но скорость разумеется будет отличаться от конфигурации к конфигурации хоста. Команду так же можно загуглить и узнать, за что отвечает каждый её аргумент.
./steamcmd.sh +login anonymous +force_install_dir /home/server/ +app_update 740 validate +quit
Пройдите по пути /home/server/csgo/cfg/. Если данной папки нет, значит на этапе скачивания сервера произошла ошибка. Нужно её устранить…
Затем создайте файл autoexec.cfg. Этот конфиг будет содержать в себе все важные глобальные настройки сервера, которые будут загружаться сервером приоритетно. Часть таких настроек я уже привел в примере ниже. Как всегда, каждый квар (настройка) гуглится. Создать файл можно как командами с терминала, так и вручную через файлменеджер.
cd /home/server/csgo/cfg/
touch /home/server/csgo/cfg/autoexec.cfg
hostname "day-d | Public Server" // Название игрового сервера (только английский)
sv_setsteamaccount ВАШ-КЛЮЧ // Токен для сервера: http://steamcommunity.com/dev/managegameservers
mp_endmatch_votenextmap 0 // Отключить стандартное голосование сервера за карту
rcon_password "" // Пароль для упраления сервером через терминал, RCON командами
sv_password "" // Пароль для входа на сервер(если не требуется, оставить ковычки пустыми)
sv_lan 0 // 0 - открыть для интернета, 1 - для локальной сети
mp_autokick 0 // Не автокикать(если часто самоубиваешься например)
sv_pure 0 // Пропускать на сервер, даже если файлы клиента отличаются
host_name_store 1 // Чтобы ваш сервер был виден в списке серверов сообществ
host_info_show 2 // Чтобы ваш сервер был виден в списке серверов сообществ
host_players_show 2 // Чтобы ваш сервер был виден в списке серверов сообществ
mapgroup "mg_server" // Группа карт для настройки голосований. Список настраивается в gamemodes_server.txt
В основном все настраиваемые конфиги чистого сервера лежат именно по пути /home/server/csgo/cfg/. Здесь находятся так же и конфиги режимов игры. Настройки с этих самых конфигов будут считаться приоритетными в зависимости от установленного в строке запуска сервера режима игры. Об этом ниже.
Теперь наш сервер готов в чистом виде и готов для принятия игроков. Для этого нам нужно создать скрин в терминале и прописать команду запуска. Если вы не умеете работать со Screen, то погуглите инфу об этом приложении на linux. Предположим, что вы создали себе screen (или даже не создали, не важно):
cd /home/server/
./srcds_run -game csgo -console -tickrate 128 +map de_dust2 -port 27015 +game_type 0 +game_mode 0 -secure -nohltv
Если не будет никаких второстепенных проблем по типу фаервола, то сервер должен успешно запуститься. В противном случае придется открыть указанный в строке запуска порт (27015) и устранить другие препятствующие запуску причины.
Чтобы зайти на сервер, открываем в игре список серверов сообщества и добавляем новый сервер (кнопка снизу). Откроется окно, там мы должны указать IP:PORT нашей vds. IP я ваш не знаю, но порт у нас 27015, то есть ip:27015. В качестве альтернативы можно в игровой консоли выполнить команду connect ip:27015. Должно появиться окно загрузки (подключения к серверу).
Теперь чуточку о приведенных параметрах запуска. Еще больше параметров ищите в сети. Список:
-game csgo // Указываем, от какой игры запускаем сервер. Не трогать в общем
-console // Запускаем сервер в консольном режиме. Тоже не трогаем
-tickrate 128 // Тикрейт сервера. Гуглите, зачем он. Либо 64, либо 128
+map de_dust2 // Стартовая карта сервера. Уберите, если подключили коллекцию Workshop
-port 27015 // Порт сервера. Не меняйте, если не понимаете
+game_type 0 // Устанавливает режим сервера
+game_mode 0 // Тоже настройка режима сервера
-secure // Защищаем сервер VAC анти-читом
-nohltv // Отключаем возможность заходить на сервер, как зритель
Установка SourceMod и MetaMod
Для работы плагинов на сервере csgo требуется установить MetaMod и SourceMod. Это два дополнения для сервера, которые позволяют устанавливать на сервер пользовательские плагины с открытых источников или даже писать их самостоятельно (при знании языка SourcePawn). Чтобы установить их, откройте сайты дополнений и выберете stable версию для linux на обоих сайтах. Кликните по версии «ПКМ» и выберете в появившемся меню что-то в роде “Копировать адрес ссылки”. Первым ставится SourceMod, потом MetaMod. Выключаем сервер и снова идем в терминал выполнять команды:
cd /home/server/csgo/
wget https://sm.alliedmods.net/smdrop/1.10/sourcemod-1.10.0-git6509-linux.tar.gz
tar xvfz sourcemod-1.10.0-git6509-linux.tar.gz
wget https://mms.alliedmods.net/mmsdrop/1.11/mmsource-1.11.0-git1144-linux.tar.gz
tar xvfz mmsource-1.11.0-git1144-linux.tar.gz
Теперь вы можете включить свой сервер и проверить команду sm. Если в косоль вывело не Unknow command, то можно радоваться. Дополнения установились успешно, остается лишь скачивать готовые плагины в интернете и кидать их запчасти по нужным папкам (сообразите по содержимому архивов с плагинами). После каждого нового плагина нужно перезапускать сервер!
Важный нюанс… Если вы скачали плагин и в нем имеются модели/текстуры/звуки и т.п. (папки sounds, models, scriptings, sprites, textures), то вам желательно настраивать альтернативное зеркало для скачки файлов. Чтобы это сделать, вам нужно найти ресурс, где вы будете хранить файлы ваших плагинов, чтобы игрокам всё скачивалось автоматически при подключении к серверу. Такая рекомендация существует, потому что у csgo есть свои технические ограничения и вы можете с таковыми столкнуться.
К примеру, я создал папку с именем csgo у себя на сайте и в ней держу все запчасти от плагинов. Чтобы это работало, в конфиг autoexec.cfg нужно добавить новые настройки:
sv_downloadurl "https://day-d.ru/csgo"
sv_allowupload 1
sv_allowdownload 1
После этого всякие скины, модели оружий, звуки и т.п. будут скачиваться вашим игрокам без проблем. Учтите, что ссылка не должна заканчиваться на «/», а путь до файлов должен быть прямой, то есть с расширением(.mp3, .ogg и т.п.).
Сами же плагины, как правило, ставить совсем не трудно. Обычно все плагины заливают в сеть архивами и сразу понятно, глядя на внутренности архива, что и куда закидывать. Во всяком случае файлы формата .smx кладутся по пути сервер/csgo/addons/sourcemod/plugins/, а .sp кладутся в сервер/csgo/addons/sourcemod/scriptings/. Первый файл является самим плагином, второй является его исходником и может не всегда идти в комплекте с самим плагином. Лучше всего брать исходник плагина, проверять код на уязвимости, компилировать его вручную и закидывать на сервер. Но это уже другая история:)
Режимы игры
Как и говорилось прежде, режимы игры настраиваются через определенные конфиги в зависимости от установленного режима игры на сервере. Конфиги режимов лежат по пути /home/server/csgo/cfg/. Изменяя настройки в этих конфигах, вы будете влиять непосредственно на настройки конкретного режима игры. Если какая-то переменная записана в server.cfg и эта же переменная есть в gamemode_competitive.cfg (к примеру), то значение будет браться именно из gamemode_competitive.cfg, так что не забудьте об этом!
gamemode_casual.cfg — Обычный
gamemode_competitive.cfg — Соревновательный
gamemode_armsrace.cfg — Гонка вооружений
gamemode_demolition.cfg — Уничтожение объекта
gamemode_deathmatch.cfg — Бой насмерть
Сейчас мы выяснили, к каким режимам относятся указанные выше конфиги. Теперь давайте посмотрим, как все-таки установить режим сервера. Выше я привел пример стартовой строки сервера. Если он у вас включен, то самое время выключить его командой:
quit
Для изменения режима игры достаточно в строке запуска изменить параметры +game_type 0 и +game_mode 0 на нужные вам. Примеры параметров смотрите ниже:
+game_type 0 +game_mode 0 // Обычный
+game_type 0 +game_mode 1 // Соревновательный
+game_type 0 +game_mode 2 // Напарники
+game_type 0 +game_mode 3 // Эксперт по оружию
+game_type 1 +game_mode 0 // Гонка вооружений
+game_type 1 +game_mode 1 // Уничтожение объекта
+game_type 1 +game_mode 2 // Бой насмерть
+game_type 2 +game_mode 0 // Тренировка
+game_type 3 +game_mode 0 // Пользовательский
+game_type 4 +game_mode 0 // Страж
+game_type 4 +game_mode 1 // Совместный налет
+game_type 5 +game_mode 0 // Военные игры
+game_type 6 +game_mode 0 // Запретная зона
Имейте ввиду, что для нестандартных режимов нужно подбирать нестандартные карты. Так, к примеру, Запретная зона будет кидать вас в черный экран, если вы поставите карту $2000$.
Подключаем карты из Steam WorkShop
Первым делом вам необходимо сгенерировать ключ для Steam WebAPI. Делается это тут. Авторизуйтесь в своем аккаунте steam, который планирутся привязать к серверу, затем в поле «Домен» введите свой адрес электронной почты и поставьте галочку, подтверждая свое согласие с правилами пользования. Нажмите «Зарегистрировать». Если всё сделано верно, вы получите WebAPI ключ. Теперь создайте файл webapi_authkey.txt и вставьте в него ваш ключ. Сохраните файл и кидайте его в папку /home/server/csgo/ вашего сервера. Теперь нам необходимо создать коллекцию карт для нашего сервера.
Создаем коллекцию. Переходим в стим -> «Мастерская» -> В поиск вбиваем “Counte-Strike” и выбираем игру -> «Просмотр» -> «Коллекции» -> «Создать коллекцию» -> «Сохранить и продолжить». Коллекция создана. Теперь необходимо её наполнить картами.
Добавляем карты в коллекцию. Переходим в стим -> «Мастерская» -> В поиск вбиваем “Counte-Strike” и выбираем игру -> В поиск вбиваем любое слово, например “aim” -> открываем любую карту -> снизу под скринами жмем «В коллекцию» -> Ставим галку на вашей коллекции, готово.
Удаляем карты с коллекции. Переходим в стим -> «Мастерская» -> В поиск вбиваем “Counte-Strike” и выбираем игру -> «Просмотр» -> «Избранное» -> «Создано ваш ник» -> «Коллекции» -> Выбираем коллекцию -> «Изменить коллекцию».
Получаем ID коллекции. Переходим в стим -> «Мастерская» -> В поиск вбиваем “Counte-Strike” и выбираем игру -> «Просмотр» -> «Избранное» -> «Создано ваш ник» -> «Коллекции» -> выбираем коллекцию и в ссылке сверху (в браузере) последние цифры – это и есть ID вашей коллекции.
Получаем ID карты.. Переходим в стим -> «Мастерская» -> В поиск вбиваем “Counte-Strike” и выбираем игру -> «Просмотр» -> «Избранное» -> «Создано ваш ник» -> «Коллекции» -> Выбираем коллекцию -> Выбираем карту и в ссылке сверху(в браузере) последние цифры – это и есть ID карты.
Когда ваша коллекция карт будет подготовлена, скопируйте её id из ссылки и настройте конфиг autoexex.cfg, добавив в него новые строчки. Пример коллекции можно посмотреть тут.
host_workshop_collection ID-КОЛЛЕКЦИИ // Подключаем коллекцию карт к нашему серверу
workshop_start_map ID-КАРТЫ // Выбираем карту, с которой наш сервер будет стартовать
sv_workshop_allow_other_maps 0 // Запрещаем игрокам запускать сторонние карты
Как вы успели заметить, нужно указать еще и ID-КАРТЫ. Конкретно с этой карты сервер и будет стартовать после каждого перезапуска. ID карты берется так же из ссылки, когда вы открываете конкретную карту в своем браузере. Теперь вам нужно перезапустить сервер и дождаться, пока все карты скачаются, а после настроить файл mapcycle.txt, который находится в папке csgo. Скачивание должно начаться автоматически, если всё сделано верно! Теперь о файле mapcycle.txt… Пример моего конфига на момент написания статьи:
workshop/128042593/2000_classic_b2
workshop/1303424100/aim_deagle_csgo
workshop/125995702/aim_redline
Давайте разберемся, что значат значения конфига и как этот конфиг правильно настроить. Каждая новая карта в списке должна прописываться с новой строки и иметь вид типа workshop/ID-карты/название-карты-без-.bsp. Тут, я думаю, всё вполне понятно. Просто переходим в папку /csgo/maps/workshop/ и видим список папок с цифрами. Эти папки и есть папки с нашими картами из мастерской, а цифры в названии папок – это id карт из ссылок в браузере. Когда вы настроите файл mapcycle.txt, нужно перезапустить сервер. И кстати, все стандартные карты из /csgo/maps/ можно удалить. Так вы выиграете 4-6 гигов места на диске. Но на всякий случай не удаляйте карту de_dust2.bsp и все файлы с таким же именем, но разными расширениями.
Команды и переменные
Вы бы только знали, сколько существует команд и переменных для сервера csgo… Я лишь приложу пару ссылок: эту, эту и эту. А вы пользуйтесь в своё удовольствие и эксперементируйте!
Выдача админки (прав)
После установки SourceMod и MetaMod пройдите в папку csgo/addons/sourcemod/configs/ и откройте файл admins_simple.ini. Именно в этом файле прописываются права для определенных аккаунтов. Каким образом можно выдать права на аккаунт? Вот варианты:
"STEAM_0:1:16" "bce"
"!127.0.0.1" "99:z"
"BAILOPAN" "abc" "Gab3n"
"ЗДЕСЬ-STEAMID" "ПЕРМЫ"
"!ЗДЕСЬ-IP" "ИММУНИТЕТ:ПЕРМЫ"
"НИК-STEAM" "ПЕРМЫ" "ПАРОЛЬ"
Можете комбинировать выдачу админки как вам угодно. Если выдать иммунитет 99 и пермы z, то аккаунт получит полную админку. В качестве аккаунта вы можете указать чей-то STEAMID, или IP, или НИК. Так же можно требовать и пароль для аккаунта и тогда игроку придется подтверждать свои права, вводя пароль в консоли игры командой:
setinfo _pw пароль
Права на каждый аккаунт прописываются в файле с новой строки. Узнать steamid чьего-нибудь аккаунта вы можете тут.
На этом, пожалуй, я пока закончу свою первую статью на Хабре. Если будет доступна функция редактирования, я улучшу и дополню данную статью, в противном случае напишу вторую часть. Всем спасибо за внимание!