Выделенные сервера

Это краткая инструкция по установке **выделенного сервера** для Satisfactory.

Сейчас, сервер можно установить на операционные системы под управлением **Windows** и **Linux** и только через десктопное приложение Steam или SteamCMD (командная строка). Поддерживается только экспериментальная версия игры!

Перед тем как начать, вам необходимо удостовериться что следующие порты открыты на вашем сервере и маршрутизаторе сети, и правила для брандмауэра были настроены корректно. Перенаправление портов в настоящее время не поддерживается, и порты которые указаны в этой инструкции должны совпадать с вашими открытыми (например: вы открыли порт 7778 вместо 7777). Каждый из этих портов можно переопределить с помощью параметра в соответствии с таблицей ниже. Если вы хотите запустить несколько экземпляров сервера на одном компьютере, вам придется переопределить хотя бы один порт.

Серверу требуется минимум **4 ГБ ОЗУ** и **10 ГБ дискового пространства**. Рекомендуется запускать сервер с **6+ ГБ ОЗУ** и большим объемом памяти для поддержки > 4 игроков и / больших / или сложных фабрик.

 7777 | -Port=4444 | Этот порт не может быть перенаправлен в данный момент. Он автоматически увеличивается, если запущено несколько экземпляров сервера и значение по умолчанию уже используется.

## Ручная установка

### Steam

**Этот способ сейчас недоступен. Мы уже знаем об этой проблеме, и над ней работаем.**

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

### SteamCMD

Если вы устанавливаете сервер в автономной среде, вы, скорее всего, захотите использовать SteamCMD, независимо от платформы, которую вы используете. Сам SteamCMD тщательно задокументирован на вики-странице SteamCMD.

Если SteamCMD установлен и готов к использованию, вы можете установить сервер, используя следующую команду (Windows: вставьте эту строку в командной строке Windows):

```
steamcmd +login anonymous +force_install_dir SatisfactoryDedicatedServer +app_update 1690800 +quit

```
Эта команда работает как для Windows, так и для Linux и устанавливает сервер в каталог: `~/.steam/steamcmd/SatisfactoryDedicatedServer`

## Запуск сервера

Если вы используете Steam, просто запустите его, как любую другую игру. Однако для большинства целей это не очень полезно. Вместо этого вы можете захотеть запустить сервер из командной строки.

### Windows

В каталоге установки введите в командную строку:

`FactoryServer.exe -log -unattended`

Параметры `-log` и `-unattended` не требуются, но, как правило, они весьма полезны. Первый откроет окно консоли, которое будет полезно, если вы хотите проверить, чем занимается ваш сервер. Последний будет следить за тем, чтобы диалоговые окна пользовательского интерфейса не открывались. Это важно, потому что в большинстве случаев перед сервером нет пользователей, которые могли бы отвечать на эти диалоги, поэтому сервер просто зависает в ожидании ввода пользователя.

### Linux

Запустите:

`./FactoryServer.sh`

В Linux и `-log`, и `-unattended` добавляются автоматически, поэтому все, что вам нужно сделать, это просто запустить исполняемый файл.

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

## Начальная конфигурация

Первоначальная конфигурация выполняется в игре первым игроком, подключающимся к серверу, и в основном она сводится к присвоению серверу имени и пароля администратора. Дополнительные настройки доступны в диспетчере игровых серверов. Сервер сам по себе не запускает никаких игр. Администратор должен будет создать игру через игровой интерфейс. Защита паролем игрока не включена по умолчанию, но пароль игрока может быть установлен через тот же интерфейс.

Многие другие параметры можно изменить вручную, отредактировав файлы ini, которые находятся в каталоге установки:

**Расположение файлов конфигурации для каждой платформы**
 Linux | FactoryGame/Saved/Config/LinuxServer/

Сервер в основном использует те же параметры конфигурации, что и игра. По умолчанию сервер выгружает отчеты о сбоях при работе в Linux. Если вы хотите отключить это, добавьте следующие строки в файл конфигурации Engine.ini:

```
[CrashReportClient]
bAgreeToCrashUpload=false

```

## Загрузка файла сохранения

* Шаг 1: Найдите нужный файл сохранения и имя сеанса на вкладке «Загрузить» в главном меню.
	+ Имя сеанса имеет решающее значение, файлы сохранения отображают его только в том случае, если они не были переименованы во время сохранения, в противном случае единственный способ увидеть имя сеанса - из меню загрузки или редактора сохранения.
* Шаг 2: Найдите файл сохранения в папке SaveGames и скопируйте .sav
	+ Windows:
	```
	%LOCALAPPDATA%\FactoryGame\Saved\SaveGames
	```
	+ Linux:
	```
	~.config/Epic/FactoryGame/Saved/SaveGames
	```

* Шаг 3: Вставьте / перенесите файл сохранения в папку SaveGames \ server
	+ Windows (локально):
	```
	%LOCALAPPDATA%\FactoryGame\Saved\SaveGames\server
	```
	+ Windows (служба):
	```
	C:\Windows\ServiceProfiles\NetworkService\AppData\Local\FactoryGame\Saved\SaveGames\server

	```
	+ Linux:
	```
	~.config/Epic/FactoryGame/Saved/SaveGames/server
	```
