Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!
[!IMPORTANT] Updating for v1.0?
- Ensure any existing servers have the updated Startup Command applied!
- TCP is now required! (See Server Ports for details)
- While not required, it's recommended existing servers delete the
LinuxServer
directory under~/FactoryGame/Saved/Config/
to remove depreciated settings, and reconfigure the settings via the in-game Server Manager.
From Coffee Stain's Website:
Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!
[!NOTE] As of Satisfactory v1.0, most server settings have moved from being configured in the Egg to being configured via the in-game Server Manager.
Please see Server Initialization for what settings can be configured in-game.
Port | Default | Protocol | Required | Notes |
---|---|---|---|---|
Primary | 7777 | UDP & TCP | Yes | Clients connect using this port. UDP is un-encrypted game traffic. TCP is also required for the in-game Server Manager & API, and it is TLS encrypted. |
[!TIP] *Your internal ports must match your external ports on your network (ie. you can't have an external port of 7778 forwarded to your 7777 internal port; they must match). (*Testing needed after v1.0 release)
Bare Minimum | Recommended | |
---|---|---|
Processor | Recent x86/64 (AMD/Intel) processor that supports modern instructions (ie. AVX, AES, etc.). No 32 bit or ARM support. | Favours higher single-core performance over multiple cores. If you are running Wings via Proxmox, you may need to set the VM's CPU Type to "host" to avoid session save/load crashes. |
RAM | 4608 MiB | 8192-12288 MiB (especially for 4 players or large save files) |
Storage | 5120 MiB | 7168-10240 MiB (or more, depending on save size or frequency) |
Network | 1 Mbit/s | 1-5 Mbit/s (may require server and client config tweaks) |
Host OS | Most stable Linux OS branches should work | Using the latest kernel version for your installed OS can prevent some edge-case installation/boot issues. |
Game Ownership | Not required to start. | Required to fully "initialize" (see Server Initialization below) |
[!WARNING] The server cannot be joined for the first time via "Join Game -> Join game directly..." on the main menu due to the TLS certificate not being trusted yet. Instead, join via "Server Manager -> Add Server" and you will be prompted to trust the certificate and initialize the server.
For a server to be fully "initialized", a client who owns the game must log into the server to "claim" it and create an administrator password. Then, a new session can be created via the "Create Game" tab in-game, or an existing save file can be uploaded (see Save Files below).
Misc. settings listed below can be configured by an admin client via the Server Manager's "Server Settings" tab, and are currently not set via the Egg:
[!NOTE] Currently, Tier 0 (Onboarding) is not possible to play on a dedicated server and it will be automatically unlocked, even if you upload a save in Tier 0. If you would like to play the beginning of the game with Onboarding, it is recommended you play local multiplayer first, and then upload your save after completing Tier 0.
[!CAUTION] Stopping the server does not currently save your game! Ensure it is saved before stopping the server!
Save files are located in the following directory, but can be more easily downloaded to your local computer in-game via the Server Manager under the "Manage Saves" tab (admins only).
/home/container/.config/Epic/FactoryGame/Saved/SaveGames/server
An existing save file (including single-player saves) can be uploaded to the server via the Server Manager as well and loaded under the same tab.
If you have forgotten your administrator password or would generally like to reset your server as if it were new, you can delete the following file:
/home/container/.config/Epic/FactoryGame/Saved/SaveGames/ServerSettings.<your_server_query_port>.sav
The "Console" tab in the in-game Server Manager is the only way to execute commands. Entering commands via the Panel do nothing.
List of known commands can be found via the Wiki.
The following errors or warnings you see in the console can safely be ignored:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/container/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
LogSteamShared: Warning: Steam Dedicated Server API failed to initialize.
↑ The local file of 'steamclient.so' was attempted to be loaded, but could not because it is not present, causing the warning message. However, the backup /home/container/.steam/sdk64/steamclient.so
is loaded successfully (this is the correct behavior according to the Wiki).
Warning: failed to init SDL thread priority manager: SDL not found
↑ This is a common error with Steam related software on Linux, but can safely be ignored.
Exiting abnormally (error code: 130)
↑ This misleading message occurs when stopping the server. It is printed by the Unreal Engine because it doesn't know why it was interrupted (even though it was expected by us). This can be safely ignored if you notice normal engine shutdown logs above.
...Error: Couldn't find file for package...
...Error: Navmesh bounds are too large!...
...Warning: NiagaraSystem...
LogStreaming: Warning: Failed to read file '../../../FactoryGame/Saved/SaveGames/GameAnalytics.sav' error.
↑ These seem to be common error messages with the current experimental version of the game.
Name | Tag |
---|---|
ghcr.io/ptero-eggs/steamcmd:debian | ghcr.io/ptero-eggs/steamcmd:debian |
Name | Description | Environment Variable | Default Value | User Viewable | User Editable |
---|---|---|---|---|---|
Automatic Updates | Quickly checks for any server updates on startup, and updates if necessary. (1 Enable | 0 Disable) | AUTO_UPDATE | 1 | Yes | Yes |
[Repair] Validate Server Files | Leave empty (no value) for OFF or type "true" or "1" for ON. Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed. | VALIDATE | Yes | Yes | |
Number of Rotating Autosaves | Number of session auto-saves for the server to keep before the oldest save is deleted and the others are moved down the list. | NUM_AUTOSAVES | 3 | Yes | Yes |
[Experimental] Max Players | The server and client are currently not optimized to support more than 4 players. However, you can override this value here at your own risk of poor performance. | MAX_PLAYERS | 4 | Yes | Yes |
[Advanced] Client Initial Connection Timeout | Time in seconds to wait for a new client connection to be established before destroying the connection. | INIT_CONNECT_TIMEOUT | 30 | Yes | Yes |
[Advanced] Client Established Connection Timeout | Time in seconds to wait before considering an established client connection timed out. Typically shorter than the time to wait on an initial connection because this connection should already have been setup and any interruption should be trapped quicker. | CONNECT_TIMEOUT | 20 | Yes | Yes |
[Advanced] Branch Name | [Accepted Values: "public", "experimental", or leave empty to use the primary branch of the server] Used to download or switch to a non-primary branch of the game server. "Automatic Updates" and "Validate Server Files" must be set to "1" to switch branches if the server is already installed. NOTE: Any non-primary branches may not be fully compatible/stable! | SRCDS_BETAID | Yes | Yes | |
[Advanced] Satisfactory Dedicated Server App ID | Steam App ID used for installation and updates. | SRCDS_APPID | 1690800 | No | No |
#!/bin/bash
# File: Pterodactyl Satisfactory Egg - egg-satisfactory.json
# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord
# Date: 2024/09/10
# License: MIT License
## Download and install SteamCMD
cd /tmp
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
mkdir -p /mnt/server/steamcmd
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
cd /mnt/server/steamcmd
# SteamCMD fails otherwise for some reason, even running as root.
chown -R root:root /mnt
export HOME=/mnt/server
# Install game server using SteamCMD
./steamcmd.sh +force_install_dir /mnt/server +login anonymous +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) validate +exit
# Set up 32 and 64 bit libraries
mkdir -p /mnt/server/.steam/sdk{32,64}
cp -v linux32/steamclient.so /mnt/server/.steam/sdk32/steamclient.so
cp -v linux64/steamclient.so /mnt/server/.steam/sdk64/steamclient.so
## Satisfactory setup
# Check for successful installation and make the server binary executable.
# Use `find` to see if a valid server binary exists using a wildcard, because
# the binary name may change in the future.
# (eg. it changed when the engine was updated from UE4 to UE5)
cd /mnt/server/Engine/Binaries/Linux
count=$(find . -maxdepth 1 -name '*-Linux-Shipping' -type f -executable | wc -l)
if [[ $count -eq 0 ]]; then
echo -e "\n\nSteamCMD failed to install the Satisfactory Dedicated Server!"
echo -e "\tTry reinstalling the server again.\n"
exit 1
else
chmod +x *-Linux-Shipping
fi
echo -e "\nSatisfactory Dedicated Server successfully installed!\n"