RE:NODE

Хостинг сервера Garry's Mod: на что смотреть, прежде чем платить

Автор Команда RE:NODE
16 мин чтения


Хороший хостинг для Garry's Mod - это в основном вопрос одного ядра CPU. Сервер выполняет Lua каждого аддона и физику каждого пропа в одном главном потоке, поэтому быстрое ядро с заявленной и реально соблюдаемой долей важнее любой другой строки в тарифной таблице. Дальше идут память, рассчитанная на вашу коллекцию аддонов, а не на число слотов, полный доступ к файлам, чтобы можно было править Lua и удалять аддоны, база MySQL в той же сети, если вы запускаете DarkRP или общий админ-мод, расположение рядом с игроками и честное описание того, что происходит во время атаки. «128 tick», «безлимитные слоты» и длинный список регионов - по большей части украшение.

Эта статья о том, как оценивать предложение. Установка сервера, строка запуска и server.cfg разобраны в настройке сервера Garry's Mod; доставка аддонов на компьютеры игроков - в Workshop-аддонах и FastDL; сам DarkRP - в руководстве по серверу DarkRP; поиск аддона, из-за которого сервер лагает, - в статье о лагах и ошибках Lua на сервере Garry's Mod. Здесь эти факты превращены в вопросы, которые стоит задать до оплаты.

Чего Garry's Mod требует от хостинга#

Сервер Garry's Mod - это srcds с игровой папкой garrysmod (Steam app id 4020), геймодом и грудой аддонов сверху. Движок старый и лёгкий; почти всё, что съедает ресурсы, - это контент, который написал кто-то другой. Отсюда и требования к хостингу:

  • Одно быстрое ядро для главного потока, где по очереди выполняются Lua-хуки, таймеры, think-функции сущностей и физика.
  • Память, которая соответствует списку аддонов. Модели, материалы и Lua каждого подключённого аддона сервер держит в памяти независимо от того, подключён один игрок или сорок.
  • Диск под базовую установку (несколько гигабайт), кеш Workshop, который растёт вместе с коллекцией, а также логи и файлы данных, которые пишут аддоны.
  • Один доступный порт: 27015 UDP передаёт и игровой трафик, и запросы браузера серверов. RCON по TCP и SourceTV - дополнения.
  • База данных: для DarkRP на нескольких серверах, для админ-модов, которые делят ранги между серверами, и для множества аддонов логирования, инвентаря и экономики, рассчитанных на MySQL.
  • Ваш контроль над файлами. Починить сервер Garry's Mod - это обычно отредактировать Lua-файл, удалить папку аддона или прочитать лог. Всё, что стоит между вами и файловой системой, замедляет любое исправление.

Трафик во время игры небольшой. Игроки замечают первое подключение: контент из Workshop приходит от Steam, а всё, что отдаётся через FastDL, - оттуда, куда вы его положили. Это вопрос контента, а не хостинга, и он разобран ниже.

CPU: однопоточная скорость и честная доля#

Именно здесь хостинг для Garry's Mod либо справляется, либо нет. Сервер должен уложить каждый тик в бюджет - около 15 мс при 66 тиках, 30 мс при 33, - и всё, что выполняется в главном потоке, расходует этот бюджет. Если аддон тратит 10 мс на тик в хуке Think, это две трети бюджета 66-тикового сервера, и никакое число дополнительных ядер их не вернёт. Лишние ядра помогают при загрузке, работе сети и операционной системе вокруг процесса; этот поток они быстрее не делают.

Поэтому вопросы касаются одного ядра:

  1. Насколько быстрое одно ядро? Современный десктопный процессор или серверный чип с высокой частотой заметно сокращает время тика. Старый многоядерный серверный процессор с низкой частотой может выглядеть внушительно на бумаге и всё равно медленно выполнять Lua. Если хостинг называет процессор, смотрите на однопоточную производительность, а не на число ядер.
  2. Сколько из него ваше? «2 vCPU» могут означать два гарантированных ядра, два потока, которые делят с толпой соседей, или долю, сжимающуюся в часы пик. Спросите, как соблюдается лимит. Скромный жёсткий лимит, который виден на графике, лучше щедрой цифры без гарантий - общий CPU и шумные соседи объясняют, почему негарантированный вариант подводит именно тогда, когда сервер полон.
  3. Видно ли его? График CPU относительно лимита тарифа и команда stats в игре показывают, не хватает ли серверу CPU или он расходует его впустую.

