RE:NODE

Руководства13 мин чтения

Выделенный сервер Satisfactory: установка, сохранения и настройки

Установите сервер, заявите на него права из клиента и сохраните играбельность растущей фабрики. Порты, автосохранения, память по размеру фабрики, моды и подвисания.

Обновлено

1 прочтений

Satisfactory необычна тем, что сервер становится ощутимо тяжелее, чем дольше игра идёт удачно. Каждая лента, каждый сплиттер и каждый хранящийся предмет - это состояние, а у фабрики, проработавшей двести часов, его очень много. Сервер, который в первый месяц был в порядке, а на третий месяц подвисает, не деградировал - вырос файл сохранения. Закладывайте 8 GB на старте и 12-16 GB к тому времени, когда фабрику не стыдно показать людям, открывайте один порт и учтите, что почти всё, что вы ожидаете найти в конфигурационном файле, на самом деле - панель внутри игрового клиента. В этом руководстве: установка, процедура заявки прав на сервер, на которой спотыкаются все, существующие настройки, сохранения и автосохранения, моды и разница между проблемой сервера и проблемой маршрута одного игрока до него.

Как устроен выделенный сервер Satisfactory#

Выделенный сервер - это бесплатная отдельная загрузка: Satisfactory Dedicated Server, app id Steam 1690800, скачивается анонимно через SteamCMD. У него нет графики, нет консольных команд для игрового процесса и - это то, что удивляет пришедших из других игр, - нет осмысленной текстовой конфигурации.

Вместо этого сервер предоставляет небольшой API по HTTPS, а инструментом администрирования служит игровой клиент. Вы добавляете адрес сервера в Server Manager клиента, заявляете на него права, даёте имя, задаёте пароль администратора, после чего либо начинаете на нём новую игру, либо загружаете сохранение. Все настройки сервера дальше - это элементы управления в той же панели. Файла server.properties для правки нет, как нет и команды чата, чтобы кого-нибудь кикнуть.

Из этого следуют два вывода. Хороший: администрирование работает одинаково, стоит ли сервер на вашей машине, на VDS или на хостинге с панелью, потому что всё делается через клиент. Плохой: если порт управления недоступен, сервер может работать безупречно и быть совершенно неуправляемым, и такой вид сбоя лучше распознавать заранее.

Кроме того, сервер продолжает вести фабрику, когда никого нет, если не включён Auto Pause. Это единственная настройка - самое важное игровое решение о хостинге: сервер на паузе ничего не стоит, пока вы спите, а работающий означает, что оставленные вами угольные электростанции к утру что-нибудь да произведут.

Требования и потребление ресурсов#

Память следует за сохранением, а сохранение - за фабрикой. Число игроков почти ничего не меняет.

СтадияRAMCPUДиск
Новая игра, 1-4 игрока, первые несколько фабрик8 GB2 ядра40 GB
Середина игры, несколько площадок, работают поезда10-12 GB2-3 ядра50 GB
Поздняя игра, зрелая мегабаза14-16 GB3+ ядра60 GB
Моды, особенно добавляющие зданиядобавьте 2-4 GB-добавьте 5 GB
  • CPU: тик фабрики выполняется в основном в одном потоке, поэтому тактовая частота определяет, сколько лент и машин сервер способен вести честно. Второе и третье ядра выполняют реальную работу - сеть, сохранение и потоковая загрузка ассетов вынесены из игрового потока, - но потолок размера фабрики они не поднимают.
  • Диск: установка занимает около 12-15 GB. Сохранение поздней игры - 50-250 MB, а сервер держит несколько ротируемых автосохранений плюс всё, что вы сохранили вручную, так что одна папка сохранений может достигать пары гигабайт. Быстрое хранилище превращает автосохранение из заметного зависания в подвисание - честная версия этого утверждения есть в статье что на самом деле меняет NVMe.
  • Игроки: Coffee Stain разрабатывает и тестирует игру примерно на четверых. Подключиться смогут и больше, но ничто свыше четырёх не настроено, а каждый лишний игрок добавляет и память, и нагрузку на игровой поток.
  • Сеть: лёгкая. Несколько сотен килобайт в секунду на игрока. Если игроков откатывает назад, смотрите на тик сервера, прежде чем смотреть на канал.

