Как создать игровой сервер Factorio - Академия Selectel

Как создать игровой сервер Factorio

Рассказываем, как создать игровой сервер Factorio с модификациями и без. А еще — как поднять кластер для запуска бесконечного мира.

Что такое Factorio и зачем нужен сервер

Factorio — специфичная игра про выживание на неизвестной планете. Впрочем, она объединяет большинство привычных механик и сценариев для подобного жанра.

  • Герой может спастись. Для этого ему нужно добывать ресурсы и «поднимать науку». Только тогда получится построить ракету и отправиться домой.
  • Количество ресурсов ограничено. Мир велик, но не бесконечен, как в том же Minecraft.
  • На планете встречаются противники научно-технического прогресса: плеваки и кусаки.
Игровой мир Factorio.

Factorio не предлагает заниматься ручным собирательством (гриндом), как может показаться на первый взгляд. Наоборот, игра может дать пользователю бор, плавильню, конвейеры и манипуляторы, а он — автоматизировать добычу ресурсов и научно-технический прогресс.

Игроки Factorio делятся на две группы. Одни отвергают игру в первые часы, а другие «залипают» на несколько суток и строят масштабные производственные линии. Несмотря на отличную оптимизацию игры, некоторые базы настолько велики, что даже самый мощный компьютер перестает справляться. Это, конечно, не устраивает тех, кто намерен продолжать играть — нужно поднимать сервер.

Как запустить сервер

Выбор подходящей конфигурации

Игровой сервер Factorio, как и любой другой сервер, можно поднять на базе физической или виртуальной машины. Однако для выбора подходящей конфигурации нужно знать немного технической информации об игре.

  • Игровой мир обновляется 60 раз в секунду, и большинство действий выполняется в одном потоке. Это значит, что нужен сервер с высокой тактовой частотой, а не с большим количеством ядер. 
  • Для прохождения базовой игры подойдет любой облачный сервер с двумя ядрами, но с модами может быть по-разному. Для Krastorio 2 облачного сервера хватит, а вот для Sea Block придется переехать на выделенный сервер CL23-SSD с процессором i3-12300. Спустя 900 часов игры мой компьютер уже тормозит от количества объектов на карте, а выделенный сервер пока справляется и выдает стабильные 60 тактов в секунду.

Аренда сервера

В качестве примера развернем выделенный сервер CL23-SSD — этой конфигурации хватит с запасом.

1. Открываем панель управления и переходим в раздел Серверы и оборудование → Серверы. В пункте Готовые серверы выбираем интересующую нас конфигурацию.

2. Настраиваем сервер: выбираем операционную систему и модель потребления трафика. Выбираем Ubuntu и нажимаем кнопку Оплатить.

3. Подключаемся к серверу по SSH, используя его публичный IP-адрес и пароль из панели управления.


    ssh root@<ip-adr>
<pswrd>

Установка игрового сервера

Игровой сервер распространяется бесплатно на официальном сайте игры, но headless-версия есть только для Linux.

1. Скачиваем и распаковываем игровой сервер:


    wget https://factorio.com/get-download/stable/headless/linux64 -O factorio.tar.xz
unxz factorio.tar.xz
tar xvf factorio.tar

В каталоге игрового сервера есть следующие точки интереса:

  • bin/x64/factorio — исполняемый файл игрового сервера,
  • mods/ — каталог для модов,
  • data/server-settings.example.json — конфигурационный файл сервера,
  • factorio-current.log и factorio-previous.log — логи последнего и предпоследнего запуска,
  • saves/ — каталог для промежуточных автосохранений.

Конфигурационный файл снабжен комментариями, однако стоит акцентировать внимание на некоторых параметрах.

  • Параметр game_password — пароль для входа на сервер.
  • Параметр auto_pause — булево значение. Если auto_pause=true, то при отсутствии игроков время на сервере останавливается. Обратите внимание, что через 19 840 часов (примерно 2,26 года) произойдет переполнение внутреннего счетчика времени и сохранение поломается.

2. Запускаем игровой сервер с помощью следующей команды:


    ./bin/x64/factorio --start-server /путь/до/карты.zip --server-settings server-settings.json

Может возникнуть вопрос, где взять карту игры. Но на деле все просто: ее нужно сгенерировать. Самый оптимальный вариант — сделать это в одиночной игре через интерфейс.

Интерфейс генерации карты.

Сохранения можно найти по одному из путей:

  • Windows: %APPDATA%\Factorio\saves;
  • macOS: ~/Library/Application Support/factorio/saves;
  • Linux: ~/.factorio/saves.

Загружаем сохранение на сервер, запускаем — и готово!

Сервер можно запустить в tmux/screen или написать systemd-юнит. Также можно использовать скрипты Linux Game Server Manager (LinuxGSM).

Как запустить кластер

Зачем нужен кластер