У графика есть ловушка. Сервер, упёршийся в 100% одного ядра на тарифе 2 vCPU, показывает 50% в сумме и выглядит спокойно. В статье как читать загрузку CPU игрового сервера показано, как заметить один перегруженный поток за ровной суммой. В Garry's Mod быстрее проверить stats в консоли сервера: если столбец fps падает ниже вашего tick rate, главный поток не успевает.

В RE:NODE CPU задаётся в процентах одного ядра - 150 это 1,5 vCPU - и жёстко ограничивается до купленной доли, один контейнер на сервер. Сервер на пределе работает медленно, но его не приостанавливают за это. Тарифы Garry's Mod идут от 0,75 vCPU на самом маленьком уровне до 2,5 на самом большом.

RAM по геймоду и числу аддонов#

Память - главная цифра в каждом тарифе Garry's Mod, а число слотов плохо показывает, сколько её нужно. Размер коллекции - ориентир получше. Реалистичная таблица:

СерверRAMvCPU
Sandbox, друзья, меньше 30 аддонов1-2 GB0.75-1
TTT, Murder или Prop Hunt, 16-24 игрока2-3 GB1-1.5
Sandbox со 100+ аддонов3-4 GB1.5-2
DarkRP, 32-40 игроков4-6 GB2-2.5
Любой геймод, коллекция из 200+ элементов4-6 GB2+

Несколько факторов определяют, где в каждом диапазоне вы окажетесь:

  • Число и тип аддонов. Паки пропов, транспорта и контент карт расходуют память один раз, при загрузке. Аддоны с тяжёлым Lua - инвентари, HUD с серверной логикой, системы NPC - расходуют память и CPU постоянно.
  • Геймод. Раундовые режимы вроде TTT регулярно перезапускают карту, что очищает сущности и удерживает память на ровном уровне. Серверы DarkRP и sandbox накапливают сущности, пропы и данные до следующего перезапуска, поэтому важна цифра перед ночным перезапуском, а не сразу после старта. Руководство по серверу TTT подробно описывает, что нужно этому геймоду.
  • Карты. Большая RP-карта с плотными пропами использует заметно больше, чем gm_flatgrass. Некоторым картам TTT и RP также нужен подключённый контент Counter-Strike: Source, который увеличивает расход диска и памяти.

Что это значит при сравнении предложений: покупайте под конец дня и проверяйте, что происходит на лимите. Некоторые хостинги позволяют серверу уходить в swap на диск, и нехватка памяти превращается в вечер подтормаживаний. Другие останавливают процесс. В RE:NODE сервер, дошедший до лимита памяти, останавливается и чисто перезапускается вместо swap, поэтому проблема с памятью проявляется как необъяснимый перезапуск примерно в одно и то же время каждый день, а не как медленный лаг. В любом случае вы должны знать, какое поведение покупаете.

Потолок 32 бит

Одна особенность Garry's Mod делает большие тарифы менее полезными, чем кажется. Стандартная ветка запускает 32-битный серверный процесс, который может адресовать примерно 3-4 GB независимо от того, сколько памяти в тарифе. Сервер с огромной коллекцией может падать с ошибками выделения памяти, пока панель показывает свободные гигабайты. Бета-ветка x86-64 снимает этот потолок, но требует 64-битных сборок каждого бинарного модуля в garrysmod/lua/bin/.

Поэтому, прежде чем платить за тариф на 8 GB для 32-битного сервера, спросите себя, сможет ли сервер их использовать. Хороший хостинг даёт выбрать ветку, а любой, кто продаёт тарифы Garry's Mod больше 4 GB, должен уметь сказать, какую ветку использует его установка.

Коллекции Workshop, FastDL и диск#

В Garry's Mod две системы контента, и хостинг влияет на них по-разному.

Серверная часть - то, что загружает сервер, - обычно это коллекция Workshop, подключаемая при старте:

bash
+host_workshop_collection 123456789 -authkey <steam_web_api_key>

Сервер скачивает и кеширует коллекцию при загрузке. Для этого нужен исходящий доступ к Steam, место на диске под кеш и строка запуска, которую действительно можно редактировать. Хостинг, где можно выбрать только из фиксированного списка аддонов или который переписывает ваши параметры запуска, усложняет всё без нужды. Кеш также замедляет запуск по мере роста коллекции, что важно, когда после сбоя или перезапуска игроки ждут.

Клиентская часть - то, что скачивают игроки, - это задача Steam для всего, что добавлено через resource.AddWorkshop, и задача FastDL для отдельных файлов, настроенных через resource.AddFile. FastDL - это обычный веб-сервер со сжатыми копиями ваших файлов, а sv_downloadurl указывает на него:

