Factorio – стратегия с элементами симулятора автоматизации, в которой игроки добывают ресурсы, строят производственные цепочки и постепенно превращают небольшую фабрику в масштабный промышленный комплекс. Игра поддерживает совместное прохождение, поэтому собственный сервер позволяет играть с друзьями или организовать постоянный игровой мир.
В этой статье рассмотрим, как создать сервер Factorio на Ubuntu 24.04 с VPS/VDS от Beget. Для установки будем использовать headless-версию сервера с официального сайта – сборку без графического интерфейса и звука.
Для небольшого количества игроков на сервере рекомендуем использовать следующую начальную конфигурацию:
- 2 ядра;
- 2 ГБ оперативной памяти;
- 30 ГБ свободного места на диске.
Указанная конфигурация является минимальной. Требования зависят от количества одновременно подключенных игроков, размеров фабрики, сложности производственных цепочек, используемых модификаций и других факторов. При высокой нагрузке может потребоваться повысить конфигурацию VPS-сервера.
Подготовка системы
Подключитесь к VPS по SSH под пользователем root (или под пользователем с правами sudo – тогда добавляйте sudo к командам в этом разделе).
Обновите список пакетов и установите доступные обновления:
apt update && apt upgrade -yУстановите необходимые утилиты:
apt install wget tar xz-utils -yВ Ubuntu 24.04 эти утилиты обычно уже установлены, поэтому новые пакеты могут не устанавливаться.
Создание пользователя для сервера
Рекомендуем запускать игровой сервер от отдельного пользователя. Создайте пользователя factorio и сразу задайте ему пароль – он понадобится для загрузки файлов по SFTP:
useradd -m -s /bin/bash factorio
passwd factorioПереключитесь на созданного пользователя:
su - factorioСоздайте директорию для сервера и перейдите в нее:
mkdir ~/server
cd ~/serverВыбор версии сервера
Клиент подключается только к серверу точно такой же версии, поэтому версию сервера выбираем по версии клиента, на котором планируете играть. Посмотрите версию клиента в главном меню игры – она указана в левом нижнем углу:
- если у клиента последняя стабильная версия, устанавливайте последнюю стабильную версию сервера;
- если у клиента другая версия (например, она зафиксирована в бета-ветках Steam или клиент давно не обновлялся), устанавливайте сервер этой же конкретной версии.
Учтите, что клиент в Steam обновляется автоматически: после выхода обновления игры клиент перестает подключаться к серверу, пока вы не обновите сервер до той же версии (см. раздел «Обновление сервера»). Несовпадение версий – самая частая причина проблем с подключением.
Установка сервера Factorio
Команды в этом разделе выполняются от пользователя factorio в директории ~/server. В зависимости от выбранной версии воспользуйтесь одним из двух вариантов установки.
Установка последней стабильной версии
Чтобы запустить сервер Factorio, скачайте архив с сервером последней стабильной версии прямо на VPS:
wget https://www.factorio.com/get-download/stable/headless/linux64 -O factorio.tar.xz/home/factorio/server по FTP/SFTP под пользователем factorio. Если вы загрузили файлы под другим пользователем, обязательно верните права: chown -R factorio:factorio /home/factorio/server.
Установка определенной версии
Скачайте архив с сервером нужной версии прямо на VPS, указав номер версии в ссылке (вместо 2.0.72 подставьте версию вашего клиента):
wget https://www.factorio.com/get-download/2.0.72/headless/linux64 -O factorio.tar.xz/home/factorio/server по FTP/SFTP под пользователем factorio. При необходимости верните права командой chown -R factorio:factorio /home/factorio/server.