Если вы не уверены, чего именно вам не хватает, кратчайший путь к ответу - статья CPU и RAM для игровых серверов, а какие сигналы стоит принимать всерьёз, разобрано в статье когда пора менять тариф.

Установка и запуск сервера#

bash
$ steamcmd +force_install_dir /home/satisfactory/server +login anonymous \    +app_update 1690800 validate +quit$ cd /home/satisfactory/server$ ./FactoryServer.sh -Port=7777 -log -unattended

В Windows бинарный файл называется FactoryServer.exe, а аргументы те же. Для ветки Experimental добавьте -beta experimental в строку app_update - и учтите, что клиент должен быть на той же ветке, потому что клиент Experimental не может зайти на стабильный сервер, и наоборот. Такое несовпадение даёт сервер, который просто не появляется, без ошибки, объясняющей почему.

АргументЧто делает
-Port=7777Единственный порт, который использует сервер
-logВыводить лог в консоль, а не только в файл
-unattendedБез диалога сбоя. Обязателен для безголового запуска
-multihome=0.0.0.0Привязаться к конкретному адресу на машине с несколькими адресами
-beta experimentalВ строке SteamCMD, а не в строке сервера

Если это первый сервер, который вы устанавливаете таким способом, app id, ветки и скрипты обновления описаны в статье SteamCMD простыми словами. На хостинге с панелью ничего из этого вводить не нужно: те же значения появляются полями на вкладке Startup.

Заявка прав на сервер и Server Manager#

Первый запуск даёт сервер, у которого нет владельца. Права на него заявляются из игрового клиента, один раз:

  1. Откройте Satisfactory, затем Server Manager, затем Add Server.
  2. Введите address:7777. Клиент обращается к API по HTTPS, а не к игровому порту.
  3. Сервер появится как незаявленный. Выберите Claim, дайте ему имя и задайте Admin Password.
  4. По желанию задайте Client Password - пароль для входа. Оставьте пустым для открытого сервера.
  5. Создайте новую игру или перейдите в Manage Saves и загрузите сохранение.
claim, settingsplayautosaveGame clientServer ManagerHTTPS APITCP 7777Game trafficUDP 7777Dedicated serverFactoryServerSave filesSaveGames/server
Как клиент достигает сервера и управляет им

Пароль администратора - это то, что понадобится любой другой машине, чтобы позже управлять сервером, и процедуры его восстановления нет: потеря означает возврат контроля трудным путём, через файловую систему. Запишите его где-нибудь не на той же машине.

Обычный способ начать - загрузить существующее сохранение одиночной игры. Клиентские сохранения лежат в %LOCALAPPDATA%\FactoryGame\Saved\SaveGames\<your id>\ в Windows; выберите .sav в Manage Saves, и клиент отправит его на сервер. Сервер хранит собственные сохранения в FactoryGame/Saved/SaveGames/server/, и именно туда можно положить файл напрямую по SFTP, если загрузка слишком велика для прохода через клиент.

Существующие настройки и где они живут#

Настройки уровня сервера находятся на вкладке Server Settings в Server Manager. Они применяются к серверу независимо от того, какое сохранение загружено:

  • Auto Pause - приостанавливать симуляцию, когда уходит последний игрок. Экономит CPU, останавливает производство.
  • Auto Save on Disconnect - записывать сохранение, когда игрок уходит. Дешёвая страховка, одна лишняя запись.
  • Autosave Interval - минут между автоматическими сохранениями. По умолчанию пять.
  • Number of autosaves - сколько ротируемых копий держать, прежде чем перезаписывать самую старую.
  • Network Quality - сколько пропускной способности серверу разрешено тратить на обновления. Выше - плавнее и дороже.
  • Send Gameplay Data - телеметрия для Coffee Stain. Выключить - вполне допустимый ответ.

Настройки уровня сохранения - это Advanced Game Settings, и принадлежат они сохранению, а не серверу: без затрат на постройку, открыть все исследования, задать фазу игры, отключить арахнидов и так далее.

