Как создать игровой сервер Factorio
Рассказываем, как создать игровой сервер Factorio с модификациями и без. А еще — как поднять кластер для запуска бесконечного мира.
Что такое Factorio и зачем нужен сервер
Factorio — специфичная игра про выживание на неизвестной планете. Впрочем, она объединяет большинство привычных механик и сценариев для подобного жанра.
- Герой может спастись. Для этого ему нужно добывать ресурсы и «поднимать науку». Только тогда получится построить ракету и отправиться домой.
- Количество ресурсов ограничено. Мир велик, но не бесконечен, как в том же Minecraft.
- На планете встречаются противники научно-технического прогресса: плеваки и кусаки.
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 — это «волшебные сундуки», которые извлекают запрошенные ресурсы и пробрасывают между серверами в кластере.
Заключение
Если вы настроили кластер для Factorio, то вам действительно нравится игра. Ведь этот процесс — настоящее искусство администрирования, в котором каждый может добавить свои средства для автоматизации и развертывания. Главное — чтобы под рукой был надежный и мощный сервер, который поможет реализовать проект.