Satisfactory необычна тем, что сервер становится ощутимо тяжелее, чем дольше игра идёт удачно. Каждая лента, каждый сплиттер и каждый хранящийся предмет - это состояние, а у фабрики, проработавшей двести часов, его очень много. Сервер, который в первый месяц был в порядке, а на третий месяц подвисает, не деградировал - вырос файл сохранения. Закладывайте 8 GB на старте и 12-16 GB к тому времени, когда фабрику не стыдно показать людям, открывайте один порт и учтите, что почти всё, что вы ожидаете найти в конфигурационном файле, на самом деле - панель внутри игрового клиента. В этом руководстве: установка, процедура заявки прав на сервер, на которой спотыкаются все, существующие настройки, сохранения и автосохранения, моды и разница между проблемой сервера и проблемой маршрута одного игрока до него.
Как устроен выделенный сервер Satisfactory#
Выделенный сервер - это бесплатная отдельная загрузка: Satisfactory Dedicated Server, app id Steam 1690800, скачивается анонимно через SteamCMD. У него нет графики, нет консольных команд для игрового процесса и - это то, что удивляет пришедших из других игр, - нет осмысленной текстовой конфигурации.
Вместо этого сервер предоставляет небольшой API по HTTPS, а инструментом администрирования служит игровой клиент. Вы добавляете адрес сервера в Server Manager клиента, заявляете на него права, даёте имя, задаёте пароль администратора, после чего либо начинаете на нём новую игру, либо загружаете сохранение. Все настройки сервера дальше - это элементы управления в той же панели. Файла server.properties для правки нет, как нет и команды чата, чтобы кого-нибудь кикнуть.
Из этого следуют два вывода. Хороший: администрирование работает одинаково, стоит ли сервер на вашей машине, на VDS или на хостинге с панелью, потому что всё делается через клиент. Плохой: если порт управления недоступен, сервер может работать безупречно и быть совершенно неуправляемым, и такой вид сбоя лучше распознавать заранее.
Кроме того, сервер продолжает вести фабрику, когда никого нет, если не включён Auto Pause. Это единственная настройка - самое важное игровое решение о хостинге: сервер на паузе ничего не стоит, пока вы спите, а работающий означает, что оставленные вами угольные электростанции к утру что-нибудь да произведут.
Требования и потребление ресурсов#
Память следует за сохранением, а сохранение - за фабрикой. Число игроков почти ничего не меняет.
| Стадия | RAM | CPU | Диск |
|---|---|---|---|
| Новая игра, 1-4 игрока, первые несколько фабрик | 8 GB | 2 ядра | 40 GB |
| Середина игры, несколько площадок, работают поезда | 10-12 GB | 2-3 ядра | 50 GB |
| Поздняя игра, зрелая мегабаза | 14-16 GB | 3+ ядра | 60 GB |
| Моды, особенно добавляющие здания | добавьте 2-4 GB | - | добавьте 5 GB |
- CPU: тик фабрики выполняется в основном в одном потоке, поэтому тактовая частота определяет, сколько лент и машин сервер способен вести честно. Второе и третье ядра выполняют реальную работу - сеть, сохранение и потоковая загрузка ассетов вынесены из игрового потока, - но потолок размера фабрики они не поднимают.
- Диск: установка занимает около 12-15 GB. Сохранение поздней игры - 50-250 MB, а сервер держит несколько ротируемых автосохранений плюс всё, что вы сохранили вручную, так что одна папка сохранений может достигать пары гигабайт. Быстрое хранилище превращает автосохранение из заметного зависания в подвисание - честная версия этого утверждения есть в статье что на самом деле меняет NVMe.
- Игроки: Coffee Stain разрабатывает и тестирует игру примерно на четверых. Подключиться смогут и больше, но ничто свыше четырёх не настроено, а каждый лишний игрок добавляет и память, и нагрузку на игровой поток.
- Сеть: лёгкая. Несколько сотен килобайт в секунду на игрока. Если игроков откатывает назад, смотрите на тик сервера, прежде чем смотреть на канал.
Если вы не уверены, чего именно вам не хватает, кратчайший путь к ответу - статья CPU и RAM для игровых серверов, а какие сигналы стоит принимать всерьёз, разобрано в статье когда пора менять тариф.
Установка и запуск сервера#
$ 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#
Первый запуск даёт сервер, у которого нет владельца. Права на него заявляются из игрового клиента, один раз:
- Откройте Satisfactory, затем Server Manager, затем Add Server.
- Введите
address:7777. Клиент обращается к API по HTTPS, а не к игровому порту. - Сервер появится как незаявленный. Выберите Claim, дайте ему имя и задайте Admin Password.
- По желанию задайте Client Password - пароль для входа. Оставьте пустым для открытого сервера.
- Создайте новую игру или перейдите в Manage Saves и загрузите сохранение.
Пароль администратора - это то, что понадобится любой другой машине, чтобы позже управлять сервером, и процедуры его восстановления нет: потеря означает возврат контроля трудным путём, через файловую систему. Запишите его где-нибудь не на той же машине.
Обычный способ начать - загрузить существующее сохранение одиночной игры. Клиентские сохранения лежат в %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, и оно не поддерживается: если стало хуже, верните как было.
Порты и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
7777 | UDP | Игровой трафик |
7777 | TCP | API по HTTPS, через который клиент управляет сервером |
После переработки сетевой части в Update 8 один номер порта выполняет обе задачи, а прежней схемы с отдельным beacon-портом и портом запросов больше нет. Так проще, но есть ловушка: хостеры и firewall нередко выделяют игровой порт только как UDP. Только с UDP сервер доступен всем, у кого он уже настроен, и совершенно невидим для Server Manager, так что вы не можете ни заявить на него права, ни изменить настройку. Если клиент не видит сервер, который, как вы знаете, работает, эту TCP-сторону проверяйте в первую очередь. Почему у игр вообще возникает такое разделение, объяснено в статье порты игровых серверов простыми словами.
Игроки заходят через Server Manager, когда права на сервер заявлены и сессия загружена, либо через список сессий друга. Публичного браузера серверов нет, так что адрес вы раздаёте сами.
Сохранения, автосохранения и backup#
Регулярное подвисание, которое игроки называют лагом, - обычно автосохранение, записывающее большой файл. Сериализуется каждая машина, каждый сегмент ленты, каждый предмет в пути и каждый предмет в контейнере, и на зрелой фабрике это реальный объём работы.
- Удлиняйте интервал по мере роста сохранения. Пять минут - правильно для новой игры и неправильно для игры на двести часов. Десять-пятнадцать минут на зрелом сохранении меняют более долгий худший откат на гораздо меньшее число прерываний.
- Держите меньше ротируемых автосохранений, если диска мало, но не меньше трёх. Повреждение обычно обнаруживается на следующую сессию, а не сразу.
- Делайте ручное сохранение перед всем структурным: обновлением игры, изменением модов, импортом чертежа, крупным сносом.
- Автосохранения - это не backup. Они лежат на том же диске, что и защищаемое сохранение, и перезаписываются по таймеру. Backup - это копия в другом месте, по расписанию, которую вы хотя бы раз восстанавливали, - пять минут на статью backup, которые действительно восстанавливаются стоит потратить.
В RE:NODE хранилище повсюду NVMe, благодаря чему запись большого сохранения проходит быстро, а не заметно. Слоты backup входят в каждый тариф Satisfactory, создаются по запросу или по расписанию и хранятся вне защищаемой машины, а восстановление - это кнопка. Вкладка Schedules может запускать ночной backup и еженедельный перезапуск упорядоченными задачами, и для большинства групп это и есть весь порядок обслуживания; как выбрать час, описано в статье расписания перезапуска, которые помогают.
Почему становится тяжелее и что с этим делать#
Ничто в сервере Satisfactory не деградирует. Растёт сохранение, а вместе с ним растёт стоимость его хранения и записи. Преобладают три фактора:
- Число предметов в пути. Ленты хранят предметы по отдельности. Длинная сеть лент, где всё идёт впритык, для сервера - очень большое число движущихся объектов. Буферизация в контейнерах дешевле, чем буферизация на лентах.
- Число зданий. Каждая машина тикает. Тысяча конструкторов стоит тысячи тиков независимо от того, есть ли у них входные ресурсы.
- Размер сохранения. То есть первые два фактора, записанные на диск каждый интервал автосохранения.
Практические меры в порядке пробы: удлините интервал автосохранения, уберите петли лент и длинные простаивающие ленты, существующие только как хранилище, снесите заброшенные стартовые фабрики, а не оставляйте их работать, и только потом покупайте память. Смена тарифа в 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.