MAATRIX GAMES / Блог / Как поднять сервер Factorio: пошаговая инструкция

Как поднять сервер Factorio: пошаговая инструкция

MAATRIX GAMES

Есть два способа поиграть в Factorio с друзьями: либо один из вас держит игру запущенной и раздаёт хостинг через клиент, либо где-то крутится отдельный headless-сервер, который живёт своей жизнью независимо от того, кто онлайн. Второй вариант почти всегда лучше — фабрика не встанет посреди ночной смены, если хост-игрок решит выйти поспать, а сам сервер жрёт заметно меньше ресурсов, потому что не рисует картинку. Дальше — как поднять такой сервер на VPS, от первой закачки до автозапуска после перезагрузки.

Что понадобится и системные требования

Factorio — игра не про графику, а про пересчёт огромного количества сущностей (белтов, инсёртеров, поездов, жидкостей) каждый тик, поэтому по CPU сервер довольно прожорливый на поздних этапах, а вот по памяти — скромный.

Минимум для старта:

  • 2 ГБ RAM — хватит на небольшую базу и 2-4 игроков на ранней стадии.
  • 1-2 vCPU — Factorio однопоточный по основной симуляции, так что важнее частота ядра, а не их число.
  • 1-2 ГБ диска под саму игру и сейвы (плюс запас под автосейвы, если храните историю).
  • Linux x86_64 — headless-сборка официально идёт под Linux и Windows, но на VPS почти всегда ставят Linux.

Если база разрастётся до тысяч гидравлических насосов и составов на десятки вагонов, 2 ГБ станет мало — с ростом карты закладывайте 4 ГБ и выше, особенно если планируете моды вроде Space Exploration или Krastorio 2, которые сильно увеличивают сложность симуляции.

Скачивание headless-версии сервера

Официальный headless-сервер Factorio распространяется бесплатно с сайта разработчиков, отдельно от Steam-версии клиента, и не требует лицензии для запуска самого сервера (лицензия нужна игрокам, которые подключаются).

Заходим на VPS по SSH и качаем архив:

mkdir -p ~/factorio-server
cd ~/factorio-server
wget https://factorio.com/get-download/stable/headless/linux64 -O factorio-headless.tar.xz

Распаковываем:

tar -xJf factorio-headless.tar.xz
cd factorio

Внутри окажется папка bin/x64/factorio — сам исполняемый файл, data/ с базовыми ассетами и config/ для настроек. Версию headless-сборки желательно держать той же, что и у клиентов игры — Factorio строго проверяет совпадение версий при подключении, и даже минорное расхождение (например, 2.0.44 против 2.0.45) не даст зайти на сервер.

Проверить версию можно так:

./bin/x64/factorio --version

Поднять сервер Factorio за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Создание карты

Прежде чем запускать сервер, нужен файл сохранения (сейв) с картой. Создать его можно прямо через headless-бинарник, без графического клиента:

./bin/x64/factorio --create ~/factorio-server/factorio/saves/base.zip

Это сгенерирует карту со стандартными настройками генерации мира. Если нужны кастомные параметры — размер руды, частота нефти, враждебность биттеров и так далее — сначала подготовьте JSON с настройками карты (map-gen-settings.json и map-settings.json, их можно вытащить из клиентской игры через меню создания игры → "Экспорт в файл настроек карты") и передайте флагами:

./bin/x64/factorio --create ~/factorio-server/factorio/saves/base.zip \
  --map-gen-settings map-gen-settings.json \
  --map-settings map-settings.json

Дальше сервер запускается уже с готовым сейвом, а не пересоздаёт мир каждый раз — команда --create нужна только один раз, при инициализации.

Настройка server-settings.json

Конфиг сервера лежит в data/server-settings.example.json — скопируйте его в рабочий файл:

cp data/server-settings.example.json data/server-settings.json

Открываем и правим ключевые поля:

{
  "name": "Моя фабрика на MAATRIX",
  "description": "Дружелюбный сервер, вход по паролю",
  "tags": ["survival", "ru"],
  "max_players": 8,
  "visibility": {
    "public": false,
    "lan": true
  },
  "username": "",
  "password": "supersecret123",
  "token": "",
  "game_password": "supersecret123",
  "require_user_verification": true,
  "max_upload_slots": 5,
  "auto_pause": false,
  "autosave_interval": 10,
  "autosave_slots": 5,
  "afk_autokick_interval": 0,
  "auto_pause_when_players_connect": false
}

Что важно из этого:

  • visibility.publictrue, если хотите, чтобы сервер появился в общем списке серверов Factorio (потребует username/token от аккаунта factorio.com для авторизации в матчмейкинге). Для приватной игры с друзьями оставляйте false и подключайтесь по прямому IP.
  • game_password — пароль для входа игроков. Без него на публично видимый сервер может зайти кто угодно.
  • require_user_verification — проверка через Factorio-аккаунт, отсекает пиратские копии и часть читеров.
  • autosave_interval — интервал автосейвов в минутах. 10 минут — разумный баланс между сохранностью прогресса и нагрузкой на диск при большой карте.
  • max_players — 0 означает без ограничения.

Запуск сервера и проброс порта

Базовый запуск с указанием сейва и конфига:

./bin/x64/factorio --start-server ~/factorio-server/factorio/saves/base.zip \
  --server-settings data/server-settings.json

По умолчанию сервер слушает UDP-порт 34197. Если хотите другой порт (например, если на VPS уже занят стандартный):

./bin/x64/factorio --start-server ~/factorio-server/factorio/saves/base.zip \
  --server-settings data/server-settings.json \
  --port 34198