* Шаг 4: Вставьте имя сеанса из шага 1 на вкладку настроек сервера в диспетчере сервера, затем нажмите `↵ Enter`. Сервер должен начать поиск файла сохранения с соответствующим именем сеанса.
	+ Повторюсь, имя сеанса и имя файла сохранения не совпадают, имя сеанса не может быть изменено без редактора сохранения, переименование файла .sav не меняет имени сеанса.

Другие платформы / установки будут иметь другую структуру папок, ключевым моментом этого руководства является поиск имени сеанса. Это временный / ручной метод, пока функция управления сохранениями не реализована.

## Настройка сервера как службы с помощью SystemD

Этот раздел подходит только для Linux, а именно к дистрибутивам под управлением `systemd` в качестве системы инициализации. Сервер может быть настроен для работы в качестве службы в Windows, но такой способ пока не рассматривался.

Для простоты, предположим, что мы настраиваем этот сервер для пользователя по имени `steam`, с домашней папкой по умолчанию, которая находится по пути `/home/steam`. Начните с создания сценария запуска сервера; разместите его по пути `/home/steam/SatisfactoryDedicatedServer/start_server.sh`. Сценарий должен содержать следующее:

```
#!/bin/bash

export InstallationDir=/home/steam/SatisfactoryDedicatedServer
export templdpath=$LD\_LIBRARY\_PATH
export LD\_LIBRARY\_PATH=$InstallationDir/linux64:$LD\_LIBRARY\_PATH
# Install or update the server before launching it
/usr/games/steamcmd +login anonymous +force_install_dir $InstallationDir +app_update 1690800 validate +quit
# Launch the server
$InstallationDir/FactoryServer.sh

export LD\_LIBRARY\_PATH=$templdpath

```
Когда `/home/steam/SatisfactoryDedicatedServer/start_server.sh` был создан, вам нужно будет установить его как исполняемый файл, запустив:

`chmod +x /home/steam/SatisfactoryDedicatedServer/start_server.sh`

Для выполнения следующих шагов вам потребуется рут-доступ. Создайте файл под названием `/etc/systemd/system/satisfactory.service`

Он должен содержать следующее:

```
[Unit]
Description=Satisfactory Server
Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
Restart=always
RestartSec=10
User=steam
WorkingDirectory=/home/steam/SatisfactoryDedicatedServer
ExecStart=/home/steam/SatisfactoryDedicatedServer/start_server.sh

[Install]
WantedBy=multi-user.target

```
Наконец, включите службу:

```
sudo systemctl enable satisfactory.service --now

```
Это должно запустить сервер. Если вы не установили его заранее, сервер также будет установлен после запуска службы. При каждом перезапуске службы сервер будет обновляться с помощью steamcmd. Чтобы перезапустить сервер, можно просто выполнить:

```
sudo systemctl restart satisfactory.service.

```
Это можно делать автоматически каждую ночь в 04:00 (примерно 13:00 по МСК), например, добавив команду в рут crontab:

```
.

# Добавьте эту строку в файл, а затем сохраните его.

0 4 * * * systemctl restart satisfactory.service

```

### Альтернативная конфигурация SystemD

На самом деле нет необходимости в дополнительном сценарии bash (start\_server.sh, упомянутом выше), поскольку конфигурация, выполненная в этом сценарии, может быть выполнена непосредственно в satisfactory.service:

```
[Unit]
Description=Satisfactory dedicated server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
Environment="LD\_LIBRARY\_PATH=./linux64"
ExecStartPre=/usr/games/steamcmd/steamcmd.sh +login anonymous +force_install_dir "/home/your\_user/satisfactory" +app_update 1690800 validate +quit
ExecStart=/home/your_user/satisfactory/FactoryServer.sh
User=your_user
Group=your_user
StandardOutput=journal
Restart=on-failure
KillSignal=SIGINT
WorkingDirectory=/home/your_user/satisfactory

[Install]
WantedBy=multi-user.target

```
Обратите внимание, что эта конфигурация будет проверять и обновлять ваш выделенный сервер при каждом перезапуске.

## Автоматическая установка через LinuxGSM

LinuxGSM - это популярный скрипт управления игровыми серверами, не требующий особых усилий. Он требует лишь элементарных навыков работы с Linux от администратора и полностью используется через интерфейс командной строки (обычно через SSH).

После установки сервера войдите в систему с рут-правами или правами "супер-пользователя" и приступайте к выполнению предписанных шагов в LGSM документации. Он загрузит SteamCMD, а также файлы сервера Satisfactory. На первых этапах вы также установите все зависимости, чтобы все работало без дополнительных усилий.

После завершения настройки вы можете запустить свой сервер с помощью команды `./sfserver start`.

