Workload · Hosting a Soulmask world

Host a Soulmask dedicated server for your tribe, set up safely on Linux

To host a Soulmask world of your own, you install the free dedicated server with SteamCMD, open UDP ports 8777 and 27015, and give the game 16 GB of RAM or more plus two to four processor cores, as the developers' tutorial asks. It runs on Linux or Windows. Below you will find what to look for in the machine, an install that never runs the game as root, how passwords and admin rights work, and how to keep copies of the world.

The short version
  1. Free server: SteamCMD app 3017300 on Linux, 3017310 on Windows
  2. Players need UDP 8777 and 27015; nothing else
  3. Each world: 16 GB RAM minimum, two to four cores
  4. Clean shutdowns go through the local maintenance port
  5. Your world lives in one folder you can archive

What your world needs from the machine

Memory first. The Soulmask wiki's Private Server tutorial, which the developers announced on Steam as their own guide to dedicated servers, says one game process wants no less than 16 GB of RAM plus two to four CPU cores. That figure covers the game alone, so a machine with exactly 16 GB leaves nothing for Linux itself. Pick one with more.

  • Players' traffic: roughly 100 kbps per player in each direction, per the tutorial. By our arithmetic, 20 players come to about 2 Mbit/s each way.
  • Disk: the tutorial puts the download at 1-2 GB and asks for about 20 GB free. It was last updated in August 2024, before version 1.0, so expect the files to have grown since.
  • More than one map: the tutorial allows several game instances on one machine, and each one is its own process with its own 16 GB floor.

Because the tutorial asks two to four cores of each process, our reading is that more cores mainly give you room for extra worlds. Each chip we rent is listed with its clock speed on the Intel processor list.

Linux or Windows: both are supported

You can choose. Steam carries two builds: app 3017300 for Linux and app 3017310 for Windows, both downloaded with an anonymous SteamCMD login, so you do not need a Steam account on the server. On Windows the tutorial starts the server from StartServer.bat and asks you to install the telnet client, which it uses to shut the server down properly.

This page uses Ubuntu, because Linux costs nothing extra. On our machines Windows Server is a paid licence charged monthly in addition to the server, it depends on the line whether a given machine offers it, and no ARM machine runs it.

Up and running: the install

Valve, who make SteamCMD, warn against running it as root and say 64-bit Ubuntu needs the lib32gcc-s1 package. So the game gets its own account with no login shell. Paste this, as root, into a newly installed server; it switches the firewall on, allowing only SSH and the two game ports, before anything else is installed:

apt update && apt install -y lib32gcc-s1 curl telnet ufw
useradd -m -s /usr/sbin/nologin soulmask
sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
ufw default deny incoming
ufw allow 22/tcp
ufw allow 8777,27015/udp
ufw --force enable
sudo -u soulmask bash -c 'mkdir -p /home/soulmask/steamcmd && cd /home/soulmask/steamcmd && curl -sqL https://client-update.steamstatic.com/installer/steamcmd_linux.tar.gz | tar zxf - && ./steamcmd.sh +force_install_dir /home/soulmask/game +login anonymous +app_update 3017300 validate +quit'
  1. Wait for SteamCMD to report success. The server now sits in /home/soulmask/game, with StartServer.sh at the top of that folder.
  2. Create the password file described in the next section.
  3. Save the service file, run systemctl daemon-reload, then enable and start it with systemctl enable --now soulmask.
  4. Watch WS/Saved/Logs/WS.log inside the game folder. When the world is up, it prints a line containing SERVER UNIQUE ID: that 25-character code is your server's invite code, which players can use to find you in the server list.

Passwords, updates and a world that survives restarts

Soulmask takes its join password (-PSW) and admin password (-adminpsw) on the launch line; the tutorial shows no setting in a file for either. To keep them out of the service file, make a private file for them with touch /etc/soulmask.env && chmod 600 /etc/soulmask.env, edit it with nano, and put in two lines: SM_PSW=yourjoinpassword and SM_ADMIN=youradminpassword, swapping the examples for passwords that contain no spaces. The service below reads it when it starts. The service file belongs at /etc/systemd/system/soulmask.service:

[Unit]
Description=Soulmask world
Wants=network-online.target
After=network-online.target

[Service]
User=soulmask
WorkingDirectory=/home/soulmask/game
EnvironmentFile=/etc/soulmask.env
ExecStartPre=-/bin/bash -c 'umask 077; mkdir -p /home/soulmask/archives; find /home/soulmask/archives -name "world-*.tgz" -mtime +14 -delete; [ -d WS/Saved ] && tar czf /home/soulmask/archives/world-$$(date +%%Y%%m%%d-%%H%%M).tgz WS/Saved'
ExecStartPre=-/home/soulmask/steamcmd/steamcmd.sh +force_install_dir /home/soulmask/game +login anonymous +app_update 3017300 +quit
ExecStart=/bin/bash /home/soulmask/game/StartServer.sh "-SteamServerName=Our Tribe" -MaxPlayers=10 -pve -Port=8777 -QueryPort=27015 -EchoPort=18888 -PSW=${SM_PSW} -adminpsw=${SM_ADMIN}
ExecStop=/bin/bash -c '(sleep 1; echo "quit 10"; sleep 3) | telnet 127.0.0.1 18888; while kill -0 $MAINPID 2>/dev/null; do sleep 2; done'
TimeoutStartSec=1800
TimeoutStopSec=180
Restart=on-failure