Под капотом сервер записывает свою конфигурацию в FactoryGame/Saved/Config/LinuxServer/ (или WindowsServer/ в Windows). Меняйте настройки из клиента, а не правкой этих файлов: работающий сервер держит свою копию и перезапишет ею вашу. Единственный файл, который стоит трогать напрямую, - Engine.ini, где NetServerMaxTickRate в разделе [/Script/OnlineSubsystemUtils.IpNetDriver] задаёт сетевой тик сервера. Его повышение может сгладить движение для небольшой группы при запасе CPU, и оно не поддерживается: если стало хуже, верните как было.

Порты и подключение#

ПортПротоколНазначение
7777UDPИгровой трафик
7777TCPAPI по HTTPS, через который клиент управляет сервером

После переработки сетевой части в Update 8 один номер порта выполняет обе задачи, а прежней схемы с отдельным beacon-портом и портом запросов больше нет. Так проще, но есть ловушка: хостеры и firewall нередко выделяют игровой порт только как UDP. Только с UDP сервер доступен всем, у кого он уже настроен, и совершенно невидим для Server Manager, так что вы не можете ни заявить на него права, ни изменить настройку. Если клиент не видит сервер, который, как вы знаете, работает, эту TCP-сторону проверяйте в первую очередь. Почему у игр вообще возникает такое разделение, объяснено в статье порты игровых серверов простыми словами.

Игроки заходят через Server Manager, когда права на сервер заявлены и сессия загружена, либо через список сессий друга. Публичного браузера серверов нет, так что адрес вы раздаёте сами.

Сохранения, автосохранения и backup#

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

  • Удлиняйте интервал по мере роста сохранения. Пять минут - правильно для новой игры и неправильно для игры на двести часов. Десять-пятнадцать минут на зрелом сохранении меняют более долгий худший откат на гораздо меньшее число прерываний.
  • Держите меньше ротируемых автосохранений, если диска мало, но не меньше трёх. Повреждение обычно обнаруживается на следующую сессию, а не сразу.
  • Делайте ручное сохранение перед всем структурным: обновлением игры, изменением модов, импортом чертежа, крупным сносом.
  • Автосохранения - это не backup. Они лежат на том же диске, что и защищаемое сохранение, и перезаписываются по таймеру. Backup - это копия в другом месте, по расписанию, которую вы хотя бы раз восстанавливали, - пять минут на статью backup, которые действительно восстанавливаются стоит потратить.

В RE:NODE хранилище повсюду NVMe, благодаря чему запись большого сохранения проходит быстро, а не заметно. Слоты backup входят в каждый тариф Satisfactory, создаются по запросу или по расписанию и хранятся вне защищаемой машины, а восстановление - это кнопка. Вкладка Schedules может запускать ночной backup и еженедельный перезапуск упорядоченными задачами, и для большинства групп это и есть весь порядок обслуживания; как выбрать час, описано в статье расписания перезапуска, которые помогают.

Почему становится тяжелее и что с этим делать#

Ничто в сервере Satisfactory не деградирует. Растёт сохранение, а вместе с ним растёт стоимость его хранения и записи. Преобладают три фактора:

  1. Число предметов в пути. Ленты хранят предметы по отдельности. Длинная сеть лент, где всё идёт впритык, для сервера - очень большое число движущихся объектов. Буферизация в контейнерах дешевле, чем буферизация на лентах.
  2. Число зданий. Каждая машина тикает. Тысяча конструкторов стоит тысячи тиков независимо от того, есть ли у них входные ресурсы.
  3. Размер сохранения. То есть первые два фактора, записанные на диск каждый интервал автосохранения.

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

Если игроков откатывает назад у всех одновременно, виноват сервер. Если только у одного, а у остальных нет, это его маршрут до сервера - как отличить три случая друг от друга, описано в статье задержка, джиттер и потеря пакетов, и сделать это различие стоит до того, как кто-то купит ненужный тариф.

Моды через SML и менеджер модов#

