글 작성자: 마노링
반응형

새티스팩토리 업데이트 5와 함께 Dedicated Server가 공개되었습니다.

이번에는 Dedicated Server 설정하는 방법에 대하여 알아보겠습니다.

 

 

하지만, 이 서버를 사용하기 위해서는 새티스팩토리 스팀 버전이 필요합니다.

Dedicated Server 설정방법은 스팀 버전 기준으로 작성 되었습니다.

 

원본출처: https://satisfactory.fandom.com/wiki/Dedicated_servers

 

Dedicated servers

This page shows basics and details on how to set up and operate a Satisfactory dedicated server. At the moment, the dedicated server is available for the Windows and Linux operating systems. It can currently only be installed using the Steam service (where

satisfactory.fandom.com

1. 권장사항

   Processor  최신 x86/64(AMD/Intel) 프로세서. 32비트 또는 ARM 지원이 없습니다. 
 서버는 다중 코어보다 더 높은 단일 코어 성능을 선호합니다.
   Memory  최소 6GB, 큰 저장파일 또는 4인 이상 플레이어를 위해 8GB RAM을 권장합니다.
   Storage  10GB for the game server itself
   OS  현재 지원되는 모든 버전의 Windows 또는 주요 Linux 배포판. 
 Windows 7과 같은 지원되지 않는 OS는 명시적으로 지원되지 않습니다.
   Internet Connection  광대역 인터넷 연결. 집에서 호스팅하려면 포트 전달을 구성하는 기능이 필요합니다.

 

2. 방화벽 정책

Default Port
(UDP Only)
Override argument Note
15777 QueryPort 이 포트는 처음 전용 서버를 접속할 때 게임에서 입력해야 하는 포트입니다.
15000 BeaconPort 서버의 여러 인스턴스가 실행되고 기본값이 이미 사용 중인 경우 자동으로 증가합니다.
7777 GamePort 서버의 여러 인스턴스가 실행되고 기본값이 이미 사용 중인 경우 자동으로 증가합니다.

 

3. 스팀에서 설치 방법

 

- Steam 클라이언트에서 설치 방법

- 라이브러리 -> 상단 필터 -> Tools 선택 후 리스트에서 Satisfactory DedicatedServer 설치

 

- SteamCMD를 사용하여 설치 방법 

- 설치 명령어

  - Linux (root 권한으로 가진 상태로 실행)

steamcmd +force_install_dir ~/SatisfactoryDedicatedServer +login anonymous +app_update 1690800 -beta public validate +quit

  - Windows

steamcmd.exe +force_install_dir C:\GameServers\SatisfactoryServer +login anonymous +app_update 1690800 -beta public validate +quit

  - Steam이 설치된 폴더에서 SteamCMD 설치 후 사용시 (Steam 설치 위치는 기본설치 기준)

"C:\Program Files (x86)\Steam\steamcmd.exe" +force_install_dir "C:\GameServers\SatisfactoryServer" +login anonymous +app_update 1690800 validate +quit

- 업데이트 Dedicated Server Tool 명령어

steamcmd +login anonymous +app_update 1690800 +exit

 

4. 서버 실행 방법

 

- 윈도우

.\FactoryServer.exe -log -unattended

- 리눅스

./FactoryServer.sh

  - 시작 옵션

명령어 설명 예제
-multihome <ip address> 사용 가능한 모든 인터페이스가 아닌특정 IP 주소에 서버 프로세스 바인딩  -⁠multihome=192.168.1.4
-ServerQueryPort=<portnum> 서버에서 사용하는 쿼리 포트이다.
기본 포트는 UDP/15777 입니다.
-⁠ServerQueryPort=15777
-BeaconPort=<portnum> 서버가 사용하는 신호 포트이다.
기본 포트는 UDP/15000 입니다.
-⁠BeaconPort=15000
-Port=<portnum> 서버가 사용하는 게임 포트이다.
클라이언트와 서버 간의 통신하는 데 사용되는 기본 포트이며 UDP/7777 입니다.
-Port=7777
-log 서버가 창(Windows) 또는 활성 터미널(Linux)에 로그를 표시 이 옵션은 Linux에서 시작할 때 기본적으로 사용함 -log
-unattended 서버가 실행할 수 없을 경우 서버 실행을 방해 하는 대화창을 표시하지 않도록 합니다. 
이 옵션은 Linux에서 시작할 때 기본적으로 사용함
-unattended
-DisablePacketRouting Startup argument for disabling the packet router
(Automatically disabled with multihome)
-DisablePacketRouting

5. 서버 설정파일 위치

 

- 윈도우

FactoryGame/Saved/Config/WindowsServer/

- 리눅스

FactoryGame/Saved/Config/LinuxServer/

 

6. 명령어

명령어 설명
 quit, stop, exit:  서버 종료
 server.SaveGame saveName  현재 세션의 저자파일 생성
 FG.AutosaveInterval xxx  서버의 자동저장 빈도 설정
 FG.NetworkQuality xxx  서버의 네트워크 퀄리티 설정
 FG.DisableSeasonalEvents x  시즌 이벤트 비화성화 설정

 

7. 기존 세이브 파일 불러오는 방법

 

- 윈도우

- 싱글 플레이 세이브파일 위치:

%LOCALAPPDATA%\FactoryGame\Saved\SaveGames

- 서버용 세이브파일 위치 (Local):

%LOCALAPPDATA%\FactoryGame\Saved\SaveGames\server

- 서버용 세이브파일 위치 (서비스모드) :

C:\Windows\ServiceProfiles\NetworkService\AppData\Local\FactoryGame\Saved\SaveGames\server

- 서버용 세이브파일 위치 (NSSM):

C:\Windows\System32\config\systemprofile\AppData\Local\FactoryGame\Saved\SaveGames\server

 

- 리눅스

- 싱글 플레이 세이브파일 위치:

~.config/Epic/FactoryGame/Saved/SaveGames

- 서버용 세이브파일 위치:

~.config/Epic/FactoryGame/Saved/SaveGames/server

- 세선 이름을 Server Manager의 Server Settings Tab에 기입합니다.

 

리눅스에서 Dedicated Server의 서비스를 위한 세팅방법입니다.

 

1. 스팀 기본 폴더 위치: /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​

  위의 파일은 한번만 생성하면 됩니다. 

 

2. 권한 부여

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

 

3. 실행 파일 만들기

  파일 위치: /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
ExecStartPre=/bin/bash -c 'mv /home/steam/SatisfactoryDedicatedServer/server.log /home/steam/SatisfactoryDedicatedServer/$$(date +%%Y-%%m-%%d_%%H:%%M:%%S)_server.log'
StandardOutput=file:/home/steam/SatisfactoryDedicatedServer/server.log
ExecStart=/home/steam/SatisfactoryDedicatedServer/start_server.sh

[Install]
WantedBy=multi-user.target

위의 내용으로 작성하시면 됩니다.

 

4. 서비스 등록 및 실행 방법

 - 서비스 등록

sudo systemctl enable satisfactory.service --now

 - 서비스 실행

sudo systemctl restart satisfactory.service.

 - 서버가 시작 되었을 때 자동을 시작하게 하는 방법

# This will open an interactive editor

sudo crontab -e

# Add this line to the file then save it.

0 4 * * * systemctl restart satisfactory.service

 

[Linux] OpenRC on Gentoo

 

아래의 항목이 사전에 준비가 되어 있는 것을 권장합니다.

- ln -s /etc/init.d/steamcmd /etc/init.d/steamcmd.satisfactory

- /etc/conf.d/steamcmd -> /etc/conf.d/steamcmd.satisfactory.

 

1. /etc/conf.d/steamcmd.satisfactory 내용입니다.

# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# Dtach options, which will used, when the `attach` extra command is called.
# By default, CTRL+D is used, and no signal is send,
# when you want to detach from the attached console.
DTACH_OPTS="-e '^D' -r none"

# Specifies, which server binary is used.
# This could be 'hlds_run' or 'srcds_run', depending on your game.
STEAMCMD_BINARY="FactoryServer.sh"

# Path to the files of your started server.
STEAMCMD_PATH="/opt/steamcmd/sf"

# Options for your server binary.
STEAMCMD_OPTS=""

 

[Linux] Alternative SystemD configuration

 

1. 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

 

[Windows] NSSM (Non-Sucking Service Manager) 

 

1. install

nssm.exe install SatisfactoryServerService

2. 설치 후에 Path와 Arguments 설정이 완료 된 이후 아래의 실행 명령어로 서버를 시작합니다.

nssm.exe start SatisfactoryServerService

 - 다른 유용한 명령어들

nssm.exe status SatisfactoryServerService # Checks the status of the Service

nssm.exe stop SatisfactoryServerService # Stops the service, and prevents it from auto-restarting

 

5. SDL 권한 관리

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

 

6. SteamAPI library Error

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')

7. 포트 활성화 확인 방법

 - 윈도우

Get-NetUDPEndPoint | Select-Object LocalAddress, LocalPort, @{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}} | Sort-Object -Property LocalPort,Process | Where-Object{$_.Process -like "UE4Server-Win64-Shipping"}

LocalAddress LocalPort Process
------------ --------- -------
::                7777 UE4Server-Win64-Shipping
::               15000 UE4Server-Win64-Shipping
::               15777 UE4Server-Win64-Shipping
0.0.0.0          15777 UE4Server-Win64-Shipping

- 리눅스

$ ss -plnu | grep UE
UNCONN    0     0    *:15000      *:*    users:(("UE4Server-Linux",pid=2353772,fd=21))
UNCONN    0     0    *:15777      *:*    users:(("UE4Server-Linux",pid=2353772,fd=18))
UNCONN    0     0    *:7777       *:*    users:(("UE4Server-Linux",pid=2353772,fd=20))

 

반응형