server.cfg
sv_downloadurl "https://fastdl.example.net/garrysmod/"sv_allowdownload 0

FastDL не обязан работать на игровом сервере, и обычно не должен. Небольшой веб-хостинг отдаёт статику куда лучше, чем srcds, и не пускает трафик загрузок к игровому процессу. При сравнении предложений проверьте, идёт ли к игровому тарифу веб-сервер или нужен отдельный, а если вы переходите в основном на контент Workshop, FastDL вам может вообще не понадобиться. В Workshop-аддонах и FastDL есть полная настройка, включая сжатие .bz2 и структуру папок, на которой многие спотыкаются.

В RE:NODE игровые тарифы не включают веб-сервер, но небольшой тариф веб-хостинга отдаёт FastDL с доменом и сертификатом, которые выпускаются и продлеваются автоматически через его proxy slot. Диск на тарифах Garry's Mod - от 10 GB до 40 GB на NVMe, чего с запасом хватает для большой коллекции и её кеша.

MySQL для DarkRP, админ-модов и логов#

Один сервер Garry's Mod прекрасно работает и на SQLite. DarkRP по умолчанию хранит деньги и принадлежащие игрокам двери в garrysmod/sv.db, ULX держит группы и баны в файлах данных, а многие аддоны пишут в тот же локальный sv.db. Для одного сервера этого достаточно, и включённая в тариф база не повод его выбирать.

MySQL нужен, когда:

  • Вы запускаете больше одного сервера и хотите делить деньги, ранги или баны между ними.
  • Этого требует аддон. Многие аддоны логирования, инвентаря, экономики и администрирования предлагают хранение в MySQL, а некоторые крупные построены вокруг него. SAM может хранить данные в MySQL; для ULX нужен отдельный аддон.
  • Вы хотите смотреть или править данные, пока сервер работает, из phpMyAdmin или клиента, а не останавливать сервер, чтобы открыть sv.db.

Garry's Mod обращается к MySQL через бинарный модуль - обычно mysqloo - в папке garrysmod/lua/bin/. Модуль должен соответствовать платформе и ветке сервера: gmsv_mysqloo_linux.dll для 32-битного Linux-сервера, gmsv_mysqloo_linux64.dll для x86-64. Расширение .dll в Linux - это правильно, и это всех сбивает с толку. Хостинг, который не позволяет загружать файлы в lua/bin или запускает не ту ветку, которую вы ожидаете, ломает это незаметно: DarkRP откатывается на SQLite, и деньги будто бы обнуляются.

Три вопроса к любому предложению:

  1. База включена в тариф или оплачивается отдельно? Это меняет сравнение двух внешне похожих тарифов.
  2. Где она работает? Аддоны делают много мелких запросов. База в той же сети отвечает меньше чем за миллисекунду; бесплатная удалённая на другом континенте добавляет десятки миллисекунд к каждому запросу, а это превращается в подвисания, когда главный поток ждёт ответа.
  3. Есть ли резервные копии и можно ли её забрать? Базу, которую нельзя выгрузить, нельзя и перенести.

В каждом тарифе RE:NODE для Garry's Mod есть один слот базы данных, который создаётся из панели со сгенерированными хостом, пользователем и паролем, и кнопка «Open in phpMyAdmin», которая входит по одноразовому токену. Если вы хотите, чтобы база работала на собственных ресурсах, MySQL 8.4 LTS также продаётся отдельно в разделе хостинга баз данных. Администрирование - группы, права и выбор между ними - описано в статье ULX и SAM.

Tick rate и что значат предложения с «высоким tick»#

Tick rate задаётся параметром -tickrate в строке запуска. Серверы Garry's Mod обычно работают на 33 или 66. Повышение примерно вдвое увеличивает стоимость каждого тика для CPU и никак не помогает серверу, который уже не успевает.

ГеймодРазумный tick rateПочему
Sandbox, DarkRP, roleplay33Много сущностей, точность прицеливания менее важна
TTT, Murder, Prop Hunt33-66Умеренное число сущностей, немного стрельбы
Боевые режимы66Важна регистрация попаданий

Поэтому «хостинг Garry's Mod со 128 tick» - странная вещь для рекламы. Любой хостинг позволит вписать -tickrate 128; вопрос в том, успеет ли одно ядро завершить тик быстрее чем за 8 мс с вашими аддонами, а для сервера DarkRP это почти наверняка невозможно. Тариф, продаваемый по tick rate, продаёт параметр запуска. Вам нужна свобода выставлять частоту самому и CPU, достаточно быстрый, чтобы её держать. Более подробный разбор - в статье что на самом деле значит tick rate.

