Unlike ARK and Enshrouded, Satisfactory ships a native Linux dedicated server. No Wine, no prefix, no glibc surprises. Coffee Stain put real engineering into the Linux build and it shows — install in 5 minutes, runs on 8 GB RAM for a full factory.
TL;DR:
sudo adduser --system --group --home /opt/satisfactory satisfactory
sudo apt install steamcmd
sudo -u satisfactory -H steamcmd \
+force_install_dir /opt/satisfactory \
+login anonymous \
+app_update 1690800 validate \
+quit
sudo ufw allow 7777/udp
sudo ufw allow 7777/tcp
Then a systemd unit, claim the server in-game, you're playing. Same SteamCMD pattern as Valheim and Palworld, just simpler because there's no platform translation layer.
App ID and download
App ID for the Satisfactory dedicated server is 1690800. Anonymous SteamCMD login works — no account needed.
sudo dpkg --add-architecture i386 # SteamCMD wants 32-bit libs
sudo apt update
sudo apt install steamcmd
sudo adduser --system --group --home /opt/satisfactory satisfactory
sudo -u satisfactory -H steamcmd \
+force_install_dir /opt/satisfactory \
+login anonymous \
+app_update 1690800 validate \
+quit
Initial download is around 6 GB. With a decent link, 5-10 minutes.
The binary lives at /opt/satisfactory/FactoryServer.sh — Coffee Stain's wrapper that handles env vars. Don't try to run the bare ELF directly; you'll miss the LD_LIBRARY_PATH setup.
Systemd unit
/etc/systemd/system/satisfactory.service:
[Unit]
Description=Satisfactory Dedicated Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=satisfactory
Group=satisfactory
WorkingDirectory=/opt/satisfactory
ExecStart=/opt/satisfactory/FactoryServer.sh -log -unattended
Restart=on-failure
RestartSec=10
RuntimeMaxSec=259200
MemoryMax=12G
[Install]
WantedBy=multi-user.target
-unattended is important — without it, the server prompts on stdin for crash report consent and hangs.
RuntimeMaxSec=259200 (3 days) — Satisfactory leaks memory slowly. Less aggressive than ARK's daily restart; weekly is fine for small factories, every 3 days for large ones with 10k+ machines.
MemoryMax=12G is generous. Most factories never approach 8 GB. Set lower if the box is small.
sudo systemctl daemon-reload
sudo systemctl enable --now satisfactory
sudo journalctl -u satisfactory -f
First start takes 30-60 seconds. Look for Game Engine Initialized and LogServer: Server started. That's go.
Ports
Satisfactory uses one port for two protocols — TCP for control, UDP for game traffic:
sudo ufw allow 7777/tcp
sudo ufw allow 7777/udp
Default port is 7777. To change, edit /opt/satisfactory/FactoryGame/Saved/Config/LinuxServer/Engine.ini:
[/Script/SocketSubsystemEpic.EpicNetDriver]
Port=7888
Then update the firewall rules to match. UFW rules reference.
Claim the server
This is the bit unique to Satisfactory. Brand-new servers are unclaimed — anyone with the IP can connect and "claim" the server, becoming the admin.
After first boot:
- Open Satisfactory client.
- Server browser → Add Server → IP
<your-server-ip>:7777. - Connect. You'll be prompted to set an admin password — that's the claim.
- Once claimed, the server requires the admin password for any admin-tier action (creating game sessions, kicking, settings).
Claim immediately after first boot. If the server is publicly reachable and someone else claims it first, you're locked out (and have to wipe to reset).
You can disable the public server browser by setting bAdvertiseServer=False in Engine.ini — direct-IP-only. Recommended for a friends server.
Sessions
Satisfactory's "session" model is unusual. After claiming, you create a named save (Game Session) within the server — the world. You can have multiple sessions, swap between them, archive old ones. The active session is what currently-connected players are in.
Sessions live as .sav files in /opt/satisfactory/FactoryGame/Saved/SaveGames/server/. One file per session, plus auto-saves.
The server keeps running between sessions — players reconnect, pick a session from the menu, load.
Backups
The whole save directory matters:
systemctl stop satisfactory
rsync -a --delete /opt/satisfactory/FactoryGame/Saved/SaveGames/ \
/backup/satisfactory/$(date +%F)/
systemctl start satisfactory
Stop-rsync-start adds 30s downtime, prevents corrupt-backup-while-writing race. Same pattern as Valheim backups and the general rsync setup.
Keep 14 days. Satisfactory saves are small — a 100-hour factory is 50-200 MB. Storage cost is nothing.
Auto-saves are inside the server too — _autosave_0.sav through _autosave_2.sav. They rotate. Useful for "I just blew up my factory, give me yesterday's autosave" — no backup restore needed, just rename and reload.
Updates
Satisfactory patches are infrequent. When one drops:
sudo systemctl stop satisfactory
sudo -u satisfactory -H steamcmd \
+force_install_dir /opt/satisfactory \
+login anonymous \
+app_update 1690800 validate \
+quit
sudo systemctl start satisfactory
Update version mismatches between client and server prevent connection — clients see the server in the browser but get a version-mismatch error. Update server promptly when a patch drops.
The two failure modes you'll hit
Server in browser but can't connect. Almost always firewall — UFW open for TCP but not UDP, or vice versa. Both are required:
sudo ufw status verbose | grep 7777
Should show both protocols allowed.
Claim flow doesn't work — server says "Cannot reach server" in admin prompt. The client and server can connect (you see the join prompt) but admin actions fail. Almost always: outbound NAT issue. The dedicated server uses a separate outbound channel for admin acks. If your router does port mapping incorrectly, this breaks. Workaround: bind the server to the LAN IP explicitly via Engine.ini:
[URL]
ServerHost=10.0.0.5
Replace with the actual LAN IP. Forward 7777 TCP+UDP from the router to that IP.
Why this is the easiest of the bunch
Comparing the game servers I've covered:
- Valheim: SteamCMD + the SteamAppId trick + UDP only. Easy.
- Palworld: SteamCMD, Wine optional but works native too. Easy-ish.
- Enshrouded: Wine wrapper, RAM-hungry. Medium.
- ARK Survival Ascended: Wine wrapper, RAM monster, mod handling. Hard.
- Satisfactory: native, low RAM, simple session model. Easiest.
If you've never set up a game server and want to learn the pattern without the pain, Satisfactory is the one to try. The skeleton transfers to everything else.
Why this and not paid hosting
A small Hetzner box (€7/month, 4 GB RAM, 2 vCPU) runs a 4-player Satisfactory comfortably. Managed Satisfactory hosts charge €8-12/month and lock you into their version cadence. The price difference is marginal; the flexibility difference (control your patches, run it alongside other game servers, swap save files freely) is the win.