Полезные дополнительные флаги:

  • --rcon-port 27015 и --rcon-password mypassword — включает RCON для удалённого администрирования (полезно для ботов статистики или интеграции с Discord).
  • --server-whitelist whitelist.json вместе с --use-server-whitelist true — жёсткий белый список игроков вместо пароля.
  • --console-log console.log — писать консоль сервера в отдельный лог-файл, удобно для дебага крашей.

Если сервер запустился нормально, в консоли пойдут строки вида Hosting game и цикл тиков — значит, симуляция крутится и можно подключаться.

Теперь про сетевую часть. Сервер использует UDP 34197 (или тот, что указали флагом --port). Это единственный порт, который нужен для игры — RCON на отдельном порту нужен только если вы его включали.

Если VPS за NAT (редко, но бывает у некоторых домашних роутеров или отдельных облачных конфигураций) — пробросьте порт на роутере в разделе Port Forwarding: протокол UDP, порт 34197, на внутренний IP машины с сервером.

На самой VPS чаще всего достаточно открыть порт в файрволе. Для ufw:

sudo ufw allow 34197/udp

Для firewalld:

sudo firewall-cmd --permanent --add-port=34197/udp
sudo firewall-cmd --reload

Если провайдер даёт отдельную панель сетевых правил (Security Groups в облаке, файрвол в панели хостинга) — проверьте и там, иначе локальные правила ufw ничего не решат: трафик срежется раньше, на уровне облака.

Проверить, что порт реально слушается, можно с самого сервера:

ss -uln | grep 34197

Игроки подключаются через Play → Multiplayer → Connect to address, указывая IP-сервера:порт (порт можно не писать, если стандартный 34197).

Автозапуск через systemd

Ручной запуск в терминале умирает вместе с сессией SSH, если не обернуть его в screen/tmux или системный сервис. Второе надёжнее — сервер переживёт перезагрузку VPS сам, без вашего участия.

Создаём unit-файл:

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

Содержимое (замените youruser на реального пользователя, от которого крутится сервер — не root):

[Unit]
Description=Factorio headless server
After=network.target

[Service]
Type=simple
User=youruser
WorkingDirectory=/home/youruser/factorio-server/factorio
ExecStart=/home/youruser/factorio-server/factorio/bin/x64/factorio \
  --start-server /home/youruser/factorio-server/factorio/saves/base.zip \
  --server-settings /home/youruser/factorio-server/factorio/data/server-settings.json
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Включаем и запускаем:

sudo systemctl daemon-reload
sudo systemctl enable factorio
sudo systemctl start factorio

Смотреть логи и статус:

sudo systemctl status factorio
sudo journalctl -u factorio -f

Restart=on-failure вернёт сервер в строй, если он вдруг упадёт (например, из-за бага в моде), а enable гарантирует автозапуск при ребуте VPS — не нужно каждый раз заходить по SSH и поднимать процесс руками.

Обновление и бэкапы

Factorio регулярно выпускает патчи, и версия сервера обязана совпадать с версией у игроков — старая привычка "работает и ладно" тут не сработает, если Steam обновит клиенты автоматически, а сервер останется на старой сборке.

Обновление headless-сервера — это просто замена бинарника на новую версию с сайта factorio.com, тем же способом, что и при первой установке. Перед обновлением обязательно остановите сервис:

sudo systemctl stop factorio
# скачать и распаковать новую версию поверх старой папки factorio/
sudo systemctl start factorio

Бэкапы сейвов — отдельная привычка, которую стоит завести сразу, а не после первого краша диска. Простой вариант — cron-задача, копирующая папку saves/ куда-то за пределы самой VPS:

crontab -e
0 */6 * * * tar -czf /home/youruser/backups/factorio-$(date +\%Y\%m\%d-\%H\%M).tar.gz -C /home/youruser/factorio-server/factorio saves/

Это создаёт архив сейвов каждые 6 часов. Держите бэкапы не только на самой VPS, но и где-то ещё (облачное хранилище, другой сервер) — локальный бэкап не спасёт, если ляжет весь диск целиком.

Поднять сервер Factorio за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Сервер запустился, но игроки не могут подключиться.

Почти всегда это файрвол — либо не пробросили UDP 34197 на роутере, либо облачный провайдер блокирует порт на уровне Security Group отдельно от ufw. Проверьте ss -uln | grep 34197 на сервере и попробуйте телнетом/nc снаружи.

Можно ли поставить моды на сервер?

Да — кладёте .zip-файлы модов в папку mods/ рядом с saves/ и добавляете mod-list.json с перечнем включённых модов. Версии модов на сервере и у клиентов должны совпадать, иначе при подключении Factorio попросит их синхронизировать или откажет в коннекте.

Сколько игроков потянет сервер на 2 ГБ RAM?

На старте карты — 4-6 человек спокойно. По мере роста базы (сотни составов, крафтовые цепочки на десятки уровней) нагрузка растёт нелинейно, и лучше заранее запланировать апгрейд RAM, а не ждать, пока тикрейт начнёт проседать под вечер выходного дня.

Как сменить карту, не теряя старый сейв?

Просто создайте новый файл через --create с другим именем и укажите его в --start-server (или в конфиге сервиса). Старый .zip при этом никуда не денется — сможете вернуться к нему в любой момент.

Нужен ли Steam-аккаунт для headless-сервера?

Нет, сама headless-сборка бесплатна и работает без Steam. Лицензия Factorio нужна только у игроков, которые подключаются к серверу через клиент.