Factorio Руководство

Настройка headless-сервера Factorio на Ubuntu: автозапуск, non-root пользователь и автосохранения

Развёртывание headless-сервера Factorio на Ubuntu: системный пользователь non-root, генерация мира, сетевой порт UDP 34197 и служба systemd с безопасным сохранением по SIGINT.

Настройка headless-сервера Factorio на Ubuntu: автозапуск, non-root пользователь и автосохранения

Выделенный headless-сервер Factorio на базе операционной системы Linux Ubuntu предоставляет максимальную производительность для автоматизации фабрик любого масштаба. В отличие от запуска игры через графический интерфейс Steam, headless-версия не расходует ресурсы видеокарты, оптимизирована для многопоточного выполнения симуляции на серверных процессорах и идеально подходит для непрерывной круглосуточной работы.

В этой статье мы рассмотрим развёртывание официального архива Factorio на Ubuntu 22.04/24.04, создание генерации мира, настройку сетевой безопасности и запуск через отказоустойчивую службу systemd с корректной обработкой сигналов завершения.

Создание изолированного пользователя и загрузка архива#

Безопасность Linux-сервера требует запуска сторонних сетевых демонов от непривилегированного пользователя. Создадим системного пользователя factorio с заблокированной командной оболочкой и домашней папкой /opt/factorio:

bash
sudo useradd -r -m -d /opt/factorio -s /usr/sbin/nologin factorio && sudo apt update && sudo apt install -y curl tar xz-utils

Загрузите актуальную стабильную версию headless-сервера с официального сайта Wube Software и распакуйте архив:

bash
cd /tmp && curl -L https://www.factorio.com/get-download/stable/headless/linux64 -o factorio_headless.tar.xz && sudo tar -xf factorio_headless.tar.xz -C /opt/ && sudo chown -R factorio:factorio /opt/factorio

Генерация нового мира и создание конфигурации#

Перед первым запуском сервера необходимо создать файл сохранения (мир), в котором будет развиваться фабрика. Выполните генерацию от имени пользователя factorio:

bash
sudo -u factorio /opt/factorio/bin/x64/factorio --create /opt/factorio/saves/my-world.zip

Сервер создаст файл /opt/factorio/saves/my-world.zip. Далее скопируйте шаблон настроек сервера из директории data/server-settings.example.json в config/server-settings.json, где можно указать название фабрики, пароль для подключения и интервал автосохранений (autosave_interval).

Настройка фаервола для сетевых подключений#

Factorio использует собственный сетевой протокол обмена пакетами состояний поверх UDP. Стандартный игровой порт — 34197. Разрешите входящий трафик в сетевом фильтре UFW:

bash
sudo ufw allow 34197/udp

Если вы хотите запускать многопользовательские миры Factorio вместе с расширением Space Age без ручной работы в командной строке Linux, специализированный хостинг серверов Factorio обеспечивает быструю установку модов из Mod Portal, автоматическое резервное копирование и веб-консоль управления.

Написание юнита автозапуска systemd с корректной остановкой#

Важнейшая часть настройки службы Factorio — обработка сигнала завершения. Если завершить процесс командой SIGKILL, сервер потеряет несохранённый прогресс фабрики. Сигнал SIGINT (Ctrl+C) заставляет Factorio штатно сохранить активный мир на диск перед выходом.

Создайте конфигурационный файл службы /etc/systemd/system/factorio.service:

ini
[Unit]
Description=Factorio Headless Dedicated Server
After=network.target

[Service]
Type=simple
User=factorio
Group=factorio
WorkingDirectory=/opt/factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server /opt/factorio/saves/my-world.zip --server-settings /opt/factorio/config/server-settings.json
ExecStop=/bin/kill -s INT $MAINPID
Restart=on-failure
RestartSec=15s
TimeoutStopSec=45

[Install]
WantedBy=multi-user.target

Зарегистрируйте созданный юнит в подсистеме systemd, добавьте его в автозапуск при перезагрузке сервера и запустите процесс:

bash
sudo systemctl daemon-reload && sudo systemctl enable --now factorio && sudo systemctl status factorio

Теперь фабрика функционирует в фоновом режиме. Вы можете отслеживать журнал событий и подключения игроков с помощью системной команды journalctl -u factorio -f.

Источники#