Каждый игровой сервер на Unreal Engine построен по одному скелету, какая бы игра ни была сверху: бинарник без графики с именем <Project>Server, настройки в файлах .ini в <Project>/Saved/Config/LinuxServer/ или WindowsServer/, игровой трафик на UDP 7777, если не указано иное, отдельный query-порт Steam, логи в Saved/Logs, сохранения в Saved/SaveGames или в отдельной папке игры рядом, и параметры запуска, записанные как URL карты с парами ?key=value, за которыми идут -flags. Выучите эту структуру один раз, и Palworld, ARK, Satisfactory, Squad, Conan Exiles, Insurgency: Sandstorm, Abiotic Factor и The Isle перестанут быть восемью отдельными головоломками. Правило, которое избавляет от большинства огорчений: останавливайте сервер, прежде чем править его ini-файлы, потому что многие серверы на Unreal записывают их обратно при остановке.
Какие игры сделаны на Unreal и почему это важно#
Зная движок, вы понимаете, где искать, ещё до того, как прочитали хоть одну страницу документации игры.
| Игра | Движок | Папка проекта | Папка конфигов сервера |
|---|---|---|---|
| Palworld | Unreal 5 | Pal | Pal/Saved/Config/LinuxServer/ |
| ARK: Survival Ascended | Unreal 5 | ShooterGame | ShooterGame/Saved/Config/WindowsServer/ |
| Satisfactory | Unreal 5 | FactoryGame | FactoryGame/Saved/Config/LinuxServer/ |
| Abiotic Factor | Unreal 5 | AbioticFactor | AbioticFactor/Saved/Config/WindowsServer/ |
| Squad | Unreal | SquadGame | SquadGame/ServerConfig/ плюс Saved/Config |
| Conan Exiles | Unreal 4 | ConanSandbox | ConanSandbox/Saved/Config/WindowsServer/ |
| Insurgency: Sandstorm | Unreal 4 | Insurgency | Insurgency/Saved/Config/LinuxServer/ |
| The Isle (Evrima) | Unreal | TheIsle | TheIsle/Saved/Config/LinuxServer/ |
Не каждая survival-игра сделана на Unreal. Valheim, Rust, 7 Days to Die, Unturned, Sons of the Forest и V Rising - игры на Unity, с другими соглашениями; у Enshrouded собственный движок. Killing Floor 2 сделана на гораздо более старом Unreal Engine 3, где структура конфигов другая. Если у сервера есть папка Binaries и папка Content/Paks, полная файлов .pak, это Unreal 4 или 5.
Структура папок#
Типичная установка сервера на Unreal выглядит так:
PalServer/ PalServer.sh launcher script Pal/ Binaries/Linux/PalServer-Linux-Shipping Content/Paks/Pal-LinuxServer.pak the game's content Saved/ Config/LinuxServer/ your settings Engine.ini Game.ini GameUserSettings.ini PalWorldSettings.ini Logs/Pal.log current log SaveGames/ worlds Crashes/ crash reportsСкрипт или .exe верхнего уровня обычно - тонкий лаунчер, который запускает настоящий бинарник в Binaries/<Platform>/ с теми же аргументами. Имя бинарника у релизных сборок заканчивается на -Shipping. На Windows аналог - Binaries/Win64/<Project>Server-Win64-Shipping.exe, а папка конфигов - WindowsServer вместо LinuxServer.
На этой последней детали попадаются те, кто копирует конфиг из руководства для Windows на Linux-сервер: файл кладётся в LinuxServer, а не в WindowsServer. Правильный файл в папке не той платформы просто никогда не читается.
Как наслаиваются ini-файлы#
Unreal читает настройки слоями, и побеждает последний слой:
- Значения движка по умолчанию, вкомпилированные или поставляемые в собственных файлах движка
Base*.ini. - Значения проекта по умолчанию -
DefaultEngine.ini,DefaultGame.iniи так далее, - которые поставляет разработчик, обычно упакованными внутрь файлов.pak, где их не отредактировать. - Сохранённая конфигурация -
Saved/Config/<Platform>Server/*.ini, - которая принадлежит вам.
Обычно вы трогаете только третий слой. Настройка, добавленная туда, переопределяет значение проекта по умолчанию, если вы точно указали имя секции. Имена секций - это пути скриптов:
[/Script/OnlineSubsystemUtils.IpNetDriver]NetServerMaxTickRate=30MaxClientRate=100000MaxInternetClientRate=100000Файлы, которые вам встретятся:
| Файл | Типичное содержимое |
|---|---|
Engine.ini | Сеть, тикрейт, рендеринг и подсистемы движка |
Game.ini | Правила игрового режима, часто расширенные настройки геймплея |
GameUserSettings.ini | Имя сервера, пароли, основные настройки геймплея |
| Свой файл игры | PalWorldSettings.ini, ServerSettings.ini и подобные |
Многие игры поставляют шаблон для своего файла. Palworld кладёт в корень установки DefaultPalWorldSettings.ini, который вы копируете в Saved/Config/LinuxServer/PalWorldSettings.ini и там правите; сам шаблон не читается. Ключи своих игр разбирают руководство по настройкам сервера Palworld и руководство по настройке ARK: Survival Ascended.
Правки, которые исчезают
Игры на Unreal обычно сохраняют GameUserSettings.ini, а иногда и другие файлы при остановке, записывая то, что работающий сервер держит в памяти. Правите при работающем сервере - и при остановке ваше изменение будет перезаписано. Порядок всегда такой:
- Остановите сервер и дождитесь, пока он завершится.
- Отредактируйте файл.
- Запустите сервер.
Если правка всё равно исчезает, возможно, сервер не смог её разобрать и записал значения по умолчанию, или панель хостинга принудительно задаёт этот ключ при каждом запуске. Правила синтаксиса INI и полный список причин, по которым правки не держатся, есть в статье о форматах конфигов игровых серверов.
Параметры запуска: URL и флаги#
Командная строка сервера на Unreal состоит из двух частей. Сначала, необязательно, URL карты: имя карты, затем опции через ?. Потом флаги через дефис.
$ ./ShooterGameServer TheIsland_WP?listen?SessionName="My Ark"?MaxPlayers=20 \ -port=7777 -QueryPort=27015 -logАктивнее всего URL использует ARK - многие настройки там могут стоять либо в URL, либо в GameUserSettings.ini. Palworld и Satisfactory им почти не пользуются и полагаются на флаги и ini-файлы.
Флаги, которые встречаются во многих играх на Unreal:
| Флаг | Что делает |
|---|---|
-port=7777 | Игровой порт (UDP) |
-QueryPort=27015 | Query-порт Steam для браузера серверов, если игра его поддерживает |
-MultiHome=<ip> | Привязка к конкретному адресу на машине с несколькими адресами |
-log | Писать лог в консоль, а не только в файл |
-unattended | Никогда не ждать ввода пользователя в диалогах и запросах |
-ini:<File>:[<Section>]:<Key>=<Value> | Переопределить одно значение ini из командной строки |
Переопределение -ini: используют редко, а на панели оно очень удобно, потому что задаёт значение, не трогая файл, который сервер перезаписывает. Документация Satisfactory использует его для сетевых настроек, например -ini:Engine:[/Script/Engine.Player]:ConfiguredInternetSpeed=104857600.
Игры добавляют сверху свои флаги. У Palworld был -publiclobby для показа в community-браузере, а ранние рекомендации советовали -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS для многоядерных серверов; ARK: Survival Evolved использовал -USEALLAVAILABLECORES. Флаги конкретных игр меняются от версии к версии сильнее, чем флаги движка, поэтому сверяйтесь с актуальной документацией разработчика, а не со строкой запуска из руководства двухлетней давности. На хостинге с панелью они отображаются как поля на вкладке Startup, а общая схема разобрана в статье о параметрах запуска игрового сервера.
Порты#
| Порт | Протокол | Назначение |
|---|---|---|
7777 | UDP | Игровой трафик, задаётся через -port |
27015 (обычно) | UDP | Query Steam, задаётся через -QueryPort, где поддерживается |
| свой у каждой игры | UDP или TCP | RCON, beacon, REST API |
7777 UDP - стандартный порт Unreal для игрового трафика, и многие игры его сохраняют. Некоторые используют ещё и следующий порт: ARK: Survival Evolved нужен был 7778 вдобавок к 7777. Игры с интеграцией Steam добавляют query-порт, чтобы браузер серверов мог запросить имя и число игроков; как идёт этот обмен, объясняет статья о query-портах и A2S. RCON, если он есть в игре, обычно работает по TCP на своём порту - у Palworld по умолчанию 25575, а новые версии Palworld также предлагают REST API на отдельном порту.
Игроки подключаются к игровому порту. Сервер, который работает, но не находится в браузере, хотя прямое подключение работает, - это проблема query-порта; сервер, до которого вообще никто не может достучаться, - проблема игрового порта. Как понять, какая из них, разбирается в статье о портах игровых серверов.
Тикрейт и сетевые настройки#
Частота сетевой симуляции сервера - это NetServerMaxTickRate в Engine.ini, в секции сетевого драйвера. По умолчанию в Unreal это 30. Игры переопределяют его в своих значениях по умолчанию, а некоторые ограничивают или игнорируют то, что задали вы.
Если его поднять, обновления уходят игрокам чаще, и движение и регистрация попаданий могут ощущаться точнее, но это прямая нагрузка на CPU: сервер с 60 тиками в секунду делает примерно вдвое больше работы на тики, чем с 30. На оживлённом survival-сервере, которому и так трудно удерживать тикрейт, поднятие цели делает только хуже. Почему, объясняет статья о том, что на самом деле значит тикрейт.
MaxClientRate и MaxInternetClientRate ограничивают количество байт в секунду, отправляемых каждому клиенту. Их повышение помогает в играх, которые передают много состояния мира, - большие базы, много существ, - когда игроки видят, как объекты появляются с опозданием. Некоторые игры используют другой класс сетевого драйвера (например, платформенный для кроссплея), и тогда настройки должны стоять под именем секции этого драйвера; посмотрите заведомо рабочий конфиг для своей игры, прежде чем считать, что общая секция применяется.
Логи и вылеты#
Текущий лог - Saved/Logs/<Project>.log. При запуске он переименовывается в резервную копию с отметкой времени, так что Saved/Logs медленно наполняется старыми логами; на долго работающем сервере время от времени её чистите. Строки помечены категориями, поэтому искать легко:
| Категория | О чём говорит |
|---|---|
LogNet | Подключения, отключения, ошибки сетевого драйвера, привязка портов |
LogOnline | Сессии Steam или EOS, листинг сервера |
LogInit | Запуск, командная строка, версия движка |
LogStreaming | Загрузка ассетов, часто медленная при первом запуске |
LogLinux / LogWindows | Ошибки платформы, обработка вылетов |
При вылете в Saved/Crashes/ записывается папка с файлом контекста и часто минидампом. На Linux лог обычно заканчивается строкой Signal 11 caught и стеком вызовов. Искать или отправлять разработчику нужно имена функций из стека; номер сигнала сам по себе говорит лишь о том, что процесс упал. Общий подход описан в статьях о циклических вылетах игрового сервера и о чтении консоли.
Одна ошибка Linux встречается почти на каждом сервере Unreal с интеграцией Steam: не удаётся загрузить steamclient.so, и сервер работает, но для Steam невидим. Решение - сделать клиентскую библиотеку Steam доступной там, где её ждёт сервер, обычно скопировав steamclient.so из папки linux64 SteamCMD в ~/.steam/sdk64/steamclient.so. Скрипты установки в панелях обычно делают это за вас.
Админ-доступ, RCON и обновления#
В самом Unreal нет стандартной системы администрирования; каждая игра строит свою, но схема достаточно похожа, чтобы описать её один раз.
Пароли администратора и внутриигровые команды
У большинства серверов на Unreal есть пароль администратора в файле настроек и внутриигровой способ получить с его помощью права админа. ARK читает ServerAdminPassword из [ServerSettings] в GameUserSettings.ini; игрок открывает консоль, вводит enablecheats <password>, и с этого момента админ-команды пишутся с префиксом cheat. Palworld читает AdminPassword из своей строки OptionSettings; админ вводит в чат /AdminPassword <password> и получает команды вроде /Save, /Broadcast, /KickPlayer, /BanPlayer и /Shutdown <seconds> <message>. Остальные перечислены в статье об админ-командах и RCON в Palworld.
Для каждой игры этого семейства действуют две оговорки. Пароль администратора часто передаётся открытым текстом через чат или консоль, так что считайте его общим секретом команды, а не надёжной защитой, и меняйте, когда кто-то уходит. А когда сервер записывает файл настроек при остановке, он записывает обратно и пароль - ещё одна причина править только при остановленном сервере.
RCON
Несколько игр на Unreal реализуют протокол Source RCON поверх TCP, а значит, с ними работают универсальные RCON-клиенты. ARK включает его через RCONEnabled=True и RCONPort в [ServerSettings]; Palworld использует RCONEnabled и RCONPort (по умолчанию 25575) в своей строке настроек с аутентификацией по паролю администратора. RCON даёт удалённую консоль без входа в игру - удобно для объявлений по расписанию и сохранений перед рестартом. Но это ещё и порт, который принимает пароль и выполняет команды, поэтому ему нужен сильный пароль и не больше открытости, чем необходимо; как это сделать, рассказано в статье о безопасном RCON.
Обновления и совпадение версий
Игры на Unreal строго проверяют версии. Когда разработчик выпускает патч через Steam, клиенты обновляются автоматически, и с этого момента никто не может зайти на сервер, оставшийся на предыдущей сборке. Решение - app_update сервера (на панели обычно рестарт с включёнными обновлениями или переустановка), как только серверная сборка опубликована, а это не всегда та же минута, что и для клиентской.
Кроме того, именно при обновлениях серверы на Unreal ломаются чаще всего. Pak-моды и скриптовые моды собираются под конкретные версии игры и часто перестают работать после патча, пока авторы их не догонят; форматы сохранений иногда меняются и обновляют мир так, что это нельзя отменить. Делайте backup перед каждым обновлением, читайте в патчноутах упоминания сохранений и настроек сервера, а на сервере с модами дожидайтесь модов, прежде чем обновляться. Механика обновлений, включая тестовые ветки, которые некоторые разработчики публикуют до выхода патча, описана в статье App ID и beta-ветки SteamCMD.
Память, CPU и время запуска#
Серверы на Unreal тяжелее большинства. Survival-серверу с большим миром обычно нужно 8 ГБ и больше, и память растёт с количеством построек и существ, которые создают игроки. Симуляция идёт в основном в одном игровом потоке с вспомогательными потоками для физики, стриминга и сети, поэтому скорость одного ядра важнее количества ядер; почему сервер может лагать при общей загрузке CPU в 30 процентов, объясняет статья о том, как читать загрузку CPU игрового сервера.
Запуск занимает время: загрузка больших файлов .pak, а затем мира при первом старте может длиться от одной до нескольких минут. Пока лог не покажет, что сервер слушает, игроки будут получать ошибки подключения. Это не неисправность, но панель, ожидающая строку «запущен», может всё это время показывать сервер как запускающийся.
Моды для игр на Unreal обычно поставляются как файлы .pak, которые кладут в папку ~mods внутри Content/Paks, либо через скриптовые загрузчики вроде UE4SS, либо - для ARK: Survival Ascended - через собственную интеграцию игры с CurseForge. Что работает на стороне сервера, что нужно и игрокам и как это различается от игры к игре, для самого частого случая разобрано в статье о модах Palworld с UE4SS.
В RE:NODE игры на Unreal, такие как Palworld, Satisfactory, Abiotic Factor и Insurgency: Sandstorm, устанавливаются из панели с уже выделенными портами, а вкладка Startup показывает значения запуска; конфиги доступны в файловом менеджере и через SFTP, как у любого другого сервера. Тарифы для этих игр начинаются с того объёма памяти, который нужен их движкам, - Palworld от 8 ГБ, Satisfactory от 8 ГБ.
FAQ#
Почему настройки моего сервера на Unreal сбрасываются после рестарта?
Сервер записывает свои ini-файлы при остановке, а вы правили, пока он работал. Остановите сервер, отредактируйте, запустите. Если всё равно сбрасывается, проверьте синтаксис длинных строк и не задаёт ли панель это значение из переменной запуска.
Какую папку править - WindowsServer или LinuxServer?
Ту, что соответствует операционной системе, на которой работает сервер. Linux-сервер читает только Saved/Config/LinuxServer/, а файл, положенный в WindowsServer, игнорируется, даже если он во всём остальном идеален.
Какой порт использует сервер на Unreal Engine?
По умолчанию UDP 7777 для игрового трафика, меняется через -port. Многие игры используют ещё и query-порт Steam, обычно 27015, а некоторые добавляют RCON или другие порты. Полный список для каждой игры смотрите в её документации.
Стоит ли поднимать NetServerMaxTickRate?
Только если у сервера есть запас CPU, а игроки замечают неточное движение или попадания. Повышение увеличивает нагрузку на CPU примерно пропорционально. На оживлённом survival-сервере стабильные 30 лучше нестабильных 60.
Где лежат логи выделенного сервера на Unreal?
В <Project>/Saved/Logs/. Текущий файл назван по имени проекта, например Pal.log, а старые хранятся с отметками времени. Отчёты о вылетах попадают в Saved/Crashes/.




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