Выделенный игровой сервер - это серверный код игры, запущенный на отдельной машине, за которой никто не играет. Он хранит мир, решает, что считается правдой, и отправляет каждому подключённому игроку его кусок этого мира. Ничто не зависит от того, что кто-то один сейчас в сети, чужой FPS не становится симуляцией для всех, а мир по-прежнему на месте в четыре утра, когда кому-то захотелось полчаса поиграть перед работой. В этом вся идея. Всё, что ниже, - о том, чего это стоит, что для этого нужно и что вам действительно придётся делать, когда сервер уже работает.
Практически это выглядит так: безголовая программа, от 512 МБ до 16 ГБ памяти в зависимости от игры, одно-два быстрых (а не многочисленных) ядра процессора, несколько гигабайт диска, один-два открытых порта и файл конфигурации. Сложности не в установке. Они в обновлениях, сохранениях и в том, что игровой сервер - это программа, которая должна выживать без чьего-либо присмотра.
Listen-серверы, peer-to-peer и выделенные серверы#
Многопользовательские игры выбирают одну из трёх схем, и от выбора зависит почти всё, что касается хостинга.
| Модель | Кто хранит мир | Затраты ложатся на | Ломается, когда |
|---|---|---|---|
| Peer-to-peer | Все клиенты, по согласованию | Соединение каждого | У кого-то плохая задержка |
| Listen-сервер | Игровой клиент одного игрока | ПК и исходящий канал хоста | Хост выходит из игры |
| Выделенный сервер | Отдельный безголовый процесс | Машину, на которой он работает | Ломается машина |
Listen-сервер - это то, что вы получаете от Host and Play в Terraria, Open to LAN в Minecraft, внутриигрового хоста мира в Valheim или Create Server в играх на Source. Это тот же самый код, что и у выделенного сервера, приклеенный к клиенту, который ещё и рисует игру. Он бесплатный и запускается за десять секунд, но у него три проблемы, которые никуда не денутся: у хоста нулевая задержка, а у остальных такая, какую позволяет исходящий канал хоста; мир существует, только пока открыта игра хоста; и машина хоста делает две работы сразу. В загруженный вечер хост переключается в браузер, и это чувствуют восемь человек.
Peer-to-peer реже встречается в играх с постоянным миром и часто - в сессионных: файтингах, некоторых кооперативных шутерах, старых RTS. Обычно и там один из игроков всё равно назначается хостом, поэтому существует «миграция хоста» и поэтому она обычно неприятна.
Выделенный сервер убирает игрока из уравнения. Издатель выпускает вторую программу без рендера и звука: valheim_server.x86_64, srcds_linux, PalServer.sh, server.jar, 7DaysToDieServer.x86_64. Она запускается из командной строки, пишет в стандартный вывод и администрируется через консоль или RCON, а не через меню. Почти всегда она бесплатна, даже когда сама игра платная, и почти всегда доступна под Linux, поэтому её хостинг стоит несколько долларов, а не цену десктопа с Windows.
Что на самом деле работает на машине#
Уберите маркетинг, и игровой сервер окажется циклом. Он просыпается через фиксированный интервал, читает всё, что пришло от клиентов с прошлого раза, продвигает симуляцию на один шаг, решает, что каждому клиенту позволено знать, и отправляет это. Затем повторяет. Интервал - это tick rate: 20 в секунду у Minecraft, 30, 64 или 128 у соревновательных шутеров в зависимости от игры и конфига, 60 у многих игр на Unreal. Почему большее число не обязательно лучше, объясняет статья что на самом деле значит tick rate.
Для хостинга важны два следствия. Во-первых, этот цикл в большинстве игр почти целиком однопоточный, поэтому одно быстрое ядро лучше четырёх медленных. Во-вторых, у цикла есть бюджет: при 20 тиках в секунду на каждый тик отводится 50 миллисекунд. Если он занимает 70, сервер отстаёт, и все видят это как рывки, запоздавшие попадания или блоки, которые возвращаются после того, как вы их сломали.
Вот что находится между мышью игрока и файлом, в котором живёт мир, на типичном арендованном сервере:
DNS-имя необязательно и нужно лишь затем, чтобы людям не набирать четыре числа. Контейнер - это то, что даёт каждому клиенту хостинг с панелью: изолированную файловую систему, лимит памяти, долю процессора. Игровой процесс - единственная часть, которую написал разработчик игры. Мир на диске - единственная часть, которую нельзя заменить.
Последняя строка объясняет, почему эта статья снова и снова возвращается к сохранениям и бэкапам. У игрового сервера нет журнала транзакций базы данных. Он держит мир в памяти и периодически записывает его, а значит, у каждого игрового сервера есть окно - обычно от пяти до тридцати минут, - в котором жёсткая остановка теряет всё.
Дома, на VDS или на игровой панели#
Три способа запустить выделенный сервер, и это действительно разные работы.
| Вариант | Вы управляете | Хорош для | Подвох |
|---|---|---|---|
| Ваш ПК или запасная машина | Всем | Обучения, LAN, тестов | Исходящий канал, CGNAT, электричество, ваш домашний IP |
| VPS или VDS | ОС и всем выше | Любой игры, нескольких игр, необычных настроек | Теперь вы сисадмин |
| Хостинг с игровой панелью | Только игрой | Запустить одну игру и не дать ей упасть | Нет root, один сервер - одна игра |
Дома бесплатно, пока не перестаёт быть бесплатным. Людей останавливают две вещи: исходящая пропускная способность (сервер отправляет намного больше, чем получает, а большинство домашних подключений устроены наоборот) и carrier-grade NAT, когда у вашего роутера нет публичного адреса, на который можно пробросить порт. Добавьте электричество, шум, то, что ваш домашний IP теперь известен посторонним, и то, что машина должна работать, пока вас нет. Честное сравнение есть в статье свой игровой сервер дома или аренда.
VPS или VDS даёт root и чистую машину с Debian или Ubuntu. Вы ставите SteamCMD, пишете unit для systemd, настраиваете файрвол, организуете бэкапы и следите за обновлениями ОС. Это верный ответ, когда вам нужно несколько игр на одной машине, игра, которую никто не предлагает, или софт, которого не будет в контейнере. И неверный, если фраза «пишете unit для systemd» стала причиной, по которой вы бросили читать. Учтите ловушку терминологии: «выделенный сервер» в смысле этой статьи - программа, а выделенные машины в смысле хостингового продукта - железо. Эти два значения постоянно сталкиваются.
Хостинг с игровой панелью запускает каждый сервер в собственном контейнере с уже установленной игрой, уже выделенными портами и веб-консолью вместо SSH. Вы отказываетесь от root и возможности запускать на машине что угодно. Для одной игры и одной компании друзей такой обмен почти всегда правильный. Решение расписано в статье VDS или игровая панель, а что за механизм лежит под большинством панелей, объясняет статья что такое панель Pterodactyl.
Что нужно выделенному игровому серверу#
Память - число, о котором спрашивают чаще всего и которое сильнее всего различается между играми. Это рабочие цифры для группы примерно из десяти человек на чистой установке:
| Игра | RAM на ~10 игроков | CPU | Растёт вместе с |
|---|---|---|---|
| Terraria | 0.5-1 GB | 1 ядро | Размером мира, числом NPC |
| Counter-Strike 2 | 1-2 GB | 1-2 быстрых ядра | Плагинами, tick rate |
| Minecraft (Paper) | 2-4 GB | 1-2 быстрых ядра | Дальностью прорисовки, чанками, плагинами |
| Valheim | 2-4 GB | 1 быстрое ядро | Исследованной областью, постройками, изменением рельефа |
| Factorio | 1-3 GB | 1 очень быстрое ядро | Размером фабрики, а не числом игроков |
| Project Zomboid | 3-6 GB | 2 ядра | Загруженными ячейками карты, числом зомби |
| Palworld | 8-16 GB | 2-4 ядра | Базами, палами, наигранным временем |
| 7 Days to Die | 8-12 GB | 2-4 ядра | Размером мира, разбросом игроков |
Четыре правила, стоящие за этой таблицей:
- Память занимается, а не используется. Серверы на Java особенно склонны расти до размера выданной кучи и только потом собирать мусор. Сервер Minecraft, занявший 90% кучи в 4 ГБ, обычно в порядке; тот же сервер, упёршийся в лимит контейнера и умерший, - нет. Та же ловушка на стороне приложений разобрана в статье лимиты памяти Node простыми словами.
- С процессором вопрос в тактовой частоте, а не в числе ядер. Почти у любого игрового сервера есть один горячий поток. Четыре ядра для игры, использующей 1.2 из них, ничего вам не дадут. Как понять, что именно у вас закончилось, объясняет статья CPU или RAM для игровых серверов.
- Диск - это в основном установка. Игры на движке Source и крупные survival-проекты хотят 20-60 ГБ ещё до первого сохранения; Minecraft и Valheim - два-три. Скорость важна при сохранении и генерации мира, и именно там заметно то, о чём говорит статья что на самом деле меняет NVMe, и больше нигде.
- Трафика мало, а задержка не мала. Большинство игр отправляет от 30 до 300 КБ/с на игрока. Десять игроков не затруднят ни один современный канал. То, что люди называют лагом, почти всегда оказывается задержкой, джиттером или потерей пакетов, а эти три вещи - разные проблемы с разными способами лечения.
Порты, адреса и как игроки находят сервер#
Сервер - это IP-адрес и порт. Большинству игр нужен второй порт для запросов - небольшой протокол, которым браузеры серверов и средства мониторинга спрашивают «кто ты, какая карта, сколько игроков», не заходя на сервер.
| Игра | Порт | Протокол | Примечание |
|---|---|---|---|
| Minecraft Java | 25565 | TCP | И UDP 25565, если включён query |
| Valheim | 2456, 2457 | UDP | Игровой порт и игровой порт + 1 |
| Source / CS2 | 27015 | UDP | То же число по TCP для RCON |
| Palworld | 8211 | UDP | Плюс порт REST/RCON, если включён |
| Terraria | 7777 | TCP | |
| Factorio | 34197 | UDP | |
| Project Zomboid | 16261 | UDP | Прямое подключение может использовать 16262 |
| 7 Days to Die | 26900 | TCP + UDP | Диапазон UDP 26900-26902 |
Из этой таблицы постоянно вырастают два вида отказов. Первый - правило файрвола для TCP при игре на UDP: получается сервер, который запускается, бодро пишет в лог и никого не принимает. Второй - открыт игровой порт, но не порт запросов: получается сервер, к которому можно подключиться по IP, но который не появляется ни в одном браузере. Оба случая разобраны в статье порты игрового сервера.
Игроки находят сервер одним из четырёх способов: набирают IP, пользуются собственным браузером серверов игры на основе мастер-сервера, заходят через стороннюю listing-площадку или получают код подключения в Discord. Для браузера обычно нужен открытый порт запросов и, для игр Steam, часто токен входа игрового сервера - когда он нужен, объясняет статья токены игровых серверов Steam. Если вам нужно имя вместо адреса, это A-запись, указывающая на IP сервера, а для Minecraft запись SRV позволяет полностью спрятать нестандартный порт: см. как привязать домен к игровому серверу и SRV-записи для Minecraft.
Установка и файлы, которые её настраивают#
Для игр Steam установка - это SteamCMD и app id, обычно с анонимным входом:
$ steamcmd +force_install_dir /home/container +login anonymous \ +app_update 896660 validate +quitГорстка игр отказывается от анонимной загрузки и требует настоящий аккаунт Steam, а некоторым перед запуском сервера нужен собственный ключ доступа. App id и синтаксис бета-веток есть в статье SteamCMD простыми словами. Minecraft - исключение из всего этого: скачайте jar, запустите один раз, примите EULA в eula.txt, запустите снова (весь первый запуск).
Конфигурация затем живёт в одной из четырёх форм, в зависимости от игры:
- Файл «ключ-значение», который сервер читает при запуске:
server.properties,PalWorldSettings.ini,serverconfig.xml,ServerConfig.toml. - Скрипт из консольных команд, выполняемый при запуске:
server.cfgв играх на Source,autoexec.cfg,server.cfgу FiveM. - Только аргументы запуска без всякого файла - самый известный случай Valheim, и люди, пришедшие из Minecraft, двадцать минут ищут несуществующий конфиг.
- Переменные окружения: именно так хостинги на контейнерах обычно выводят аргументы запуска, чтобы их можно было править в форме, а не в командной строке.
Почти каждая игра создаёт конфиг при первом запуске, а не поставляет его готовым, поэтому порядок такой: запустить сервер, дать ему упасть или простаивать, остановить, отредактировать созданные им файлы, запустить снова. Если править конфиг на работающем сервере, а потом перезапускать штатно, правки обычно пропадают: большинство серверов записывают конфиг обратно при остановке.
Как поддерживать его в живых#
Установка сервера занимает вечер. Эксплуатация - это и есть работа, и сводится она к четырём привычкам.
Обновления. Версии клиента и сервера должны совпадать почти в любой игре, так что в день выхода патча ваш сервер недоступен, пока не обновится. Для чистой игры это нормально, для модифицированной - проблема: моды ещё не будут готовы. Модифицированный сервер не должен обновляться автоматически в день патча: храните копию рабочей папки модов и прочитайте статью что делать, когда обновление мода всё ломает до того, как она понадобится, а не после.
Бэкапы. Мир - это одна папка, иногда один файл, и он пишется по таймеру. Бэкап на том же диске, что и мир, защищает от неудачного сохранения и больше ни от чего. Делайте настоящую копию, по расписанию, в другое место и время от времени восстанавливайте её, чтобы убедиться, что она не пустая. Две статьи, которые стоит прочитать именно в таком порядке: бэкапы, которые действительно восстанавливаются и проверка восстановления до того, как оно понадобится.
Перезапуски. Долгоживущие игровые серверы накапливают всякое: сущности, загруженные чанки, утечки в плагинах, фрагментацию памяти. Плановый перезапуск в час, когда никто не играет, всё это сбрасывает и ничего не стоит, если перед ним выполняется бэкап, а игроки предупреждены. Время выбирать помогут статьи расписания перезапусков, которые помогают и cron-выражения простыми словами.
Внимание. Кто-то должен заметить, когда всё сломалось. График памяти, консоль, которую вы умеете читать, и оповещение о падении процесса - минимум; см. мониторинг, который что-то сообщает и как читать график нагрузки сервера.
На RE:NODE каждый сервер - это один контейнер на оборудовании в Германии с собственными лимитами памяти и процессора, а установка завершена до того, как вы впервые увидите консоль. Слоты бэкапов и вкладка Schedules есть в каждом тарифе, так что ночной бэкап и перезапуск из описанного выше - это две формы, а не два скрипта. Если сервер упирается в лимит памяти, он останавливается и запускается заново начисто, а не остаётся работать со swap, а наблюдатель раз в пару минут проверяет, не упал ли сервер и не перезапускается ли он по кругу: три перезапуска за час поднимают предупреждение и автоматически открывают тикет.
Что идёт не так и что это обычно значит#
Сервер запускается, но никто не может подключиться. Порт или протокол. Проверьте, что правило для UDP, если игра на UDP, что порт в конфиге совпадает с тем, который на самом деле открыт, и попробуйте зайти извне своей сети.
Работает и доступен по IP, но не появляется в браузере. Порт запросов закрыт, публичный флаг выключен или нет токена Steam. Списки серверов к тому же медленные: десять минут до появления новой записи - это норма.
"Incompatible version" после обновления. Клиент и сервер на разных сборках. Обновите сервер; если он с модами, сначала дождитесь модов.
Тормозит при восьми игроках, хотя график CPU показывает 35%. Этот график - среднее по ядрам, а игра использует одно. Единственный горячий поток забит до предела, хотя суммарно всё выглядит простаивающим.
Память растёт весь день, а потом сервер сам перезапускается. Либо утечка, либо нормальный рост, который наконец дошёл до лимита. Рост ожидаем по мере исследования мира; еженедельный перезапуск его сглаживает. Если перезапуск автоматический и повторяется, статья почему ваш игровой сервер постоянно перезапускается покажет строки лога, по которым видно, что из двух это было.
Всё было нормально, пока не зашёл один игрок. В играх, где симуляцию ведёт клиент, - самый яркий пример зоны Valheim - один игрок с плохим соединением может сделать область вокруг себя неиграбельной для всех остальных. Это не вина сервера, и никакая дополнительная RAM этого не исправит.
FAQ#
Выделенный сервер - это то же самое, что выделенный хостинг?
Нет, и путаница между ними вполне реальна. Выделенный игровой сервер - это программа: игра, запущенная без игрока. Выделенный хостинг - это целая физическая машина, сданная в аренду одному клиенту. Выделенный игровой сервер можно запустить и в общем контейнере за несколько долларов в месяц, и большинство так и делает.
Нужен ли выделенный сервер для двух-трёх друзей?
Технически нет: подойдёт listen-сервер. Но вы захотите его в первый же раз, когда кому-то понадобится поиграть, пока хост спит, или когда машина хоста начнёт тормозить во время рейда. Самые маленькие тарифы для нетребовательных игр начинаются с 1-2 ГБ, чего в большинстве игр хватает небольшой группе.
Нужна ли серверу видеокарта?
Нет. Серверные сборки безголовые: без рендера, без звука, без окна. Поэтому они работают на Linux-машинах вообще без GPU и требуют намного меньше железа, чем клиент.
Сколько игроков вмещает один сервер?
Это зависит от игры гораздо сильнее, чем от железа. Valheim по замыслу ограничен десятью; предел Minecraft скорее практический, чем жёсткий, и зависит от дальности прорисовки и плагинов; некоторые шутеры настроены на 64. Арифметику разбирает статья сколько игроков помещается на сервере.
Можно ли запустить две игры на одном сервере?
На VDS - да, с раздельными портами и раздельными пользователями. На хостинге с панелью - нет: один контейнер запускает одну игру, а вторая игра означает второй сервер. Это намеренная граница изоляции, а не способ продать больше: сбой одной игры не может утащить за собой другую.
Что будет с моим миром, если я перестану платить?
Он будет удалён вместе с бэкапами, как у практически любого хостинга. Скачайте копию папки мира, прежде чем что-либо отменять. Это единственный файл, который нельзя восстановить.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.