Распаковка и проверка
Распакуйте скачанный архив:
tar -xf factorio.tar.xzЧтобы проверить корректность установки, перейдите в каталог сервера и проверьте его версию:
cd factorio
bin/x64/factorio --versionЕсли команда вывела номер версии, установка выполнена успешно. Убедитесь, что этот номер совпадает с версией клиента.
Создание карты мира и настройка конфигурации сервера
После установки сервера необходимо создать игровой мир:
bin/x64/factorio --create saves/world.zipДиректория saves будет создана автоматически. Если в ней появился файл world.zip, карта создана успешно.
C:\Users<username>\AppData\factorio\saves, для Windows (Steam) - C:\Users<username>\AppData\Roaming\factorio\saves. После загрузите файл сохранения в директорию
/home/factorio/server/factorio/saves на VPS по SSH/SFTP под пользователем factorio (если загружали под другим пользователем, верните права: chown -R factorio:factorio /home/factorio/server). В этом случае команду с --create выполнять не нужно, а при тестовом запуске в разделе «Проверка запуска» укажите имя загруженного файла вместо world.zip или переименуйте загруженный файл карты мира в world.zip. Служба автозапуска может использовать сохранение, отличное от world.zip, автоматически – она всегда загружает самый свежий файл из /home/factorio/server/factorio/saves.Далее, чтобы создать сервер Факторио, необходимо задать конфигурацию сервера:
mkdir -p config
cp data/server-settings.example.json config/server-settings.jsonФайл config/server-settings.json содержит основные настройки игрового сервера. Ниже приведен фрагмент файла с параметрами, которые чаще всего требуется изменить (полный файл содержит больше параметров, не удаляйте их):
{
"name": "Name of the game as it will appear in the game listing",
"description": "Description of the game that will appear in the listing",
"max_players": 0,
"visibility": {
"public": true,
"lan": true
},
"username": "",
"password": "",
"token": "",
"game_password": ""
}Назначение параметров:
- name – название сервера в общем списке серверов;
- description – описание сервера в общем списке;
- max_players – максимальное число игроков, 0 означает без ограничений;
- visibility.public – публикация сервера в общем списке серверов Factorio. Если вы играете по IP-адресу (например, с друзьями), укажите false;
- visibility.lan – видимость сервера в локальной сети: сервер появится во вкладке Игры в локальной сети (LAN games) у игроков, подключенных к той же локальной сети, что и сервер. Поскольку игроки не находятся в одной локальной сети с VPS, для сервера на VPS параметр не работает и его значение можно не менять;
- username и token – данные аккаунта Factorio, требуются только при
"public": true; - password – пароль от аккаунта Factorio, альтернатива токену. Рекомендуем использовать token и оставить это поле пустым;
- game_password – пароль для входа на сервер Factorio. Если сервер публичный, обязательно задайте его, иначе подключиться сможет любой желающий.
Обратите внимание на синтаксис JSON: строковые значения в кавычках, запятая после каждого параметра, кроме последнего в блоке. Пропущенная или лишняя запятая приведет к ошибке запуска.
Получение токена авторизации
Этот раздел нужен только если вы хотите публиковать сервер в общем списке серверов ("public": true). Для игры по IP-адресу токен не требуется – оставьте username и token пустыми и переходите к следующему разделу.
Токен привязан к учетной записи Factorio, к которой привязана лицензия игры.
- Перейдите на страницу авторизации на официальном сайте и войдите в аккаунт. Для входа можно использовать аккаунт Steam, если к нему привязана лицензия Factorio.

- После входа откройте страницу профиля.
- В строке Token нажмите Reveal для отображения токена, затем скопируйте токен.

