fix(satisfactory): official SteamCMD server, and builder uses SteamCMD only for Linux Steam servers #27

Merged
git_pipeline merged 4 commits from fix/satisfactory-steamcmd into main 2026-11-07 02:20:49 +00:00
Showing only changes of commit b9d445c57d - Show all commits
+48 -166
View File
@@ -1,165 +1,62 @@
# yaml-language-server: $schema=../../schema/game.schema.json
# The official dedicated server (Steam app 1690800), installed by the node with anonymous SteamCMD.
# Satisfactory keeps its saves under $HOME/.config/Epic/FactoryGame, so HOME is pointed at the server
# volume; otherwise they would land in /home/steam and be lost on the next start.
id: satisfactory-vanilla-stable
name: Satisfactory (Vanilla Stable)
defaultDockerImage: wolveix/satisfactory-server:latest
name: Satisfactory
defaultDockerImage: cm2network/steamcmd
defaultStartupCommand: >-
export HOME=/server;
mkdir -p "$HOME/.steam/sdk64";
cp -f /home/steam/steamcmd/linux64/steamclient.so "$HOME/.steam/sdk64/" 2>/dev/null;
exec ./FactoryServer.sh -Port=7777 -ReliablePort=8888 -ExternalReliablePort="${EXTERNAL_RELIABLE_PORT:-8888}" -log -unattended
requiredMemoryMb: 8192
requiredDiskMb: 16384
requiredDiskMb: 20480
defaultPorts:
- 7777/tcp
- 7777/udp
- 7777/tcp
- 8888/tcp
installMethod: NONE
installMethod: STEAMCMD
installConfig:
appId: "1690800"
defaultConfig:
AUTOSAVENUM: 5
DEBUG: false
DISABLESEASONALEVENTS: false
LOG: false
MAXOBJECTS: 2162688
MAXPLAYERS: 4
MAXTICKRATE: 30
MULTIHOME: '::'
PGID: 1000
PUID: 1000
SERVERGAMEPORT: 7777
SERVERMESSAGINGPORT: 8888
SERVERSTREAMING: true
SKIPUPDATE: false
STEAMBETA: false
STEAMBETAID: ""
STEAMBETAKEY: ""
TIMEOUT: 30
VMOVERRIDE: false
MaxPlayers: 4
ExternalReliablePort: '{PUBLIC_PORT_8888}'
configSchema:
$schema: http://json-schema.org/draft-07/schema#
properties:
AUTOSAVENUM:
category: World & Environment
default: 5
description: The number of rotating autosave files to keep in the save folder.
title: Autosave Rotation Count
type: integer
DEBUG:
category: System & General
default: false
description: Prints diagnostic environment and system details on startup, then stops.
title: Debug Mode
type: boolean
DISABLESEASONALEVENTS:
category: Gameplay & Rules
default: false
description: Disables seasonal in-game events such as FICSMAS holiday events.
title: Disable Seasonal Events
type: boolean
LOG:
category: System & General
default: false
description: Disables automatic pruning of previous Satisfactory server log files on container startup.
title: Retain Old Logs
type: boolean
MAXOBJECTS:
category: World & Environment
default: 2162688
description: Unreal Engine garbage collector UObject limit to support large late-game factories.
title: Max Objects Limit
type: integer
MAXPLAYERS:
category: System & General
default: 4
description: Sets the maximum number of concurrent players allowed on the server.
title: Max Players
type: integer
MAXTICKRATE:
category: System & General
default: 30
description: Sets the maximum simulation tick rate for the server in Hz.
title: Max Tick Rate
type: integer
MULTIHOME:
category: System & General
default: '::'
description: 'Network interface binding IP address (defaults to :: for dual-stack IPv4/IPv6).'
title: Multihome Address
type: string
PGID:
category: System & General
default: 1000
description: Sets the Linux group ID under which the dedicated server process runs.
title: Process Group ID
type: integer
PUID:
category: System & General
default: 1000
description: Sets the Linux user ID under which the dedicated server process runs.
title: Process User ID
type: integer
SERVERGAMEPORT:
category: System & General
default: 7777
description: Primary game port for UDP and TCP network communication.
title: Server Game Port
type: integer
SERVERMESSAGINGPORT:
category: System & General
default: 8888
description: Port used for reliable server messaging and beacon network traffic.
title: Server Messaging Port
type: integer
SERVERSTREAMING:
category: System & General
default: true
description: Toggles whether the game server utilizes Unreal Engine World Partition asset streaming.
title: Server Streaming
type: boolean
SKIPUPDATE:
category: System & General
default: false
description: Skips automatic SteamCMD game file update checks on container startup.
title: Skip Update
type: boolean
STEAMBETA:
category: System & General
default: false
description: When enabled, updates and runs the Experimental branch instead of the stable release.
title: Steam Beta Branch
type: boolean
STEAMBETAID:
category: System & General
default: ""
description: Specific beta branch identifier to download via SteamCMD.
title: Steam Beta Branch Name
type: string
STEAMBETAKEY:
category: Security & Access
default: ""
description: Password required to access a private Steam beta branch.
title: Steam Beta Password
type: string
TIMEOUT:
category: System & General
default: 30
description: Client network connection timeout threshold in seconds.
title: Connection Timeout
type: integer
VMOVERRIDE:
category: System & General
default: false
description: Skips CPU model checking on hypervisors to prevent crash warnings on KVM/QEMU hosts.
title: VM CPU Check Override
type: boolean
required: []
type: object
configFileFormat: INI
properties:
MaxPlayers:
title: Max Players
description: How many players can be on the server at once. Set by your plan.
type: integer
category: Gameplay & Rules
default: 4
ExternalReliablePort:
title: Reliable Messaging Port (public)
description: The port players' games use for reliable messaging. Filled in for you; only change it if you know you need to.
type: string
category: System & General
default: '{PUBLIC_PORT_8888}'
required: []
configFilePath: FactoryGame/Saved/Config/LinuxServer/Game.ini
configFileFormat: STANDARD
configFormatOptions:
assignment: =
falseValue: "false"
footer: ""
header: ""
quoteStrings: false
header: |
[/Script/Engine.GameSession]
footer: "\n"
separator: "\n"
trueValue: "true"
unquotedKeys: []
assignment: '='
quoteStrings: false
trueValue: "True"
falseValue: "False"
uppercaseKeys: false
maxPlayersConfigKey: MaxPlayers
logFilePath: FactoryGame/Saved/Logs/FactoryGame.log
agnosticCommandConfig:
queryType: LOG_ONLY
playerJoinRegex: 'LogNet: Join succeeded: ([^\r\n]+)'
playerLeaveRegex: 'UNetConnection::Close:.*?\[PlayerName:\s*([^\]]+)\]'
actions:
Ban:
type: UNSUPPORTED
@@ -169,22 +66,7 @@ agnosticCommandConfig:
type: UNSUPPORTED
Save:
type: UNSUPPORTED
pingPort: null
pingPortKey: null
playerJoinRegex: '.*Join succeeded: (\S+).*'
playerLeaveRegex: .*UNetConnection::Close:.*?\[PlayerName:\s*([^\]]+)\].*
playersCommand: null
playersFormat: null
playersRegex: null
queryPortKey: null
queryType: LOG_ONLY
rconPasswordKey: null
rconPortKey: null
restEndpoint: null
restPasswordKey: null
restPortKey: null
restUser: null
backupPaths:
- saved
maxBackupSizeMb: 1024
maxPlayersConfigKey: MAXPLAYERS
- .config/Epic/FactoryGame/Saved/SaveGames
- FactoryGame/Saved/Config
maxBackupSizeMb: 2048