Skip to main content

Satisfactory

How I installed and configured a Satisfactory dedicated server on Ubuntu.

Prerequisites

  • Ubuntu Linux (24.04 is what I used)
  • sudo privileges

Step 1: Create a user to run the server

Create new steam user to run the server.

sudo adduser steam

Follow the prompts. I just left things blank/default. Mash enter. Save the password in case you need it for some reason. I keep the credential in Bitwarden.

Step 2: Install steamcmd

https://developer.valvesoftware.com/wiki/SteamCMD#Downloading_SteamCMD

Skip the create user step since we did that already. Add the necessary repositories and install steamcmd.

sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update;
sudo apt install steamcmd

Step 3: Install Satisfactory server

https://satisfactory.wiki.gg/wiki/Dedicated_servers

Install the Satisfactory dedicated server as the steam user.

Switch to the steam user.

sudo su - steam

Then install the game server with steamcmd

/usr/games/steamcmd +force_install_dir ~/SatisfactoryDedicatedServer +login anonymous +app_update 1690800 validate +quit

Step 4: Create satisfactory service

https://satisfactory.wiki.gg/wiki/Dedicated_servers/Running_as_a_Service

Create a new systemd unit file at /etc/systemd/system/satisfactory.service

sudo nano /etc/systemd/system/satisfactory.service

Copy the unit file config from the Satisfactory wiki and paste it into the unit file. For ExecStartPre, ExecStart, User, Group, and WorkingDirectory, use whatever user you created to run the service, in my case the steam user.

This service will attempt to update the server before starting each time, including on system bootup after reboot for scheduled apt updates.

[Unit]
Description=Satisfactory dedicated server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
ExecStartPre=/usr/games/steamcmd +force_install_dir "/home/steam/SatisfactoryDedicatedServer" +login anonymous +app_update 1690800 validate +quit
ExecStart=/home/steam/SatisfactoryDedicatedServer/FactoryServer.sh
User=steam
Group=steam
Restart=on-failure
RestartSec=60
KillSignal=SIGINT
WorkingDirectory=/home/steam/SatisfactoryDedicatedServer

[Install]
WantedBy=multi-user.target

Reload systemd then enable and start the service.

sudo systemctl daemon-reload
sudo systemctl enable satisfactory
sudo systemctl start satisfactory

Service status can be checked with sudo systemctl status satisfactory.

Step 5: Firewall rules and port forwarding

Allow external connections to the server if you want to play with friends. Ubuntu uses ufw for a firewall, but it's disabled by default. If enabled, allow traffic to whatever port the Satisfactory server is listening on (default 7777 TCP and UDP, 8888 TCP)

sudo ufw allow 7777 comment 'Allow inbound to Satisfactory server'
sudo ufw allow 8888 comment 'Allow inbound to Satisfactory server'

After creating a firewall rule to allow traffic to the host, forward ports 7777 and 8888 from your network router to the host. Instructions will vary by model and vendor, so look up "how to port forward on a [brand] [router model]".

NOTE: At time of install (2024-11-04) port redirection is NOT supported. The external port number must match the internal port number, e.g. do not forward internal port number 7777 as external port number 7778 on the router.

Step ???: The End

Starting and stopping the Satisfactory server is as easy as starting and stopping the service with systemctl start/stop. The server should be kept up to date automagically if you reboot your system daily/weekly after apt upgrades. My machine runs upgrades and reboots on Sunday at 4:00 AM, so the Satisfactory service will start after reboot, then check for updates on Steam before starting the server.