ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

Satisfactory サーバーの立て方

# この記事は

GCPVM インスタンスを立てて、そこで Satisfactory サーバーを動かす方法を書いた手順書です。

# 方針

  • とにかく手を抜く

# 最低限ワールドに入れるようになる所まで

## プロジェクトの作成まで

  • GCP のコンソールから、新しいプロジェクトを作成する。
    • プロジェクト名は Satisfactory にしておく。

## インスタンスの作成まで

  • GCP のコンソールから VM インスタンスを有効化
  • VM インスタンス」から「インスタンスを作成」
  • 「名前」を「game-server」に変更
  • 「リージョン」を「asia-northeast1(東京)」に変更
  • 「マシンタイプ」を「e2-standard-4 (4 vCPU、 16 GB メモリ)」に変更
  • 「ブートディスク」の「変更」をクリック
    • 「OS」を「Ubuntu」に変更
    • 「バージョン」を「Ubuntu 22.04 LTS」(x86/64 の方)に変更
    • 「サイズ(GB)」を「32」に変更
  • 「ネットワークタグ」を「satisfactory」に変更
  • 「作成」をクリック

## SSH ログインまで

  • GCP コンソールの「VM インスタンス」の「接続」列にある「SSH」をクリックして game-server に SSH ログインする

## Satisfactory サーバーのインストールまで

  • まずはパッケージ更新
sudo apt update
sudo apt -y upgrade
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
  • steamcmd を入れる
sudo apt install -y lib32gcc-s1 steamcmd
  • steamcmd プロンプトに入る
steamcmd
  • 匿名ユーザーでログイン
login anonymous
  • Satisfactory サーバーをインストール
app_update 1690800 validate
  • steamcmd プロンプトを抜ける
exit

## Satisfactory サーバーを起動するところまで

  • tmux をインストール
sudo apt -y install tmux
  • tmux セッションに入る
tmux
  • Satisfactory サーバーを起動
Steam/steamapps/common/SatisfactoryDedicatedServer/FactoryServer.sh

## 必要なポートを開けるところまで

## 動作確認取るところまで

  • CGP コンソールの「VM インスタンス」で「外部 IP」をコピー
  • satisfactory を起動
  • メインメニューで「サーバー管理」を選択
  • 「サーバー追加」を選択
  • さっきコピーした「外部 IP」を「アドレス」に入力して「確認」をクリック

# 終盤も快適にプレイできるように設定する所まで

## チューニング要る?

  • 少なくとも、オートセーブだけは絶対にやったほうが良い
    • オートセーブ中の移動や作業はロールバックされてしまう
    • 高頻度のオートセーブ=高頻度の作業中断
    • ウザくならない程度にオートセーブ頻度は下げたほうが良い
  • 設定ファイルを書き換えてのチューニングは終盤までにはやりたい
    • ゲーム終盤(100h~)までいくと、プレイに支障が出るレベルで重たい

## オートセーブの間隔を 30 分に変更

  • インゲームのサーバー管理メニューから「コンソール」タブを開く
  • FG.AutosaveInterval 1800 を入力

## クライアントのネットワーク帯域制限を撤廃

  • クライアント PC の
%localappdata%\FactoryGame\Saved\Config\WindowsNoEditor\

の各設定ファイルを書き換える - ※同名の変数が最初からある場合は上書き、ない場合は追記 - Engine.ini ``` [/Script/Engine.Player] ConfiguredInternetSpeed=104857600 ConfiguredLanSpeed=104857600

[/Script/OnlineSubsystemUtils.IpNetDriver]
MaxClientRate=104857600
MaxInternetClientRate=104857600

[/Script/SocketSubsystemEpic.EpicNetDriver]
MaxClientRate=104857600
MaxInternetClientRate=104857600
```
- Game.ini
```
[/Script/Engine.GameNetworkManager]
TotalNetBandwidth=104857600
MaxDynamicBandwidth=104857600
MinDynamicBandwidth=10485760
```
- Scalability.ini
```
[NetworkQuality@3]
TotalNetBandwidth=104857600
MaxDynamicBandwidth=104857600
MinDynamicBandwidth=10485760
```
  • 書き換えた各ファイルを「読み取り専用」にする

## サーバーのチューニング