[Install]
WantedBy=multi-user.target

Here is what it does for you. Each start first packs the world folder into a dated archive, while the game is not running, and clears archives older than two weeks. Then it updates the game. The - in front of both steps means a failure there never stops your world from starting; at worst it runs one update behind. A slow step is another matter: systemd normally gives the whole start, these steps included, 90 seconds, and the - does not help when time runs out, so TimeoutStartSec=1800 lets a big SteamCMD update finish instead of being cut off halfway.

Stopping uses a wrapper we wrote around the tutorial's quit command. It feeds quit 10 to telnet on the maintenance port and then waits until the game process has gone; the tutorial itself only shows someone typing quit into a telnet session. It matters because the developers warn that closing the server abruptly can roll your world back.

One assumption sits underneath: StartServer.sh must keep running in the foreground until the game exits, since that is what lets $MAINPID follow it. Should the world shut down seconds after every start, check systemctl status soulmask: if the script has handed the game off to the background and exited, systemd takes the service as finished and stops everything it started, the game included, without a clean quit.

One honest limit: while the server runs, its passwords are part of the process's command line, and any account on the machine can read them with ps. Only give shell logins on this machine to people you would hand admin rights anyway.

Which doors to open, and which to keep shut

Your players only need two: UDP 8777, the game port, and UDP 27015, the Steam query port that puts you in the server list. The -Port and -QueryPort flags move them if you run a second world, and -MULTIHOME= chooses which address the server listens on: 0.0.0.0 for all of them, or a single address that belongs to this server. The third port, set with -EchoPort, is a TCP maintenance channel the tutorial says needn't be reachable from outside. It accepts commands like shutting the server down and has no password documented, so the firewall above keeps it closed to the internet.

If the world starts but nobody can see it, the tutorial points to blocked game or query ports. If it never starts, look in WS.log for the Steam lines: a healthy start says the Steam game server API is up for app 2646460.

Taking charge of your world in-game

  1. Join your server, press ~ to open the console, and enter gm key and then your admin password.
  2. In the GM panel that opens, enter the password again to take admin rights.
  3. To ban someone, use AddServerPermissionList 1 with their SteamID; RemoveServerPermissionList 1 lifts it. List 4 mutes instead.
  4. Before risky changes, save on demand with gm BaoCun.

Want PvP? Swap -pve for -pvp in the service file and restart with systemctl restart soulmask, which also gives you a fresh archive. Restart through systemctl rather than typing quit yourself: a hand-typed quit is a clean exit, so the service stays stopped.

Why your own server is worth it

With a Primcast server for your games, the whole physical machine is yours: no other customer on its processor or memory, and a network port that is not shared with any other customer at the access switch. The port is unmetered at 500 Mbps or 1 Gbps depending on the line, with no traffic allowance to run past. A server already in a rack is usually ready about 30 minutes after your order is approved; payment checks can make that longer.

  • On rack servers and blades you also get a management controller with its own browser console, opened from the dashboard after you create a console login there. That console still works if a firewall mistake ever locks you out of SSH.
  • Choose a city close to your tribe from our five data centers, three in the US and two in Europe.
  • Month to month, no contract. You manage the server; we keep the hardware and the network running.

Those archives sit on the same drives as your live world, so copy them to another computer now and then. One thing this page leaves out: cross-map play between Cloud Mist Forest and Shifting Sands is configured from separate instructions the developers posted on their official Discord, pointed to in a Steam announcement before the 1.0 launch. Running the game in another survival setting? Our Conan Exiles walkthrough follows the same approach.

Questions people ask

Can I run my Soulmask server on Linux instead of Windows?
Yes, the developers support both. The Linux build is SteamCMD app 3017300 and you start it with StartServer.sh; the Windows build is app 3017310 with StartServer.bat. Linux saves you a Windows licence.
Do I need a Steam account to download the server?
No. The tutorial installs both builds with login anonymous in SteamCMD. Your players still need the game itself to join.
Is 16 GB of memory enough?
It is the developers' minimum for the game itself. Linux needs memory as well, so a box with only 16 GB is too tight. Choose more, and multiply the floor by the number of worlds you plan to run on one machine.
How do I find my server's invite code?
It is printed when the server first runs. Open WS/Saved/Logs/WS.log in the game folder and look for SERVER UNIQUE ID; the 25-character code after it is what players use to find your server.
Will a game update wipe my world?
The developers said private server saves stay usable in 1.0, though they suggest starting fresh to see everything it changed. The service on this page also archives the world before every update, so you can go back if something goes wrong.

Ready to give your tribe a home?

Pick a server with spare memory close to where your tribe plays, and you can follow these steps tonight.

Start your Soulmask world

Read next