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

Как настроить сервер Factorio на Ubuntu 24.04

Запуск headless сервера Factorio на Ubuntu 24.04: сохранение, пароль, UDP 34197, автозапуск и резервные копии.

Как настроить сервер Factorio на Ubuntu 24.04

Установим конкретную версию Factorio, создадим фабрику без DLC и настроим запуск через systemd. Исполняемые файлы будут в /opt/factorio, а сохранения, моды и настройки — в /srv/factorio: обновление игры не должно подменять рабочую фабрику.

Нужен свежий VPS с Ubuntu 24.04 x86_64, публичным IPv4, SSH и sudo. Если Factorio уже установлен, сначала найдите его данные и сделайте резервную копию.

Сначала выберите версию#

Сверьте полный номер версии в клиентах всех игроков. На сервере нужна та же версия. Бесплатная headless-сборка для Linux включает Space Age; для мира без дополнения его компоненты отключим явно.

Выполните из обычного SSH-аккаунта:

bash
sudo apt update
sudo apt install -y curl xz-utils python3 ufw nano
sudo useradd --system --user-group --home-dir /srv/factorio \
  --shell /usr/sbin/nologin factorio
sudo install -d -o factorio -g factorio -m 750 \
  /srv/factorio /srv/factorio/saves /srv/factorio/mods
read -r -p "Factorio version, for example 2.0.77: " factorio_release
curl --fail --location \
  "https://factorio.com/get-download/${factorio_release}/headless/linux64" \
  --output /tmp/factorio-headless.tar.xz
sudo tar --no-same-owner -xJf /tmp/factorio-headless.tar.xz -C /opt
/opt/factorio/bin/x64/factorio --version

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

Отделите данные фабрики от игры#

Обновления заменяют /opt/factorio; фабрика хранится в /srv/factorio, а резервная копия — за пределами VPS.

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

bash
sudo tee /srv/factorio/config.ini >/dev/null <<'EOF'
[path]
read-data=/opt/factorio/data
write-data=/srv/factorio
EOF
sudo chown factorio:factorio /srv/factorio/config.ini
sudo chmod 640 /srv/factorio/config.ini

read-data указывает на данные дистрибутива, write-data — на рабочие файлы сервера. Эти каталоги разделены в справочнике Factorio.

Отключите три компонента дополнения до создания обычной карты:

bash
sudo tee /srv/factorio/mods/mod-list.json >/dev/null <<'EOF'
{"mods":[
  {"name":"base","enabled":true},
  {"name":"space-age","enabled":false},
  {"name":"quality","enabled":false},
  {"name":"elevated-rails","enabled":false}
]}
EOF
sudo chown factorio:factorio /srv/factorio/mods/mod-list.json
sudo -u factorio /opt/factorio/bin/x64/factorio \
  --config /srv/factorio/config.ini \
  --mod-directory /srv/factorio/mods \
  --create /srv/factorio/saves/factory.zip

Для Space Age включите его компоненты перед генерацией мира и проверьте наличие DLC у каждого игрока. Для совместной игры оно требуется всем участникам.

Если нужны собственные настройки ресурсов, создайте карту в клиенте и перенесите ZIP в saves при остановленном сервисе. Владельцем файла должен остаться factorio:factorio. Замена ZIP на диске не переключает карту, уже загруженную в память.

Ограничьте доступ#

Скопируйте шаблон из установленной сборки и откройте настройки:

bash
sudo install -o factorio -g factorio -m 600 \
  /opt/factorio/data/server-settings.example.json \
  /srv/factorio/server-settings.json
sudo nano /srv/factorio/server-settings.json

Задайте name, выставьте visibility.public и visibility.lan в false, выберите непустой game_password, оставьте require_user_verification: true. Для этого варианта оставьте username, password и token пустыми. Проверьте JSON:

bash
sudo -u factorio python3 -m json.tool \
  /srv/factorio/server-settings.json >/dev/null

В шаблоне Wube game_password отвечает за вход в игру, а password — за аккаунт. Публичный список требует авторизации аккаунта. Скрытый сервер доступен по адресу, поэтому пароль игры всё равно нужен.

Разрешите UDP-порт игры#

Стандартный порт Factorio — UDP 34197. Разрешите его и в firewall провайдера, и на Ubuntu.

Не потеряйте SSH. Замените 22 на свой SSH-порт до включения UFW. Учтите остальные сервисы, не закрывайте текущую сессию и проверьте вход во второй.

bash
sudo ufw allow 22/tcp
sudo ufw allow 34197/udp
sudo ufw enable
sudo ufw status verbose

Правило для TCP 34197 не разрешает UDP. Синтаксис UFW описан в руководстве Ubuntu.

Запустите сервис и проверьте сохранение#

Откройте /etc/systemd/system/factorio.service:

bash
sudo nano /etc/systemd/system/factorio.service

Вставьте:

ini
[Unit]
Description=Factorio dedicated server
Wants=network-online.target
After=network-online.target

[Service]
User=factorio
Group=factorio
WorkingDirectory=/srv/factorio
ExecStart=/opt/factorio/bin/x64/factorio --config /srv/factorio/config.ini --mod-directory /srv/factorio/mods --start-server-load-latest --server-settings /srv/factorio/server-settings.json --port 34197
Restart=on-failure
RestartSec=5
KillSignal=SIGINT
TimeoutStopSec=300
UMask=0077
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

--start-server-load-latest выбирает последнее доступное сохранение после перезапуска; параметр описан в справочнике команд. Другие карты и архивы держите вне saves, чтобы сервис не принял их за рабочую фабрику.

bash
sudo systemctl daemon-reload
sudo systemctl enable --now factorio
sudo systemctl status factorio --no-pager
sudo journalctl -u factorio -n 80 --no-pager
sudo ss -lunp 'sport = :34197'

Проверьте загруженное сохранение в журнале и локальный UDP-сокет. Подключитесь из клиента той же версии к PUBLIC_IP:34197, поставьте узнаваемый объект и дождитесь автосохранения. Выполните sudo systemctl restart factorio, зайдите снова и найдите объект. Один открытый сокет эту проверку не заменяет.

Сделайте копию перед обновлением#

Остановите сервис штатно и проверьте завершение сохранения в журнале перед архивацией:

bash
sudo systemctl stop factorio
sudo journalctl -u factorio -n 80 --no-pager
sudo install -d -o root -g root -m 700 /var/backups/factorio
sudo tar -czf /var/backups/factorio/factorio-backup.tar.gz -C /srv factorio
sudo chmod 600 /var/backups/factorio/factorio-backup.tar.gz
sudo systemctl start factorio
sudo install -o "$(id -un)" -g "$(id -gn)" -m 600 \
  /var/backups/factorio/factorio-backup.tar.gz "$HOME/factorio-download.tar.gz"

При ошибке или таймауте остановки разберитесь с сохранением, прежде чем считать архив актуальным. Скачайте его со своего компьютера, указав SSH-логин и адрес VPS:

bash
scp SSH_USER@VPS_IP:factorio-download.tar.gz .
ssh SSH_USER@VPS_IP 'rm "$HOME/factorio-download.tar.gz"'

Для нестандартного SSH-порта используйте -P PORT у scp и -p PORT у ssh. Архив может содержать данные аккаунта: храните копию приватно и отдельно от VPS. Рядом запишите версию исполняемого файла.

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

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