~/Steam/steamapps/common/SatisfactoryDedicatedServer/FactoryGame/Saved/Config/

の各設定ファイルを書き換える - ※同名の変数が最初からある場合は上書き、ない場合は追記 - Game.ini ``` [/script/engine.gamenetworkmanager] TotalNetBandwidth=104857600 MaxDynamicBandwidth=104857600 MinDynamicBandwidth=104857600 MAXPOSITIONERRORSQUARED=32.00f MoveRepSize=512.0f CLIENTADJUSTUPDATECOST=512.0f bMovementTimeDiscrepancyDetection=false bMovementTimeDiscrepancyResolution=false bMovementTimeDiscrepancyForceCorrectionsDuringResolution=false MAXCLIENTUPDATEINTERVAL=2.20f MaxMoveDeltaTime=0.700f MaxClientSmoothingDeltaTime=2.20f MaxClientForcedUpdateDuration=1.0f ClientNetSendMoveDeltaTime=0.0332 ClientNetSendMoveDeltaTimeStationary=0.0664 ClientNetSendMoveThrottleOverPlayerCount=99 ServerForcedUpdateHitchThreshold=2.800f

[/script/engine.gamesession]
MaxPlayers=10
```
- Engine.ini
```
[CrashReportClient]
bAgreeToCrashUpload=false
bImplicitSend=False

[Engine.ErrorHandling]
bPromptForRemoteDebugging=False
bPromptForRemoteDebugOnEnsure=False

[/script/onlinesubsystemutils.ipnetdriver]
MaxInternetClientRate=104857600
MinInternetClientRate=104857600
MaxClientRate=104857600
MinClientRate=104857600
LanServerMaxTickRate=15
NetServerMaxTickRate=15
ConnectionTimeout=100.0
InitialConnectTimeout=200.0

[SystemSettings]
t.MaxFPS=15
AllowAsyncRenderThreadUpdates=1
AllowAsyncRenderThreadUpdatesDuringGamethreadUpdates=1
net.UseRecvMulti=0
net.RecvMultiCapacity=8192
net.IpNetDriverUseReceiveThread=0
net.IpConnectionUseSendTasks=1
net.IpNetDriverReceiveThreadQueueMaxPackets=8192
net.MaxNetStringSize=67108864
net.MaxRPCPerNetUpdate=8
tick.AllowAsyncComponentTicks=1
tick.AllowConcurrentTickQueue=1
tick.AllowAsyncTickDispatch=1
tick.AllowAsyncTickCleanup=1

[/script/engine.player]
ConfiguredInternetSpeed=104857600
ConfiguredLanSpeed=104857600

[/script/socketsubsystemepic.epicnetdriver]
MaxClientRate=104857600
MaxInternetClientRate=104857600

[/script/engine.engine]
bSmoothFrameRate=true
bUseFixedFrameRate=false
SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=5.000000),UpperBound=(Type=Exclusive,Value=15.000000))
MinDesiredFrameRate=8.000000
FixedFrameRate=15.000000
NetClientTicksPerSecond=15

[/script/engine.garbagecollectionsettings]
gc.MaxObjectsNotConsideredByGC=476499
gc.SizeOfPermanentObjectPool=100378488
gc.ActorClusteringEnabled=True
gc.BlueprintClusteringEnabled=True

[/script/engine.streamingsettings]
s.EventDrivenLoaderEnabled=True
s.AsyncLoadingThreadEnabled=True

[Core.System]
+Suppress=Scriptwarning
+Suppress=Error
+Suppress=Scriptlog
+Suppress=Warning

[Core.Log]
LogPluginManager=all off
LogOnlineIdentity=all off
LogOnlineSession=all off
LogMemory=all off
LogPakFile=all off
LogTemp=all off
LogLinker=all off
LogOnline=all off
LogOnlineGame=all off
LogAnalytics=all off
LogConfig=all off
LogInteractiveProcess=all off
LogInput=all off
LogOnlineEntitlement=all off
LogOnlineEvents=all off
LogOnlineFriend=all off
LogOnlinePresence=all off
LogOnlineTitleFile=all off
LogOnlineUser=all off
Global=off
```
  • 書き換えた各ファイルを「読み取り専用」にする
chmod -w Game.ini
chmod -w Engine.ini

参考