Установим PC dedicated server, подключим его через Server Manager и настроим systemd под тем же аккаунтом, которому принадлежат сохранения. Используем Ubuntu 24.04 x86_64, стандартные порты и сетевую схему Satisfactory 1.1.
Нужны публичный IPv4, SSH с sudo, доступ к firewall провайдера и лицензированный PC-клиент игры. Проверьте uname -m до выбора VPS: команды рассчитаны на x86_64. Оставьте место для обновлений и нескольких резервных копий. Пригодность машины оценивайте на своей фабрике во время игры; универсальная формула по числу игроков не гарантирует достаточную производительность.
Установите SteamCMD от имени пользователя satisfactory#
Из обычного SSH-аккаунта установите зависимости, создайте непривилегированного пользователя и переключитесь на него:
sudo apt update
sudo apt install curl ca-certificates tar ufw nano lib32gcc-s1 lib32stdc++6
sudo adduser --disabled-password --gecos '' satisfactory
sudo -iu satisfactory
mkdir -p /home/satisfactory/steamcmd /home/satisfactory/server
cd /home/satisfactory/steamcmd
curl -fL -o steamcmd.tar.gz \
https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd.tar.gz
./steamcmd.sh +force_install_dir /home/satisfactory/server \
+login anonymous +app_update 1690800 validate +quit
Загрузка отдельного архива соответствует методу Valve для SteamCMD. Ему нужны 32-битные библиотеки даже на этом 64-битном хосте. Дождитесь успешной установки приложения 1690800: это выделенный сервер, а не игровой клиент. Не добавляйте пользователя в группу sudo.
Сначала запустите сервер в терминале#
Оставаясь в оболочке satisfactory:
cd /home/satisfactory/server
./FactoryServer.sh -unattended -log -Port=7777 -ReliablePort=8888
Оставьте окно открытым. Для администрирования откройте вторую SSH-сессию под своим обычным аккаунтом с sudo.
| Входящий порт | Протокол | Назначение |
|---|---|---|
| 7777 | UDP | Игровой трафик и лёгкие запросы состояния |
| 7777 | TCP | HTTPS API управления |
| 8888 | TCP | Надёжная передача сообщений |
Запросы состояния и API описаны в справочнике dedicated server, а надёжный TCP-канал добавлен в анонсе 1.1 от Coffee Stain. Явный -ReliablePort=8888 останавливает запуск, если порт занят: такую причину проще найти, чем автоматически выбранную замену.
Таблица предполагает один сервер с публичным IPv4 без переназначения внешних портов. Разрешите каждое правило у провайдера и на Ubuntu. Сначала выполните sudo ufw status verbose. Если UFW уже включён, добавьте:
sudo ufw allow 7777/udp
sudo ufw allow 7777/tcp
sudo ufw allow 8888/tcp
sudo ufw status verbose
Если UFW неактивен и вы собираетесь его включить, замените 22 ниже портом своей SSH-сессии. До продолжения добавьте правила для остальных работающих сервисов. Затем разрешите SSH и игровые порты:
sudo ufw allow 22/tcp
sudo ufw allow 7777/udp
sudo ufw allow 7777/tcp
sudo ufw allow 8888/tcp
Только после успешного добавления всех нужных правил включите UFW:
sudo ufw enable
sudo ufw status verbose
Оставьте эту SSH-сессию открытой и проверьте вход во второй с тем же портом и ключом. При адаптации правил используйте инструкцию Ubuntu. UFW не меняет security group провайдера.
Настройте доступ и создайте контрольное сохранение#
В игре откройте Server Manager → Add Server. Укажите публичный адрес VPS и порт 7777. Проверьте адрес перед подтверждением первого самоподписанного сертификата. Задайте имя сервера и уникальные пароли администратора и игроков.
Создайте сессию или загрузите прежнее сохранение через Manage Saves, как описано в руководстве сервера. Войдите, поставьте узнаваемый объект и сделайте ручное сохранение с именем, например before-service.
Из административной SSH-сессии проверьте sudo ss -lntup: нужны TCP и UDP 7777, TCP 8888. Если вход не работает, пройдите диагностику подключения перед переустановкой.
Перенесите запуск в systemd с тем же HOME#
После завершения ручного сохранения нажмите Ctrl+C в окне сервера и дождитесь выхода. Под обычным sudo-аккаунтом откройте sudo nano /etc/systemd/system/satisfactory.service и вставьте:
[Unit]
Description=Satisfactory dedicated server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=satisfactory
Group=satisfactory
Environment=HOME=/home/satisfactory
WorkingDirectory=/home/satisfactory/server
ExecStart=/home/satisfactory/server/FactoryServer.sh -unattended -log -Port=7777 -ReliablePort=8888
KillSignal=SIGINT
TimeoutStopSec=120
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
HOME=/home/satisfactory сохраняет одинаковый путь к данным при запуске из терминала и сервиса. Руководство по сервису рекомендует SIGINT; штатная остановка всё равно не заменяет ручное сохранение.
sudo systemctl daemon-reload
sudo systemctl enable --now satisfactory
sudo systemctl status satisfactory --no-pager
sudo journalctl -u satisfactory -n 80 --no-pager
Подключитесь снова и проверьте контрольный объект. Успешный запуск процесса — только первая проверка: убедитесь, что загружена нужная фабрика. Обновление не включено в unit, чтобы перезапуск не подменял сборку незаметно.
Заархивируйте данные до обновления#
У этого пользователя сохранения мира находятся в /home/satisfactory/.config/Epic/FactoryGame/Saved/SaveGames/server. Родительский SaveGames также хранит данные идентичности сервера и каталог чертежей, если он создан. Это документированные пути Linux; они отделены от каталога установки.
Сделайте ручное сохранение с именем и дождитесь завершения. Под обычным sudo-аккаунтом выполните блок ниже. Подоболочка прекращает работу при ошибке остановки, архивации, проверки, запуска или копирования; её set -e не меняет вашу интерактивную оболочку:
(
set -e
sudo systemctl stop satisfactory
if sudo systemctl is-active --quiet satisfactory; then
printf 'Server is still running; archive aborted.\n' >&2
exit 1
fi
sudo install -d -o root -g root -m 700 /var/backups/satisfactory
satisfactory_archive="/var/backups/satisfactory/satisfactory-$(date -u +%Y%m%dT%H%M%SZ).tar.gz"
sudo tar -C /home/satisfactory/.config/Epic/FactoryGame/Saved \
-czf "$satisfactory_archive" SaveGames
sudo tar -tzf "$satisfactory_archive"
sudo chmod 600 "$satisfactory_archive"
sudo systemctl start satisfactory
sudo install -o "$(id -un)" -g "$(id -gn)" -m 600 \
"$satisfactory_archive" "$HOME/satisfactory-download.tar.gz"
)
Если команда завершилась ошибкой, сначала проверьте журнал. Не скачивайте неполный архив и не считайте последнее состояние фабрики сохранённым. Восстановите работу сервиса отдельно после диагностики. Успешный блок выводит файлы из SaveGames: найдите мир в SaveGames/server и файл настроек.
На своём компьютере укажите SSH-логин и адрес, затем скачайте копию под датированным локальным именем:
(
set -e
satisfactory_local_archive="satisfactory-$(date -u +%Y%m%dT%H%M%SZ).tar.gz"
scp YOUR_SSH_USER@YOUR_SERVER_IP:satisfactory-download.tar.gz \
"$satisfactory_local_archive"
tar -tzf "$satisfactory_local_archive"
)
Для нестандартного SSH-порта добавьте в строку scp параметр -P YOUR_SSH_PORT и замените значение; -P пишется с заглавной буквой. Используйте свой SSH-алиас или добавьте тот же -i /path/to/key, если обычный вход требует явного ключа. Параметры описаны в справочнике OpenSSH.
tar -tzf проверяет читаемость архива и выводит его файлы. Это не подтверждает успешное восстановление игры или наличие последнего нужного контрольного сохранения. Только после успешного скачивания и проверки удалите временную копию на VPS командой rm "$HOME/satisfactory-download.tar.gz" в SSH-сессии; оставьте датированный архив root. Храните скачанные копии приватно: настройки могут содержать данные доступа.
Обновите сервер из каталога SteamCMD#
После ручного сохранения и готовой резервной копии остановите сервис из обычной sudo-оболочки и переключите пользователя:
sudo systemctl stop satisfactory
sudo -iu satisfactory
Только при успешной остановке выполните от имени satisfactory:
cd /home/satisfactory/steamcmd
./steamcmd.sh +force_install_dir /home/satisfactory/server \
+login anonymous +app_update 1690800 validate +quit
Дождитесь сообщения SteamCMD об успешном завершении. При ошибке разберитесь с обновлением до запуска. После успеха вернитесь в административную оболочку:
exit
Затем запустите и проверьте сервис:
sudo systemctl start satisfactory
sudo systemctl status satisfactory --no-pager
sudo journalctl -u satisfactory -n 80 --no-pager
Сравните сборку и ветку клиента с сервером, подключитесь и найдите нужный контрольный объект на фабрике.
Проверьте восстановление до того, как полагаться на архив#
С совместимой сборкой игры остановите сервис и сохраните текущий каталог данных. Распакуйте выбранный архив в /home/satisfactory/.config/Epic/FactoryGame/Saved, чтобы его SaveGames оказался внутри Saved, затем верните владельца satisfactory:satisfactory. Запустите сервис, выберите нужную сессию и найдите контрольный объект в игре. Такая проверка подтверждает больше, чем список файлов архива. Собственные сертификаты и конфигурацию установки сохраняйте отдельно, если добавите их позже.
Для поддерживаемых инстансов на вашем VPS можно использовать панель управления серверами. Подключение машины к панели — отдельный шаг; сохраните описание резервных копий и сетевых правил из этой инструкции.