Мощный выделенный сервер может справиться даже с тяжелыми модами. Но однажды его ресурсов может не хватить.

Для сравнения производственных линий в игре используется метрика «наука в секунду» (Science Per Minute, SPM). «Наука» — это предметы в виде колб, которые изготавливаются из множества различных ресурсов и тратятся на изучение новых технологий. 

Недавно был поставлен рекорд в миллион науки за минуту. Для сравнения: компьютер с процессором Intel i3-10500 лагает, когда на карте миллион сущностей. А тут миллион — это производимый ресурс без учета фабрик, манипуляторов и конвейеров. Как такое можно сделать на одном сервере? Никак — нужен кластер.

Для постановки рекорда энтузиасты использовали 175 игровых инстансов, расположенных на 53 серверах. Самая большая локация, ферма солнечных батарей, занимает сохранение размером в 1,5 ГБ и использует 70 ГБ оперативной памяти. Ознакомиться с данными показателями можно в мониторинге проекта.

Модификации для создания кластеров

Вроде все понятно: для увеличения мощности нужно создать несколько серверов, которые будут общими усилиями поддерживать большой мир Factorio. Но как объединить их в кластер и научить общаться между собой? Так, чтобы часть мира, расположенная на сервере A могла отправить ресурсы на фабрики сервера B?

Объединением игровых серверов в один мир занимается проект Clusterio. У него есть две версии.

  • Устаревшая «альфа» 1.2. Это внутриигровой мод, который реализует «телепортирующие сундуки». Они «поглощают» ресурсы на одном сервере и «материализуют» на другом.
  • Актуальная «альфа» 2.0. Это целый комбайн. Далее мы рассмотрим именно эту версию.

Создание кластера, или начало работы с Clusterio 2.0

Термины для работы с модификацией

  • Controller — управляющее звено. На нем находится веб-интерфейс.
  • Instance — игровой сервер Factorio.
  • Host — физический или облачный сервер, на котором запускаются игровые серверы.

1. Для работы Clusterio нужен пакетный менеджер Node.js (NPM) — устанавливаем его с помощью нескольких команд:


    mkdir clusterio
cd clusterio
npm init "@clusterio"

Процесс установки интерактивный, поэтому можно выбрать необходимые компоненты и плагины, а также разделить хосты и контроллер.

2. Если вы устанавливаете хост отдельно, то необходимо указать URL контроллера:


    npx clusteriohost config set host.controller_url http://192.168.1.1:1234/

Скрипт установки выведет в конце токен для входа в контроллер — его нужно сохранить. По готовности можно запустить контроллер и хост.

В текущем каталоге появится каталог systemd — внутри него лежат сгенерированные юниты, которые можно положить в /etc/systemd/system и запускать в качестве демонов. Кроме того, в этой же директории есть скрипты run-controller.sh и run-host.sh. С помощью них можно запустить хост или контроллер в текущей сессии.

Если все сделано верно, то после входа по токену вы увидите все хосты и информацию о сервере с контроллером.

3. Далее заходим на вкладку Mods и в разделе Stored Mods загружаем zip-архивы модов Subspace Storage и Clusterio Library. Архивы можно скачать с сайта или через главное меню игры. Во втором случае архивы модов будут лежать в каталоге mods, рядом с saves.

4. Затем создаем набор модов (Mod Pack). Назвать его можно как угодно, главное — прописать версию игры. Далее в списке модов нужно включить загруженные модификации и сохранить получившийся набор. Без него по умолчанию ни один игровой сервер запустить не получится.

5. Теперь можно создать игровой сервер во вкладке Instances. В карточке игрового сервера нужно назначить игровой сервер на хост и загрузить мир (сохранение). Если последнего не сделать, сервер при первом запуске сгенерирует случайный мир.

Готово — игровой сервер можно запускать.

Запуск игрового сервера

В Factorio можно заходить по адресу любого инстанса из кластера. Если вы устанавливали Server Select, то в левом верхнем углу игры будет кнопка, вызывающая список всех серверов кластера. Плагин Inventory Sync сохранит ваш инвентарь, а Research Sync — синхронизирует научный прогресс между всеми серверами.

Плагин Subspace Storage и одноименный мод добавляют в игру три пары объектов:

  • Item Injector + Item Extractor,
  • Fluid Injector + Fluid Extractor,
  • Electricity Injector + Electricity Extractor.

Объекты Injector — это «черные дыры», которые потребляют ресурсы, жидкости и электричество. Объекты Extractor — это «волшебные сундуки», которые извлекают запрошенные ресурсы и пробрасывают между серверами в кластере.

Вкладка Storages, «съеденные» объекты.

Заключение

Если вы настроили кластер для Factorio, то вам действительно нравится игра. Ведь этот процесс — настоящее искусство администрирования, в котором каждый может добавить свои средства для автоматизации и развертывания. Главное — чтобы под рукой был надежный и мощный сервер, который поможет реализовать проект.