Difference between revisions of "SystemD Server Guide"
From Unofficial Stationeers Wiki
(First draft. Should be functional.) |
(No difference)
|
Revision as of 14:12, 8 December 2022
[Category:Tutorials]]
Contents
Requirements
- A machine that runs any Linux distribution that uses SystemD
- Access to, and basic knowledge of your Linux shell
- sudo-rights
- At least 16GB RAM
Preparing the server
To maximize server security, we will be setting up a dedicated user that only has the privileges to run the dedicated server, and nothing else.
sudo useradd -m stationeers
We won't need to log in with the user at all, so to increase security even more, let's prevent anyone from logging in with the user.
sudo nano /etc/passwd
Find the line that starts with stationeers:x:
(it's most likely the last line in the file). Replace the path at the end of this line (probably says /bin/bash
) with /sbin/nologin
.
Installing SteamCmd
Follow the instructions here to get SteamCmd installed: https://developer.valvesoftware.com/wiki/SteamCMD#Package_From_Repositories
Creating the SystemD service
Now it's time to create the service-file for SystemD so we can use it to control starting and stopping the Stationeers server.
sudo nano /etc/systemd/system/stationeers.service
Paste the following into the editor:
[Unit]
Description=Stationeers Dedicated Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
Environment="LD_LIBRARY_PATH=./linux64"
ExecStartPre=/usr/games/steamcmd +force_install_dir "/home/stationeers/StationeersDedicatedServer" +login anonymous +app_update 600760 validate +quit
ExecStart=/home/stationeers/StationeersDedicatedServer/rocketstation_DedicatedServer.x86_64 -loadlatest "NAME_OF_SAVE" PLANET -difficulty DIFFICULTY_SETTING -settings StartLocalHost true ServerVisible true LocalIpAddress IP_ADDRESS ServerName "NAME_IN_SERVER_LIST" ServerPassword "YOUR_SECURE_PASSWORD" ServerMaxPlayers MAX_PLAYERS UPNPEnabled false
User=stationeers
Group=stationeers
StandardOutput=journal
Restart=on-failure
WorkingDirectory=/home/stationeers
[Install]
WantedBy=multi-user.target
The stuff under [Unit]
and [Install]
is just to name the service in Linux, and declare when it's safe to start. It's the stuff under </code>[Service]</code> that is the "business end" of this file.
ExecStartPre
runs the steamcmd
application to update the dedicated server. You might want to check that steamcmd
is actually installed in /usr/games/ by running the following command: find /usr/ -name "steamcmd"
ExecStart
starts the Stationeers dedicated server. Be sure to replace all the UPPERCASE entries with what you want for your server. See here: https://github.com/rocket2guns/StationeersDedicatedServerGuide/blob/main/README.md
User
and Group
ensures that the dedicated server runs with the user we set up earlier.
StandardOutput=journal
directs all log-messages to the system journal. If something goes wrong, you don't have to locate any log-files, you just run the command journalctl -fu stationeers
to browse the journal for what service </code>stationeers</code> has output.
Restart=on-failure
ensures that if the server crashes, it will automatically restart.
WorkingDirectory=/home/stationeers
makes sure that everything we do assumes that we're standing in this folder when we do it. It's kind of redundant here, but I keep it in for safety.
Wrapping it all up
Now that we've created the service-file, we have to let SystemD know it's there. Run sudo systemctl daemon-reload
to do that. Any time you edit the service-file, you have to run this command to make SystemD aware of the changes you've made.
That's it! All we need to do now is run sudo systemctl start stationeers
, and it will download Stationeers Dedicated Server, start it with the parameters we've set, and run until we either reboot the machine, or run sudo systemctl stop stationeers
.
Want the dedicated server to start with the machine every time you reboot? Just run sudo systemctl enable stationeers
to enable start-on-boot, and sudo systemctl disable stationeers
to disable it again.