Расположение, задержка и DDoS#

Выбирайте расположение по тому, где ваши игроки. Source интерполирует движение других игроков, поэтому умеренная задержка хорошо скрыта, но при задержке свыше примерно 100 мс перестрелки в TTT начинают казаться несправедливыми, а пропы в sandbox отстают от игрока, который их несёт. Большинство сообществ Garry's Mod региональные; поместите сервер посередине между местами, где живут постоянные игроки, и попросите нескольких из них вечером пропинговать тестовый адрес хостинга до оплаты. В статье задержка, джиттер и потеря пакетов объясняется, на что смотреть кроме среднего значения.

RE:NODE работает в одном расположении, в Германии, на оборудовании, которым мы управляем сами. Это подходит игрокам в Европе и рядом, и это неверный выбор для сообщества в Северной Америке или Азии.

Атаки - вторая половина вопроса о сети. Серверы Source давно являются целью для флуда запросами и атак с отражением, а сообщества DarkRP притягивают обиды. Фильтрация перед сервером хорошо отбрасывает объёмный флуд, трафик отражения и повреждённые пакеты. Она плохо отличает атаку, похожую на настоящих клиентов, от настоящих клиентов. Читая заявление хостинга, ищите, что фильтруется, простыми словами, что происходит, когда фильтрации недостаточно (некоторые хостинги отправляют адрес в null-route во время крупной атаки, и сервер уходит в офлайн), и отсутствие обещаний нулевого простоя. Хостинг, обещающий отсутствие простоя при любой атаке, продаёт вам фразу, а не сервис. В статье DDoS-атаки на игровые серверы разобраны их категории.

В RE:NODE формулировка именно такая: фильтрация выше по сети, которая отбрасывает очевидный объёмный флуд, а также трафик отражения и повреждённые пакеты. Атаки, похожие на настоящих игроков, не фильтруются.

Часть защиты - на вас. Делайте rcon_password длинным или не задавайте его вовсе и не открывайте TCP 27015, если RCON не нужен - почему, объясняет статья безопасный RCON. Многие «атаки» на небольшие серверы оказываются аддоном с бэкдором или уязвимым net-сообщением, которое не поймает никакой сетевой фильтр.

Функции панели, которые действительно важны#

Большинство панелей хостинга на скриншотах выглядят одинаково. Вот функции, которыми вы будете пользоваться каждую неделю:

  • Консоль без фильтров с историей. Ошибки Lua заявляют о себе именно там, с путём к файлу аддона, который их выбросил. Консоль, скрывающая или обрезающая вывод, скрывает и ваши проблемы.
  • Полный доступ к файлам, включая SFTP. Удалить аддон - значит удалить папку; починить - отредактировать Lua-файл. Загружать пак карт через форму в браузере мучительно, через SFTP - обычное дело. Подробности в статье SFTP и файловый менеджер.
  • Редактируемая строка запуска. ID коллекции, геймод, карта, tick rate, максимум игроков и ветка - всё это живёт там. Панель, которая генерирует её из короткой формы и отбрасывает всё нераспознанное, - проблема.
  • Перезапуски по расписанию. Серверам sandbox и DarkRP полезен ночной перезапуск. Расписание, которое умеет отправить предупреждение, подождать и затем перезапустить, ценнее любой галочки «автоперезапуск при сбое» - тайминг разобран в статье расписания перезапуска, которые помогают.
  • Резервные копии вне машины, которые вы можете восстановить сами и которые охватывают garrysmod/data, sv.db и ваш конфиг. Копия, лежащая рядом с тем, что она защищает, не защитит от потери сервера.
  • Subusers. Серверы Garry's Mod ведут команды персонала. Разработчику нужны файлы; модератору может хватить консоли. Раздача пароля от аккаунта - так серверы и теряют.

В RE:NODE у каждого тарифа одна и та же панель: живая консоль с историей, файловый менеджер с редактором в браузере, SFTP с отдельными учётными данными для каждого сервера, вкладка Schedules, которая по порядку выполняет консольные команды, резервные копии и действия с питанием, слоты резервных копий, хранящиеся вне машины, и subusers с доступом только к консоли или только к файлам. Моды и аддоны вы устанавливаете сами - через файловый менеджер, SFTP или Workshop; списка разрешённых аддонов нет, как нет и установщика аддонов в один клик.

Тревожные признаки в предложениях хостинга Garry's Mod#

