Установка hlds-сервера + WEB-статистики.
Живой сервер тут - http://65.108.82.45/ps/ , steam.
Для кого
В первую очередь для себя.
В нулевых общежитие института активно погрузилось в Quake3, StarCraft BW и CS.1.6. Сейчас мне 40+, но игра по прежнему неплохо чистит мозг после работы.
Зачем
Public internet предлагает сотни серверов, но большинство из них перегружено диким количеством плагинов. Бесконечные VIP-привелегии, бесконечные деньги, какие-то новые сущности неведомые в оригинальной версии. Valve создал Вселенную, люди породили франкенштейна.
Захотелось свой чистый сервер от Steam. Пришло понимание, что все инструкции на большинстве форумов сводятся к покупке готового хостинга с готовой сборкой какой-то версии сервера с предустановленными какими-то плагинами.
Так не годится. Собираем свое, никому не платим.
Как все устроено
Для установки сервера Valve community предлагает SteamCMD. Это даст нам оригинальный сервер с официальным VAC.
Стоит отметить, что сейчас большое распостранение получила неофициальная сборка RE-HLDS. Утверждается, что Valve давно не уделяет должное внимание уязвимостям и производительности своего сервера. Новая сборка от энтузиастов делает сервер в 100500 раз круче и добавляет возможность использовать самые новомодные плагины.
Плагины
Сервер без плагинов - печальное зрелище. Плагинам быть!
Чтобы добраться до ядра CS не пересобирая его, был придуман проект AMX Mod X. Он дает возможность писать скрипты в текстовых .sma-файлах, компилировать их в бинарные .amxx-файлы.
В интернете сотни уже готовых amxx-плагинов. Задача сводится к единственному действию - подкинуть файл в нужную директорию совего сервера и все.
amxx в свою очередь общается с ядром CS через посредника metamod. Его последнюю версию я брал, с сайта AMX Mod X, см. Downloads.
Берем оригинал
Я выбрал оригинальный сервер.
Вылезла только одна проблема - не запускается metamod-модуль dproto.
Это неведомый черный ящик с неведомыми исходниками, дающий возможность подключаться к нашему серверу No-Steam клиентам. Нормальная игра, купленная в Steam за 259 рублей, использует протокол p48, а подвальная ломаная сборка работает на протоколе p47.
Да да, очень многие дядьки качают откуда попало неведомый бинарник игры, бесплатно ведь! Запускают это на своем компьютере!
В нашем случае, сервер не сможет обслужить No-Steam клиентов. Поразительно, но таких игроков больше половины по моему опыту.
На смену dproto сейчас пришел новомодный модуль reunion, но он работает только на RE-HLDS-сервере.
Под RE-HLDS идут уже другие плагины, работают через другой RE-API. Не ставил, не пробовал.
Установка
У меня есть свой VPS в Финляндии, на нем крутится OpenVPN-сервер. Полезная теперь штука, ну вы понимаете...
Вот на нем (Debian11) и раскатаем наш HLDS-сервер. Туда же подкинем WEB-сервер, чтобы рисовать статистику игроков.
Весь процесс установки расписан у меня на GitHub.
Люблю Docker за изоляцию процессов от хостовой машины, на нем и соберем.
Нам потребуются контейнеры:
nginx - веб страничка
php-fpm - статистика PsychoStats это древнючий код на PHP 5.4
mysql - статистике нужна БД, да и плагины CS некоторые тоже хотят БД
hlds16 - наш HLDS-сервер
Если в контейнерах какие-то файлы требуют частой правки, такие директории я подключаю к хостовой машине в папочку ~/share. Удобно потом расшарить эту папку и со своей домашней Windows-машины просто подкидывать нужные изменения напрямую.
Правда, в итоге, я чаще использовал VSCode-плагин SFTP: тыкнуть "upload" мне оказалось удобней чем водить мышкой по windows explorer-окнам.
Пошаговая инструкция на GitHub, ниже просто список действий, для понимания общей картины.
Поднимаем контейнеры
Закидываем содержимое директории ~/share на VPS-сервер. На это содержимое будут опираться контейнеры, там конфиги для nginx, Dockerfile для сборки контейнеров, конфиги и плагины HLDS, ...
Собираем свою docker image hlds16:latest, см. Dockerfile.
Поднимаем временный docker container, забираем из него к себе на хостовую машину директорию addons (сюда будем накидывать необходимые amxx-плагины в дальнейшем)
Поднимаем рабочий docker container hlds16 с привязкой к директории addons. Так же привязываем к хостовой машине директорию logs (логи потребуются страничке статистики).
Поднимаем docker container mysql с привязкой к директории /mnt/mysql (там можно складировать бэкапы БД).
Поднимаем docker container nginx с привязкой к директории /mnt/www (туда будем накидывать HTML/PHP файлы)
Собираем свою docker image php-fpm-my:54, см. Dockerfile.
Поднимаем docker container php-fpm-54 с привязкой к директории logs от контейнера hlds16, и /mnt/www от контейнера nginx.
С этого места у нас работает hlds + nginx + php-fpm + mysql.
Инициализируем сайт статистики
Распаковываем из zip-архива ~/cstrike необходимое в /mnt/www/ps. Теперь страничка доступна по URL http://65.108.82.45/ps/
Подменяем несколько кривых PHP-скриптов на исправленные, см. ~/cstrike/ps
Инсталируем сайт - http://65.108.82.45/ps/install/
Рассказываем сайту где смотреть логи http://65.108.82.45/ps/admin/logsources_edit.php - вписываем /mnt/cstrike/logs
Распаковываем из zip-архива ~/cstrike perl-скрипты парсера логов в /mnt/www/ps.stat_parser, вписываем атрибуты доступа к БД в /mnt/www/ps/stat_parser/stats.pl. Запускаем парсер в cron.
Доводим под себя сервер HLDS
Правим под себя server.cfg, motd.txt в директории ~/cstrike, закидываем в контейнер hlds16
Накидываем нужные плагины из ~/cstrike или из интернета в директорию addons
Включаем плагины в plugins.ini. Рестартуем контейнер hlds16
Итог
Инсталяция HLDS-сервера + Сайта статистики займет минут 15.
Доводка конфигов + выбор нужных плагинов (+ их настройка) займет несколько дней. Я выбрал только самые необходимые amxmodx:
Blue_Fade.sma - фоновая вспышка при поражении противника
amx_parachute.sma - парашют за $1000
damager.sma - показвает урон от наших выстрелов/гранат
map_chooser.sma - rtv голосование за смену карты
Такую конфигурацию считаю классической, минимально необходимой.