## Автоматическая установка через AMP

 Файл:СозданиеAMP.png  AMP - это популярная и простая в установке панель управления игровыми серверами, которую можно запустить на собственном ПК/сервере, поддерживающая Satisfactory. Знание кодирования не требуется, и это позволит легко запустить сервер из веб-интерфейса или с мобильного устройства. Вы можете запускать его как на Windows, так и на Linux, а также позволять другим людям управлять вашими игровыми серверами, не предоставляя им доступ ко всей системе, и по желанию запускать сервер в изолированном "контейнере" Docker.

После того, как вы установите и запустите AMP (обучение и советы), выберите "Create Instance" ("Создать инстанцию") и выберите "Satisfactory" в появившемся списке игр. После этого опять выберите "Create Instance".

После этого дважды щелкните на новую инстанцию Satisfactory для управления ею и выберите "Update" ("Обновить") на экране состояния. Это приведет к загрузке сервера Satisfactory и необходимых файлов.

После завершения загрузки вы можете нажать кнопку "Start", и через несколько мгновений сервер запустится. После завершения запуска вы можете подключаться как обычно. AMP автоматически создает для вас правильные правила брандмауэра, поэтому вам не нужно беспокоиться об этом. Вы можете следить за использованием ресурсов на экране состояния.
После установки более новой версии Windows вам может потребоваться запустить исполняемый файл FactoryServer.exe один раз вручную, чтобы установить некоторые требования UE4 (выполнение C++, .net 3.5). Порт по умолчанию также может отличаться от используемого порта. Проверьте последний запущенный исполняемый файл на вкладке 'Support' ('Поддержка') вашей инстанции Satisfactory.

## Запуск вручную в Docker-контейнере

Этот раздел о том, как запустить выделенный сервер внутри контейнера docker.

```
FROM cm2network/steamcmd:root
#BUILD: docker build -t satisfactory .
#RUN: mkdir data; docker run -p 15000:15000/udp -p 7777:7777/udp -p 15777:15777/udp -d --name=satisfactory -v $(pwd)/data:/home/steam/Satisfactory-dedicated satisfactory
ENV STEAMAPPID 1690800
ENV STEAMAPP Satisfactory
ENV STEAMAPPDIR "${HOMEDIR}/${STEAMAPP}-dedicated"
RUN echo -e "export LD\_LIBRARY\_PATH=${STEAMAPPDIR}/linux64:$LD\_LIBRARY\_PATH\n\
bash ${STEAMCMDDIR}/steamcmd.sh +login anonymous +force\_install\_dir ${STEAMAPPDIR} +app\_update ${STEAMAPPID} validate +quit\n\
test -d ~/.config/Epic/FactoryGame/Saved || mkdir -p ~/.config/Epic/FactoryGame/Saved\n\
test -d ${STEAMAPPDIR}/saves || mkdir ${STEAMAPPDIR}/saves\n\
test -L ~/.config/Epic/FactoryGame/Saved/SaveGames || ln -s ${STEAMAPPDIR}/saves ~/.config/Epic/FactoryGame/Saved/SaveGames\n\
${STEAMAPPDIR}/FactoryServer.sh" >> ${HOMEDIR}/entry.sh
RUN chmod +x "${HOMEDIR}/entry.sh" && chown -R "${USER}:${USER}" "${HOMEDIR}"
USER ${USER}
VOLUME ${STEAMAPPDIR}
WORKDIR ${HOMEDIR}
CMD ["bash", "entry.sh"]
EXPOSE 15777/udp 15000/udp 7777/udp

```
Как указано в таблице в начале, не используйте разные порты для 15000 и 7777, потому что они обязательно должны быть указаны в командной строке, как в примере. Другой порт (15777) может быть объявлен как угодно.

$STEAMAPPDIR - это файл, чтобы к сохраненным играм и конфигурации сервера можно было получить доступ и изменить их извне контейнера. Если этот каталог не сопоставлен с каталогом хоста, как это делается с помощью -v, он переместится в /var/lib/docker/volumes. Вы можете найти, где именно используется "docker inspect" на запущенном контейнере. Больше информации здесь.

## Ошибка библиотеки SteamAPI

### Ошибка 1

Вы можете получить следующую ошибку:

```
Loading Steam API...Failed to init SDL priority manager: SDL not found

Failed to set thread priority: per-thread setup failed

Failed to set thread priority: per-thread setup failed
```
Вы можете решить эту проблему, загрузив зависимость:

```
sudo apt install libsdl2-2.0-0:i386
```

### Ошибка 2

Вы можете получить следующую ошибку:

```
steamclient.so: cannot open shared object file: No such file or directory
/home/your_user/.steam/sdk64/steamclient.so
/home/your_user/.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/your_user/.steam/sdk64/steamclient.so
```
Вы можете решить эту проблему, например, путем симлинка ожидаемого пути к тому месту, где библиотека действительно существует:

```
ln -s /usr/games/steamcmd/linux64/steamclient.so /home/your_user/.steam/sdk64/
```
Вывод журнала должен измениться:

```
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/your_user/.steam/sdk64/steamclient.so' OK.  (First tried local 'steamclient.so')
```