Моды для Satisfactory берутся из репозитория ficsit.app и загружаются через SML, Satisfactory Mod Loader. На сервере моды лежат в FactoryGame/Mods/ рядом с файлами игры, и у каждого клиента должны стоять те же моды тех же версий.

  • Satisfactory Mod Manager умеет устанавливать на удалённый сервер по SFTP или FTP, и это наименее болезненный путь, если хостер даёт вам эти учётные данные. Инструмент командной строки ficsit-cli делает то же самое в скрипте.
  • Каждое обновление игры ломает моды. Сам SML привязан к версии игры, и сервер, который обновляется автоматически в день патча, не запустится, пока авторы модов не подтянутся. Отключите автоматические обновления на сервере с модами и обновляйтесь осознанно.
  • Удаление мода, добавлявшего здания, разрушительно. Всё построенное с его помощью исчезает из сохранения, а то, с чем оно было связано, может не пережить разрыв. Сначала сделайте сохранение, которое вы проверили.
  • У Experimental и стабильной ветки разные сборки модов. Выберите ветку и оставайтесь на ней.

Сервер с модами - ещё и обычный ответ на вопрос «зачем ему ещё четыре гигабайта». Моды на здания поднимают потолок того, что может вместить фабрика, а фабрики заполняют отведённое им место.

Диагностика#

Server Manager не видит сервер. Закрыт TCP на порту 7777 либо неверен адрес. Игровой трафик идёт по UDP, а управление - по TCP; наличие только одного из них даёт именно это.

«Server is already claimed», и никто не знает пароль. Заявка хранится в каталоге конфигурации сервера. Единственный путь назад - остановить сервер и очистить это состояние, а это значит заявлять права и загружать сохранение заново, так что храните пароль администратора в надёжном месте.

После обновления игры сервер не появляется. Клиент обновился, а сервер нет, либо кто-то из них на Experimental. Версии должны совпадать точно.

Всё замирает на несколько секунд по расписанию. Это автосохранение. Удлините интервал; настройки, которая его убирает, нет.

Фабрика ничего не произвела, пока нас не было. Включён Auto Pause. Это выбор, а не сбой, но он удивляет тех, кто ждал, что выделенный сервер продолжит работать.

Сервер сам останавливается и перезапускается под нагрузкой. Память. В RE:NODE контейнер, достигший лимита, останавливается и чисто перезапускается, а не уходит в своп, - а это значит, что вы теряете всё, что произошло после последнего автосохранения, так что сервер, работающий у потолка, должен сохраняться чаще, а не реже.

Сохранение, загруженное через клиент, не проходит или обрывается по тайм-ауту. Большие сохранения лучше класть прямо в FactoryGame/Saved/SaveGames/server/ по SFTP, а затем выбирать в Manage Saves.

FAQ#

Сколько RAM нужно серверу Satisfactory?

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

Почему нет конфигурационного файла для настроек сервера?

Потому что в эпоху 1.0 администрирование перенесли в игровой клиент. Сервер предоставляет API по HTTPS, Server Manager клиента - его интерфейс, а файлы, которые сервер записывает под ним, - его собственное состояние, а не интерфейс. Отредактируйте их, и работающий сервер перезапишет вас.

Продолжает ли фабрика работать, когда никого нет онлайн?

Только если Auto Pause выключен. Когда он включён, симуляция останавливается, когда уходит последний игрок, и возобновляется, когда кто-то заходит. Выключен - значит ночное производство, больше нагрузки на CPU и сохранение, которое продолжает меняться, пока вас нет.

Можно ли перенести сохранение одиночной игры на выделенный сервер?

Да. Загрузите его через Manage Saves в Server Manager или положите .sav прямо в папку сохранений сервера. Прогресс, чертежи и карта переносятся вместе с ним; достижения и так определяются тем, включены ли в сохранении Advanced Game Settings.

Должны ли у всех игроков быть одни и те же моды?

Да, те же моды тех же версий и та же версия SML. Частичного совпадения не бывает, а мод, обновившийся автоматически у одного игрока, ломает только этого игрока, из-за чего это выглядит его проблемой, а не проблемой версии.

Можно ли исправить подвисание при автосохранении?

Убрать нельзя, можно только сократить. Быстрое хранилище делает его короче, более длинный интервал - реже, меньше ротируемых копий - дешевле каждую запись, а меньшая фабрика - меньше само подвисание. Сервер, который подвисает по расписанию, сохраняется, а не лагает, и лечится это настройкой, а не более крупным тарифом.


Комментарии

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

0/2000