Полученный токен и имя пользователя укажите в файле config/server-settings.json:
"username": "ваш_логин",
"token": "ваш_токен",Проверка запуска
Для проверки работы сервера выполните его запуск от пользователя factorio из директории ~/server/factorio, используя созданную карту и файл конфигурации:
bin/x64/factorio --start-server saves/world.zip --server-settings config/server-settings.jsonЕсли сервер успешно запустился, в терминале появится строка Hosting game at IP ADDR.
Для публичного сервера дополнительно появится строка Matching server connection resumed.
Строка означает, что сервер зарегистрировался в общем списке. Для сервера с "public": false этой строки не будет, и это нормально.
Для остановки сервера используйте сочетание клавиш Ctrl + C – при этом сервер сохранит мир и корректно завершит работу.
Настройка автозапуска
Чтобы сервер продолжал работать после завершения SSH-сеанса, настроим его запуск через systemd.
Перед созданием службы выйдите из учетной записи пользователя factorio – выполните команду exit или нажмите Ctrl + D.
Для создания службы factorio откройте файл /etc/systemd/system/factorio.service:
sudo vim /etc/systemd/system/factorio.serviceВ файл добавьте:
[Unit]
Description=Factorio Server
After=network.target
[Service]
Type=simple
User=factorio
Group=factorio
WorkingDirectory=/home/factorio/server/factorio
ExecStart=/home/factorio/server/factorio/bin/x64/factorio \
--start-server-load-latest \
--server-settings /home/factorio/server/factorio/config/server-settings.json
KillSignal=SIGINT
TimeoutStopSec=120
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetПояснения к важным параметрам:
--start-server-load-latest– при запуске сервер загружает самое свежее сохранение из директории saves (при первом запуске это будет созданный ранее world.zip). Это важно: во время игры сервер Факторио пишет автосохранения в отдельные файлы_autosave1.zip–_autosave5.zip, а основной файл обновляет только при корректной остановке. Если жестко указать--start-server saves/world.zip, то после аварийного завершения (сбой, нехватка памяти) systemd перезапустит сервер со старой версии мира и прогресс откатится. С--start-server-load-latestсервер продолжит игру с последнего автосохранения;KillSignal=SIGINT– при остановке службы сервер получит тот же сигнал, что и при нажатииCtrl + C, сохранит мир и корректно завершится;TimeoutStopSec=120– запас времени на сохранение мира при остановке. На больших картах сохранение может занимать заметное время, и без этого параметра systemd может завершить процесс принудительно, не дождавшись записи файла;Restart=always– автоматический перезапуск службы при сбое.
Если вы использовали другие имена директорий при создании виртуального сервера, то пути в параметрах WorkingDirectory и ExecStart потребуется изменить.
Перезагрузите конфигурацию systemd:
sudo systemctl daemon-reloadВключите автозапуск и запустите службу:
sudo systemctl enable factorio
sudo systemctl start factorioПроверьте состояние службы:
sudo systemctl status factorioДля просмотра журнала используйте:
journalctl -u factorio -fСервер успешно запущен, если в журнале появилась строка Hosting game at IP ADDR.
Подключение к серверу
Для подключения к серверу игры Factorio по сети в главном меню выберите Сетевая игра (Multiplayer), после чего нажмите Подключиться по адресу (Connect to address).

Введите IP-адрес вашего VPS. Если вы изменили стандартный порт, укажите адрес в формате IP:порт:

Если вы установили пароль в параметре game_password, игра запросит его перед входом на сервер Факторио:

Установка модов (опционально)
Модификации (моды) позволяют добавлять новый контент, изменять игровой процесс и расширять возможности сервера. Официальным каталогом модов для Factorio является Mod Portal.
Для установки мода авторизуйтесь на Mod Portal и откройте страницу нужного мода. Сначала проверьте совместимость: поддерживаемая версия Factorio указана на странице мода – она должна соответствовать версии вашего сервера. Затем скачайте мод:
- если последняя версия мода совместима с сервером, нажмите кнопку Download – будет загружен ZIP-архив с последней версией;
- если нет, откройте на странице мода вкладку Downloads – в ней перечислены все версии мода с указанием поддерживаемой версии игры – и скачайте версию мода, подходящего вашей версии сервера.
Рекомендуем сразу проверить на странице мода блок Dependencies – в нем перечислены обязательные зависимости, без которых мод не заработает. Зависимости не скачиваются автоматически: каждую из них скачайте отдельно тем же способом, с той же проверкой совместимости.
Перед установкой модов остановите службу:
sudo systemctl stop factorioСкачанный мод разместите в директории /home/factorio/server/factorio/mods. Для загрузки архива можно воспользоваться SSH/SFTP или файловым менеджером под пользователем factorio. Архив после загрузки на VPS распаковывать не требуется.
Если моды загружались не под пользователем factorio, верните права:
sudo chown -R factorio:factorio /home/factorio/server/factorio/modsВажные особенности:
- Без зависимостей сервер не запустится. Если в
mods/не окажется модов из блока Dependencies, сервер завершит работу с ошибкой о недостающем моде. Если зависимость требует конкретную версию, в журнале появится ошибка видаMissing required dependency <имя> = <версия>. - Игрокам не нужно устанавливать моды вручную – при подключении клиент сравнит свой набор модов с серверным и предложит скачать недостающие с Mod Portal. Для скачивания игрок должен быть авторизован в аккаунте Factorio (владельцам Steam-версии достаточно один раз войти в аккаунт в настройках игры).
- Файл
mods/mod-list.jsonсоздается сервером при первом запуске и хранит список модов. При каждом запуске сервер сверяет его с содержимымmods/: новые моды добавляются в список и включаются автоматически("enabled": true), записи удаленных модов убираются – редактировать список для установки мода не нужно. Вручную файл правят только чтобы временно отключить мод, не удаляя архив: замените у него"enabled": trueна"enabled": false.
Затем снова запустите сервер:
sudo systemctl start factorioРезервное копирование сохранений
По умолчанию headless-сервер автоматически сохраняет мир каждые 10 минут и хранит 5 последних автосохранений – это значения параметров autosave_interval и autosave_slots в файле config/server-settings.json. Автосохранения записываются в файлы _autosave1.zip–_autosave5.zip в директории saves/ по кругу, а основной файл (world.zip) обновляется только при корректной остановке сервера. Изменить интервал и количество копий можно в config/server-settings.json либо переопределить параметрами запуска --autosave-interval (в минутах) и --autosave-slots.
Автосохранения лежат на том же диске и не защищают от потери данных. Настройте копирование сохранений в отдельную директорию. Поскольку актуальное состояние мира на работающем сервере находится в автосохранениях, а не в world.zip, копировать нужно самый свежий файл из saves/.
Создайте скрипт /home/factorio/backup.sh:
#!/bin/bash
# Директория для резервных копий и директория с сохранениями сервера
BACKUP_DIR=/home/factorio/backups
SAVES_DIR=/home/factorio/server/factorio/saves
# Переходим в корневую директорию, чтобы скрипт корректно работал
# независимо от того, из какого каталога он был запущен
cd / || exit 1
# Создаем директорию для копий, если она еще не существует
mkdir -p "$BACKUP_DIR"
# Находим самое свежее сохранение: ls -t сортирует файлы по времени
# изменения (новые сверху), head -n 1 берет первый файл из списка
LATEST=$(ls -t "$SAVES_DIR"/*.zip 2>/dev/null | head -n 1)
# Если сохранений в директории нет, завершаем скрипт без ошибки
[ -z "$LATEST" ] && exit 0
# Копируем найденный файл, добавляя к его имени дату и время копии,
# например: _autosave2-2026-07-16-1400.zip
cp "$LATEST" "$BACKUP_DIR/$(basename "$LATEST" .zip)-$(date +%F-%H%M).zip"
# Удаляем копии старше 7 суток, чтобы они не заполнили диск
find "$BACKUP_DIR" -name '*.zip' -mtime +7 -delete
Скрипт находит самое свежее сохранение (это может быть как world.zip, так и одно из автосохранений _autosave*.zip) и копирует его с отметкой времени в имени файла.
Назначьте владельца и сделайте скрипт исполняемым:
sudo chown factorio:factorio /home/factorio/backup.sh
sudo chmod +x /home/factorio/backup.shДобавьте задание в cron пользователя factorio – выполните sudo -u factorio crontab -e и добавьте строку:
0 * * * * /home/factorio/backup.shЕсли crontab запускается впервые, система предложит выбрать редактор – выберите любой подходящий вам редактор, например, nano (вариант 1):
no crontab for factorio - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:Копия сохранения будет создаваться раз в час, в начале каждого часа; копии старше 7 дней – удалятся.
Интервал в один час и глубина хранения 7 суток – компромисс, который подходит для большинства серверов, но его можно скорректировать под свою ситуацию:
- Интервал определяет, сколько игрового прогресса будет потеряно в худшем случае. Небольшие откаты (до 10 минут) закрывают автосохранения самого сервера, а резервная копия защищает от потери всей директории
saves/. Если сервер активно используется и терять час игры жалко, уменьшите интервал в cron, например, до 30 минут:*/30 * * * *. - Глубина хранения позволяет откатиться не только к последней копии, но и к состоянию нескольких дней назад – например, если сохранение было повреждено или испорчено неудачным модом, а заметили это не сразу. За неделю при часовом интервале накопится до 168 копий: для небольшой фабрики это единицы гигабайт, но сохранение крупной базы с модами может весить сотни мегабайт – в этом случае увеличьте интервал или уменьшите число в
-mtime +7, чтобы копии не заполнили диск.
Для защиты от отказа VPS дополнительно копируйте директорию /home/factorio/backups на другой сервер или в хранилище.
Проверка резервного копирования
Не дожидаясь срабатывания cron, запустите скрипт вручную:
sudo -u factorio /home/factorio/backup.shКоманда не должна вывести ошибок. Затем убедитесь, что в директории /home/factorio/backups появился файл с текущими датой и временем в имени:
ls -lh /home/factorio/backupsЗадание выполняется в начале каждого часа – после ближайшего срабатывания проверьте, что в /home/factorio/backups появилась еще одна копия. Факт запуска задания также можно найти в журнале службы cron:
journalctl -u cron | grep backup.shПериодически проверяйте, что копии пригодны для восстановления: скопируйте файл из /home/factorio/backups обратно в /home/factorio/server/factorio/saves и убедитесь, что сервер его загружает.
Обновление сервера
При обновлении клиента в Steam сервер тоже нужно обновить – иначе подключиться не получится.
Остановите службу:
sudo systemctl stop factorioСделайте резервную копию сохранений, конфигурации и модов:
sudo -u factorio /home/factorio/backup.sh
sudo -u factorio cp -r /home/factorio/server/factorio/config /home/factorio/config-backup-$(date +%F)
sudo -u factorio cp -r /home/factorio/server/factorio/mods /home/factorio/mods-backup-$(date +%F)Копия модов нужна на случай отката на старую версию до обновления: если после обновления окажется, что нужные моды еще не поддерживают новую версию игры, вы сможете вернуть прежнюю версию сервера вместе с прежними версиями модов и файлом mod-list.json. Дата в имени директории позволяет выполнять команды при каждом обновлении, не затирая предыдущие копии. Обратите внимание: старые директории config-backup-* и mods-backup-* автоматически не удаляются – периодически удаляйте неактуальные копии вручную.
Скачайте и распакуйте новую версию поверх текущей установки:
sudo su - factorio
cd ~/server
wget https://www.factorio.com/get-download/stable/headless/linux64 -O factorio.tar.xz
tar -xf factorio.tar.xzАрхив распаковывается в директорию /home/factorio/server/factorio и заменяет только файлы самой игры. Директории saves, config и mods находятся внутри /home/factorio/server/factorio и в архиве отсутствуют, поэтому они сохранятся. Тем не менее резервную копию перед обновлением делать обязательно.
Проверьте новую версию и запустите службу:
cd factorio
bin/x64/factorio --version
exit
sudo systemctl start factorioПосле обновления игры моды тоже могут потребовать обновления – проверьте журнал journalctl -u factorio -f на ошибки совместимости.
Проверка обновления
Обновление прошло успешно, если выполняются все условия:
bin/x64/factorio --versionвыводит новый номер версии;- служба находится в состоянии
active (running)– проверьте командойsudo systemctl status factorio; - в журнале
journalctl -u factorio -n 50есть строкаHosting game at IP ADDRи нет ошибок; - сохранения и моды есть в директориях:
ls /home/factorio/server/factorio/saves /home/factorio/server/factorio/mods; - клиент той же версии подключается к серверу и загружается актуальное состояние мира, а не старое.
Типичные ошибки
- Клиент не видит сервер в списке или пишет о несовместимости
Версии сервера и клиента не совпадают. Симптом зависит от способа подключения: публичный сервер с несовпадающей версией просто не отображается в списке Просмотр открытых игр (Browse public games) (клиент скрывает несовместимые серверы), а при подключении по IP игра показывает сообщение о несовместимости версий.
Так выглядит эта ошибка при подключении по IP:

Сравните вывод bin/x64/factorio --version с версией в главном меню игры и обновите сервер до нужной версии (см. раздел «Соответствие версий сервера и клиента» и «Обновление сервера»).
- Error Util.cpp: Opening package ... for writing failed – серверу не удается записать файл
Сервер не смог открыть файл на запись – путь к нему указан в тексте ошибки. Это может быть любой файл, в который сервер пишет данные: сохранения в /home/factorio/server/factorio/saves, mod-list.json, player-data.json и другие. Опаснее всего, когда это касается сохранений (в журнале рядом будет строка Warning WriteFileGuard.cpp: Writing ... failed): сервер при этом может успешно запуститься и принимать игроков, потому что для чтения прав и ресурсов хватает, – ошибка проявляется только при записи, при автосохранении или при остановке. Внешне сервер работает, но сохранения не записываются, и при каждом перезапуске прогресс откатывается. Если в журнале появилась эта ошибка или файлы _autosave*.zip в saves/ перестали обновляться, проверьте возможные причины:
- Неверные права на файлы или директории – самая частая причина, обычно результат загрузки файлов по SSH/SFTP под
root. Проверьте владельца файла и директории по пути из текста ошибки, например,/home/factorio/server/factorio/saves, и при необходимости исправьте права:
sudo chown -R factorio:factorio /home/factorio/server- Закончилось место на диске – проверьте командой
df -h. Если диск заполнен, удалите ненужные файлы (например, старые резервные копии) или увеличьте размер диска в панели управления VPS.
- Hosting multiplayer game failed: Unexpected character – сервер не запускается после правки server-settings.json
Ошибка синтаксиса JSON – чаще всего пропущенная или лишняя запятая либо потерянные кавычки. Сервер сам указывает в тексте ошибки путь к файлу и позицию, где встретился неожиданный символ. Найти ошибку также можно командой:
python3 -m json.tool config/server-settings.jsonОна укажет строку и колонку с проблемой. Исправьте файл и перезапустите службу: sudo systemctl restart factorio. Учтите, что до исправления служба с Restart=always будет перезапускаться циклически.
- Error Util.cpp: Failed to load mod в журнале – сервер падает при старте после установки мода
Под строкой с ошибкой сервер перечисляет конкретные причины: Incompatible Factorio version – мод не поддерживает установленную версию игры, Missing required dependency <имя> – в директории /home/factorio/server/factorio/mods отсутствует обязательная зависимость (если после имени указано = <версия>, требуется строго эта версия). Скачайте недостающие зависимости с Mod Portal или обновите сервер до версии, которую требует мод. Если мод не нужен, удалите его архив из mods/ или укажите ему "enabled": false в mods/mod-list.json. Учтите: пока ошибка не устранена, служба с Restart=always будет перезапускаться циклически.
- Error InterruptibleStdioStream.cpp: Got EOF on stdin; closing в журнале
Не является проблемой при запуске через systemd. Сервер читает консольные команды из стандартного ввода, но у службы нет терминала с вводом, поэтому сервер закрывает консоль – строка появляется сразу после запуска и на работу не влияет. Если служба в состоянии active (running) и игроки подключаются, ошибку можно игнорировать.
- Служба перезапускается в цикле
Смотрите причину в журнале: journalctl -u factorio -n 50. Чаще всего это неверные пути в ExecStart, ошибка в конфигурации или некорректно установленные моды.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел «Помощь и поддержка»), а если вы захотите обсудить наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем сообществе в Telegram.