Одни предложения просто дорогие. Другие показывают, как хостинг работает.

  • «Безлимитные слоты». Garry's Mod ограничивает -maxplayers значением 128, а реальный предел - главный поток - наступает намного раньше. «Безлимит» значит, что никто не проверял.
  • «Бесплатные премиум-аддоны» или «полный пакет DarkRP в комплекте». Платные аддоны Garry's Mod продаются каждому покупателю отдельно, обычно через маркетплейсы Garry's Mod с проверкой лицензии. Бесплатный набор таких аддонов почти всегда утёкший, а утёкшие аддоны - известный путь для бэкдоров, дающих кому-то другому контроль над сервером на уровне RCON. Что делать, если сервер взломали - страница, которая вам не должна понадобиться.
  • Цифра vCPU без объяснений. «До 4 ядер» без слова о том, как это соблюдается, обычно означает то, что осталось.
  • Большие тарифы без слова о ветке. 8 GB на 32-битном сервере - это 4 GB, которыми нельзя воспользоваться.
  • Нельзя загружать бинарные модули или редактировать строку запуска. Вы теряете MySQL, 64-битную ветку и половину полезных аддонов.
  • Нет базы данных или она на другом континенте. Расход, который обнаруживается после недели подвисаний.
  • Нет резервных копий или они на том же диске. См. резервные копии, которые действительно восстанавливаются.
  • Обещания DDoS без простоя и SLA 100%. Никто их не выполняет, и невольно задумываешься, что ещё на странице - декорация.

Ничто из этого не доказывает, что хостинг нечестный. Некоторые признаки говорят о продукте, сделанном для другого клиента. Но сообщество живёт на первом хостинге месяцами, а переезд потом - это выходные копирования папок с данными и перенаправления игроков.

Чек-лист перед оплатой#

В том порядке, в котором стоит проверять:

  1. Расположение рядом с большинством игроков, подтверждённое пингом от нескольких из них.
  2. CPU: заявленная доля быстрого ядра, которая соблюдается и видна на графике.
  3. Память под вашу коллекцию аддонов в конце дня, с известным поведением на лимите и известной веткой.
  4. Строка запуска и файлы полностью редактируются, SFTP доступен, lua/bin доступна для записи.
  5. База данных в той же сети, если она нужна, включена в тариф или учтена в сравнении цен.
  6. FastDL продуман: только Workshop или небольшой веб-хостинг рядом с игровым сервером.
  7. Резервные копии вне машины, которые вы можете восстановить сами.
  8. Честное описание DDoS-защиты и канал поддержки, который вы проверили.

О том, что относится к любой игре, читайте в статьях как выбрать хостинг игровых серверов и требования игровых серверов к CPU.

FAQ#

Сколько RAM нужно серверу Garry's Mod?

1-2 GB для sandbox или TTT с небольшой коллекцией, 3-4 GB, когда аддонов становится больше сотни, и 4-6 GB для загруженного сервера DarkRP. Измеряйте непосредственно перед ночным перезапуском, а не после старта, и помните, что 32-битный сервер по умолчанию не может использовать намного больше 4 GB.

Сервер DarkRP требовательнее, чем TTT?

Обычно да. TTT сбрасывает карту каждый раунд, что удерживает число сущностей и память под контролем. DarkRP накапливает пропы, принтеры и данные игроков всю сессию, а его аддоны, как правило, тяжёлые по Lua, поэтому при том же числе игроков ему нужно и больше памяти, и более быстрый главный поток.

Нужен ли MySQL для сервера Garry's Mod?

Для одного сервера нет. SQLite в sv.db хорошо справляется с DarkRP и большинством аддонов. MySQL становится оправданным, когда несколько серверов делят деньги, ранги или баны или когда нужный вам аддон построен вокруг него.

Станет ли сервер плавнее при более высоком tick rate?

Только если CPU его выдержит. Сервер, который уже опускается ниже своего tick rate в stats, на более высоком работает хуже. Сначала исправьте дорогие аддоны, а затем повышайте частоту, если есть запас.

Можно ли разместить FastDL на том же сервере?

Можно, но небольшой отдельный веб-сервер справляется лучше и не пускает трафик загрузок к игровому процессу. Многие серверы теперь используют только контент Workshop, и FastDL им вообще не нужен.

Можно ли потом перенести сервер Garry's Mod на другой хостинг?

Да. Скопируйте garrysmod/addons, garrysmod/data, garrysmod/cfg, sv.db и все бинарные модули, выгрузите и импортируйте базу MySQL, если она у вас есть, проверьте, что ветка совпадает, и направьте игроков на новый адрес. Остальное описано в статье перенос сервера без потери игроков.