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.