How to Install Satisfactory Dedicated Server on Ubuntu 24.04
Satisfactory is one of the most demanding factory-building games on the market, and a dedicated server is the only sensible way to keep your multiplayer factory humming 24/7. Hosting it on your own VPS gives you uninterrupted uptime, full control over save files, room to install mods, and long-term savings over paid game-hosting providers. This tutorial walks you through a complete production-grade install on Ubuntu 24.04, from the first apt update through systemd autostart, firewall hardening, and automated hourly backups.
Prefer a managed alternative? If you want a VPS with the resources to run Satisfactory plus room for a mod manager, voice server, and web dashboard, deploy a CloudCore Business VPS with 16 GB RAM in under 60 seconds.
Table of Contents
steam UserWhy Self-Host Satisfactory on a VPS?
Paid game hosts such as Nitrado and GPORTAL make spinning up a Satisfactory server easy, but you pay a significant premium for convenience. A 16 GB Satisfactory slot typically runs EUR 25-35 per month and locks you into a single game, a single save region, and a limited control panel. Upgrades cost more, mod management is restricted, and your save files live on hardware you do not control.
Running Satisfactory on your own Ubuntu VPS flips every one of those trade-offs:
- Around 70-80 percent long-term cost savings. A CloudCore Business VPS at EUR 29.99 per month hosts Satisfactory plus a Terraria server, a Factorio headless save, a Discord bot, and a Minecraft instance on the same hardware. A comparable stack on paid game hosts would exceed EUR 100 per month.
- Full root access and mod freedom. Install the Satisfactory Mod Manager, tune Linux kernel parameters, swap storage for NVMe, or run a reverse proxy for a Grafana dashboard showing factory stats.
- Save files you truly own. Your
.savfiles live on your VPS, get backed up to your own off-site location, and travel with you if you ever migrate providers. - No slot caps or player-count surcharges. Satisfactory dedicated servers support the full 4-player co-op experience (and larger unofficial groups) without extra fees.
- Uptime measured in months, not hours. Paid hosts frequently restart shared hypervisors. A dedicated VPS only restarts when you choose to, which matters for mid-game trains that take 40 real-time minutes to deliver a batch of turbo motors.
Prerequisites
Before starting, make sure you have:
- An Ubuntu 24.04 LTS VPS with at least 16 GB RAM, 4 vCPU, and 40 GB of free disk space.
- SSH access with a user that has
sudoprivileges. - A Satisfactory client installation (Steam or Epic) on your desktop so you can claim the server.
- Basic familiarity with the Linux command line.
Recommended Plan: CloudCore Business>
Satisfactory is memory-bound once your factory scales past a few hundred buildings. For a smooth co-op experience on a mature save, we recommend the CloudCore Business plan:>
- 8 vCPU cores
- 16 GB RAM (24 GB available on upgrade)
- 200 GB NVMe SSD
- Unmetered 1 Gbps bandwidth
- Starting at EUR 29.99/month>
Smaller plans can host a fresh save, but late-game factories will stutter under 16 GB. Scale up rather than fight memory pressure.
Connect to your server:
ssh youruser@your-server-ipOfficial documentation for the Satisfactory dedicated server lives at satisfactory.wiki.gg/wiki/Dedicated_Servers. Keep that page open for reference; it tracks every patch-level change to the server binary.
Step 1: Update Ubuntu 24.04
Always start with a clean, patched system. Kernel and glibc updates in particular affect how the game binary schedules threads.
sudo apt update && sudo apt upgrade -yInstall the handful of libraries SteamCMD and the Satisfactory binary require:
sudo apt install -y software-properties-common lib32gcc-s1 libsdl2-2.0-0 \
ca-certificates curl wget tar rsyncIf a kernel update was applied, reboot before continuing:
sudo rebootStep 2: Create a Dedicated steam User
Running game servers as root is a classic security mistake. Create an unprivileged steam account that owns SteamCMD, the Satisfactory files, and the save directory.
sudo useradd -m -s /bin/bash steam
sudo passwd steamOptionally grant the user sudo access only if you intend to administer from within its shell (most operators leave it unprivileged):
# Skip this unless you have a reason
sudo usermod -aG sudo steam
Switch to the new user for all subsequent SteamCMD operations:
sudo su - steamYou will see the prompt change to steam@your-server:~$. Every command from here through Step 6 runs as this user.
Step 3: Install SteamCMD
SteamCMD is Valve's headless tool for downloading and updating dedicated server apps. Ubuntu ships it in the multiverse repository.
Exit back to your sudo user, enable multiverse, and install:
exit # return to your sudo user
sudo add-apt-repository multiverse -y sudo dpkg --add-architecture i386 sudo apt update sudo apt install -y steamcmd
You will be prompted to accept the Steam Subscriber Agreement. Use Tab to highlight OK, press Enter, then accept with I AGREE.
Create a convenient symlink so the steam user can invoke SteamCMD without a full path:
sudo ln -sf /usr/games/steamcmd /usr/local/bin/steamcmdSwitch back to the steam user:
sudo su - steamVerify:
steamcmd +quitExpected output (abbreviated):
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation - version ...
-- type 'quit' to exit --
Loading Steam API...OKStep 4: Download the Satisfactory Server (App 1690800)
Satisfactory's dedicated server has Steam App ID 1690800 and is available through anonymous login -- you do not need to own the game on the server account.
Create a target directory and run SteamCMD:
mkdir -p ~/SatisfactoryDedicatedServer
steamcmd \
+force_install_dir /home/steam/SatisfactoryDedicatedServer \
+login anonymous \
+app_update 1690800 validate \
+quitThe download is roughly 6-8 GB and takes a few minutes on a 1 Gbps connection. Expected output tail:
Update state (0x61) downloading, progress: 99.87 (7834...)
Success! App '1690800' fully installed.If you want the experimental branch (Update X early access), append -beta experimental to the app_update line:
steamcmd +force_install_dir /home/steam/SatisfactoryDedicatedServer \
+login anonymous \
+app_update 1690800 -beta experimental validate \
+quitStep 5: Open UDP Port 7777
Since Update 8, Satisfactory uses a single UDP port for game traffic, server queries, and messaging. Open it on the host firewall.
Exit back to your sudo user:
exitAllow UDP 7777 in UFW (and SSH if you have not already):
sudo ufw allow OpenSSH
sudo ufw allow 7777/udp comment 'Satisfactory game port'
sudo ufw enable
sudo ufw status verboseExpected output:
Status: active
...
7777/udp ALLOW IN Anywhere
7777/udp (v6) ALLOW IN Anywhere (v6)If your VPS provider also runs an external firewall (CloudCore's control panel, for example, or a Hetzner Cloud firewall), mirror the same rule there. Connection timeouts are almost always caused by forgetting the provider-side firewall.
Step 6: First Launch with FactoryServer.sh
Return to the steam user and run the bundled launcher once to generate the default config files and verify the binary starts cleanly:
sudo su - steam
cd ~/SatisfactoryDedicatedServer
./FactoryServer.shYou will see the Unreal Engine startup log, followed by lines ending in:
LogNet: GameNetDriver IpNetDriver_2 IpNetDriver listening on port 7777
LogGame: Server online - Ready for connectionsPress Ctrl+C to stop. The first run created the config directory structure at ~/.config/Epic/FactoryGame/Saved/. We will not launch it manually again -- systemd takes over next.
Step 7: Create a systemd Service
Running Satisfactory under systemd gives you automatic startup on boot, automatic restart after a crash, and unified logging via journalctl.
Exit back to your sudo user:
exitCreate the unit file:
sudo tee /etc/systemd/system/satisfactory.service > /dev/null <<'EOF' [Unit] Description=Satisfactory Dedicated Server Wants=network-online.target After=syslog.target network.target nss-lookup.target network-online.target[Service] Type=simple User=steam Group=steam WorkingDirectory=/home/steam/SatisfactoryDedicatedServer ExecStartPre=/usr/games/steamcmd +force_install_dir /home/steam/SatisfactoryDedicatedServer +login anonymous +app_update 1690800 validate +quit ExecStart=/home/steam/SatisfactoryDedicatedServer/FactoryServer.sh Restart=on-failure RestartSec=10 KillSignal=SIGINT TimeoutStopSec=60 LimitNOFILE=100000
[Install] WantedBy=multi-user.target EOF
Explanation of key directives:
ExecStartPre— re-runs SteamCMD on every start, so your server auto-updates when Coffee Stain Studios ships a patch.Restart=on-failure— if the game crashes, systemd restarts it after 10 seconds. Clean shutdowns (such assystemctl stop) do not trigger a restart.KillSignal=SIGINT— Satisfactory gracefully flushes the autosave on SIGINT. Using the default SIGTERM can corrupt the latest save.LimitNOFILE=100000— raises the file descriptor cap; the Unreal Engine networking stack opens a large number of sockets at scale.
sudo systemctl daemon-reload
sudo systemctl enable --now satisfactory
sudo systemctl status satisfactoryExpected output:
● satisfactory.service - Satisfactory Dedicated Server
Loaded: loaded (/etc/systemd/system/satisfactory.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-04-16 10:30:00 UTC; 1min ago
Main PID: 12345 (FactoryServer.s)
Tasks: 42 (limit: 38123)
Memory: 3.2G
CGroup: /system.slice/satisfactory.service
├─12345 /bin/sh ./FactoryServer.sh
└─12350 ./FactoryGame/Binaries/Linux/FactoryServer-Linux-Shipping FactoryGameTail the logs any time with:
sudo journalctl -u satisfactory -fStep 8: Set the Admin Password via Server Manager
Unlike most dedicated servers, Satisfactory does not use an admin_password= line in an ini file. Instead, you claim the server from the Satisfactory game client and set the password through the in-game Server Manager. This happens once, and the credential is stored encrypted on the server.
your-server-ip:7777. Leave the name as anything meaningful like "My CloudCore Server."From this point onward, the server is live. Anyone with the IP can join; only holders of the admin password can start/stop sessions, load saves, or kick players.
If you ever lose the password, delete ~/.config/Epic/FactoryGame/Saved/SaveGames/server/ServerData.db (with the service stopped) to reset the claim and start fresh.
Step 9: Locate and Back Up Save Files
Satisfactory stores saves and configs in predictable paths under the steam user's home directory:
- Save files:
/home/steam/.config/Epic/FactoryGame/Saved/SaveGames/server/ - Config files:
/home/steam/.config/Epic/FactoryGame/Saved/Config/LinuxServer/ - Log files:
/home/steam/.config/Epic/FactoryGame/Saved/Logs/
<SessionName>_autosave_N.sav (rolling autosaves) and <SessionName>_YYYY-MM-DD-HH-MM-SS.sav (manual saves). The server autosaves every 5 minutes by default — configurable in Game.ini.Do a quick manual snapshot to validate file permissions:
sudo cp -r /home/steam/.config/Epic/FactoryGame/Saved/SaveGames/server \
/home/steam/satisfactory-manual-backup-$(date +%F)
sudo chown -R steam:steam /home/steam/satisfactory-manual-backup-*Always stop the service before copying for a consistent point-in-time backup:
sudo systemctl stop satisfactory
copy files
sudo systemctl start satisfactoryFor hot snapshots while the service is running, rsync is safe because autosaves are written atomically (temp file + rename).
Step 10: Automated Hourly Backups with rsync
A backup script that runs hourly via cron, keeps 7 days of history, and logs its output:
sudo tee /usr/local/bin/satisfactory-backup.sh > /dev/null <<'EOF' #!/bin/bash set -euo pipefailSRC="/home/steam/.config/Epic/FactoryGame/Saved/SaveGames/server/" DEST_ROOT="/home/steam/satisfactory-backups" TIMESTAMP=$(date +%Y-%m-%d_%H-%M) DEST="${DEST_ROOT}/${TIMESTAMP}" LOG="/var/log/satisfactory-backup.log"
mkdir -p "${DEST}"
Hot rsync; autosaves are written atomically so this is safe.
rsync -a --delete "${SRC}" "${DEST}/" 2>>"${LOG}"Retain 7 days (168 hourly snapshots) and prune the rest.
find "${DEST_ROOT}" -maxdepth 1 -mindepth 1 -type d -mtime +7 -exec rm -rf {} \;echo "[$(date -Iseconds)] Backup complete -> ${DEST}" >> "${LOG}" EOF
sudo chmod +x /usr/local/bin/satisfactory-backup.sh sudo touch /var/log/satisfactory-backup.log sudo chown steam:steam /var/log/satisfactory-backup.log
Install the cron entry as the steam user:
sudo crontab -u steam -eAdd:
0 /usr/local/bin/satisfactory-backup.shFor off-site safety, chain a second cron line that pushes backups to a remote host over SSH:
30 /6 rsync -az --delete /home/steam/satisfactory-backups/ [email protected]:/backups/satisfactory/Restoring is straightforward: stop the service, copy a chosen timestamped directory back to SaveGames/server/, fix ownership, and start the service.
Alternative: LinuxGSM Installation
If you prefer a scripted wrapper with built-in commands for updates, backups, monitoring, and Discord alerts, LinuxGSM is an excellent alternative to the manual approach above. It wraps SteamCMD and systemd behind friendly subcommands.
Install as the steam user:
sudo su - steam
wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh
bash linuxgsm.sh sfserver
./sfserver auto-installTypical LinuxGSM commands:
./sfserver start
./sfserver stop
./sfserver restart
./sfserver update # Pulls latest Satisfactory build via SteamCMD
./sfserver backup # Tarballs saves into ~/backups
./sfserver monitor # Auto-restarts on crash (run via cron)
./sfserver details # Shows IP, ports, and connect infoLinuxGSM creates its own systemd-adjacent scripts and cron entries. If you go this route, skip Step 7 (systemd service) and Step 10 (backup script) from the manual guide — LinuxGSM covers both. You still need Steps 1, 2, 3, 5, and 8 (firewall and in-game admin claim remain identical).
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
./FactoryServer.sh: No such file or directory | SteamCMD install did not complete | Re-run the +app_update 1690800 validate step; check /home/steam/Steam/logs/stderr.txt |
| Clients see "Connection Timed Out" | Port 7777 UDP blocked by provider firewall | Confirm UFW allows 7777/udp and the provider-side firewall (CloudCore dashboard, Hetzner Cloud, etc.) does too |
| Server shows in client list but refuses join | Version mismatch between client and server | Run sudo systemctl restart satisfactory — the ExecStartPre SteamCMD call pulls the latest build |
| High RAM usage, server killed by OOM | Late-game save exceeds 16 GB headroom | Upgrade to a CloudCore Business Plus or Enterprise plan, or add an 8 GB swap file as a stopgap |
| Save file from single-player will not load | Single-player save in Experimental branch, server on Early Access | Switch branches with -beta experimental in the app_update line |
| Admin password forgotten | No file-based override exists | Stop the service, delete ServerData.db, restart, re-claim from the client |
systemctl status reports active (running) but port is closed | FactoryServer.sh crashed silently before binding | Check journalctl -u satisfactory -n 200 --no-pager for LogInit: Error lines |
Useful Log Commands
Live stream:
sudo journalctl -u satisfactory -fLast 200 lines without the pager:
sudo journalctl -u satisfactory -n 200 --no-pagerUnreal Engine's own logs for deeper debugging:
ls -lh /home/steam/.config/Epic/FactoryGame/Saved/Logs/
tail -f /home/steam/.config/Epic/FactoryGame/Saved/Logs/FactoryGame.logFAQ
How much RAM does a Satisfactory dedicated server need?
A fresh save runs comfortably on 8 GB, but a mid-to-late-game factory with thousands of conveyor belts, trains, and drones consumes 12-16 GB of RAM. For multiplayer sessions of 4+ players on a mature save, plan for 16 GB or more. This is why we recommend the CloudCore Business plan (16 GB RAM) as a baseline.
Why is UDP port 7777 the only port I need to open?
As of the Update 8 networking rework, Satisfactory consolidated game traffic, query traffic, and messaging onto a single UDP port. Older guides mention ports 15000 and 15777, but those are no longer required. Open UDP 7777 inbound on the VPS firewall and you are done.
How do I set the admin password without editing a config file?
Satisfactory dedicated servers use an in-game claiming flow rather than an ini-based admin password. Launch the game client, add the server by IP in the Server Manager, claim it with your Epic or Steam account, then set the admin password in the Administration tab. The password is stored encrypted on the server.
Where are Satisfactory save files stored on Linux?
Saves live at /home/steam/.config/Epic/FactoryGame/Saved/SaveGames/server/. Configuration files sit in /home/steam/.config/Epic/FactoryGame/Saved/Config/LinuxServer/. Always stop the systemd service before copying saves to avoid capturing a partial write — or use the rsync script in Step 10, which is safe for hot backups because autosaves are written atomically.
Is it cheaper to self-host than to use Nitrado or GPORTAL?
Yes, significantly. A 16 GB slot on Nitrado or GPORTAL costs roughly EUR 25-35 per month for Satisfactory alone. A CloudCore Business VPS at EUR 29.99 gives you full root access, can host multiple game servers simultaneously (Satisfactory, Terraria, Factorio), and you own the save files. Over 12 months you typically save 70-80 percent versus paid game hosts once you account for additional games on the same box.
Should I use LinuxGSM instead of the manual SteamCMD approach?
LinuxGSM is a fantastic wrapper if you prefer guided commands like sfserver update and built-in backup/monitor helpers. The manual method in this guide gives you deeper control, a cleaner systemd integration, and fewer moving parts. Both are valid — we covered LinuxGSM as an alternative path above.
Does Satisfactory support mods on a Linux dedicated server?
Yes. The Satisfactory Mod Manager (SMM) fully supports Linux dedicated servers. After installing the server, point SMM at your server IP, authenticate with your admin password, and install mods remotely. Mods live in the FactoryGame/Mods directory and survive game updates as long as the mod author ships a compatible build.
Next Steps
With Satisfactory humming along, the same VPS can easily host more of your gaming stack:
- How to Install a Rust Game Server on Ubuntu — another SteamCMD-based workflow with monthly map wipes.
- How to Install a Terraria Dedicated Server — lightweight, perfect to co-host alongside Satisfactory on the same VPS.
- How to Install a Factorio Headless Server — the spiritual cousin of Satisfactory; runs on 2 GB of RAM and pairs well with it.
- Bookmark the official docs — the Satisfactory Dedicated Servers wiki tracks every patch-level change to config options and command-line flags.
- Add monitoring — deploy Uptime Kuma or a lightweight Prometheus node exporter to alert you when the server misses a heartbeat.
- Set up off-site backups — extend the
rsyncscript in Step 10 to push to Backblaze B2, Wasabi, or a second VPS for disaster recovery.
Need more horsepower for a late-game factory?>
The CloudCore Business plan is the sweet spot for Satisfactory at EUR 29.99 per month, but heavy modpacks and 8-player co-op benefit from the Business Plus tier with 24 GB RAM. Every plan includes full root access, unmetered 1 Gbps bandwidth, and one-click Ubuntu 24.04 deployment — you will be connecting to your new factory in under 60 seconds.>
Deploy a Satisfactory-Ready VPS Now