What the server needs from the host
FakeFish publishes no CPU, memory or disk floor for the dedicated server. What the official sources do pin down is below; the hosting page on the wiki is itself flagged as last updated for version 0.18.15.0, so where it and the current source on GitHub disagree, the table follows the source and says so.
| Item | Value | Where it is stated |
|---|---|---|
| Install | SteamCMD, login anonymous, app_update 1026340 validate | Wiki; Steam announcement of June 2019 |
| Ports | UDP 27015 game, UDP 27016 query; both must be reachable to join and to be listed | Wiki (Serversettings.xml); NetConfig.cs |
| Players | MaxPlayers 1-16 | Wiki; NetConfig.cs caps it at 16 |
| Linux distribution | Ubuntu 24.04 "appears to work" out of the box; 22.04 lacks the older OpenSSL the server looks for (note written for 0.18.15.0) | Wiki |
| Architecture | x86-64: the Linux server deploy script publishes for linux-x64 only | FakeFish's GitHub repository |
| Shutdown | SIGTERM closes the Linux server gracefully | Hoist the Sails update notes, October 2022 |
With no published sizing figure, size from the crew count and the mods you load. Run one instance through a round at the player cap, watch CPU and memory with top, and only then decide whether the box needs more.
What a single-tenant machine changes
Each machine is single-tenant hardware with root, so all cores and all RAM go to DedicatedServer and whatever else you choose to run beside it. Each machine includes one public IPv4 and an unmetered port: 1 Gbps on 10 of the 18 configurable lines, 500 Mbps on the other 8. No traffic is counted and there is no overage line. IPv6 is added free at checkout, as individual addresses.
A public IPv4 matters for this game. The wiki's port forwarding steps exist because a home router sits between the server and the Internet; on a machine with its own address there is no router, only the host firewall, and the two UDP ports are opened there. Rack servers and blades also carry an out-of-band controller (HPE iLO, Dell iDRAC or a Supermicro BMC) which the dashboard exposes as a browser console once a console login exists for it; Moonshot cartridges other than the m510 and m710x have power control only.
The machines sit in New York, Miami, San Francisco, Amsterdam and Bucharest on our own network, AS19624. Choose a city near the crew on the data center locations page, then the build on the game server hosting page. A racked machine is live about 30 minutes after the order is approved; a build to order takes 4-24 hours.
Choosing the line
- An x86 line. With no official floor, our suggestion is to start small and measure; a rack server makes sense when the world shares the box with other game servers or tools, and it brings the out-of-band console with it.
- Not ARM. The X-Gene cartridge boots Ubuntu 16.04 and 18.04 and nothing else, and the Linux server build in FakeFish's repository targets
linux-x64only. The same rules out every other ARM line. - Ubuntu 24.04 is a one-click install on the Linux dedicated servers, and the wiki reports that it appears to need no OpenSSL workaround, though that note dates from version 0.18.15.0; test before you rely on it.
Installing on Ubuntu 24.04
The firewall goes up before the server first listens, with IPV6=yes set first so ufw stores an IPv6 twin of every rule. The server runs as its own unprivileged user, baro. The last command shows Valve's Steam licence prompt; accept it.
# as your own sudo user
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
sudo ufw allow OpenSSH
sudo ufw allow 27015:27016/udp
sudo ufw --force enable
sudo useradd -m -s /bin/bash baro
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmd
Then install app 1026340 as baro and hand the process to systemd. The wiki says the folder ~/.local/share/Daedalic Entertainment GmbH/Barotrauma/ must exist before the server will start, so the first line creates it. The update step before each start is prefixed with - so a SteamCMD run that exits with an error does not block the launch, and TimeoutStartSec=1800 gives a large patch time to download; a run that hangs past that limit still fails the start.
sudo -u baro bash -c 'cd /home/baro && mkdir -p "/home/baro/.local/share/Daedalic Entertainment GmbH/Barotrauma" && /usr/games/steamcmd +force_install_dir /home/baro/server +login anonymous +app_update 1026340 validate +quit'
sudo tee /etc/systemd/system/barotrauma.service > /dev/null <<'EOF'
[Unit]
Description=Barotrauma dedicated server
Wants=network-online.target
After=network-online.target
[Service]
User=baro
WorkingDirectory=/home/baro/server
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/baro/server +login anonymous +app_update 1026340 +quit
ExecStart=/home/baro/server/DedicatedServer
TimeoutStartSec=1800
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now barotrauma
sudo journalctl -u barotrauma -f
- Wait for
Server startedin the journal, then press Ctrl+C to leave the log. - If the log reports that InitGameServer returned false, or players fail Steam authentication, the wiki's remedy is to create
~/.steam/sdk64for thebarouser, place a copy of Steam'ssteamclient.sothere, and restart the service. Treat it as a fix to try only then: the Embrace the Abyss update notes (April 2021) say Steamworks now installs that file itself. - Stop the service before editing any file in the next section:
sudo systemctl stop barotrauma.
The routine update in the unit leaves out validate. Valve's SteamCMD page says validation overwrites any installed file that has been changed and recommends it only on first install or when the server has problems.
serversettings.xml and the admin list
serversettings.xml sits in the install folder, /home/baro/server. The server reads it at launch and, per its source, writes it back when it starts and again when it shuts down, so an edit made while it runs is lost. The attributes that matter first: ServerName, port, queryport, password, IsPublic (true to appear in the server browser) and MaxPlayers. The source stores password in plain text in that file, so after the first start run sudo -u baro chmod 600 /home/baro/server/serversettings.xml.
Admins live in Data/clientpermissions.xml, one Client entry per player keyed on the account ID. The wiki gives the STEAM_1:Y:Z form; the parser in the game's source also accepts the 17-digit SteamID64. permissions="All" grants every permission but no console commands; each command is listed by name. Per the wiki, an unparseable file gets deleted and regenerated, so keep a copy before editing.
<?xml version="1.0" encoding="utf-8" ?>
<!-- /home/baro/server/Data/clientpermissions.xml -->
<ClientPermissions>
<Client
name="CaptainName"
accountid="STEAM_1:1:12345678"
permissions="All">
<command name="giverank" />
<command name="clientlist" />
<command name="kick" />
<command name="ban" />
<command name="startgame" />
<command name="endgame" />
</Client>
</ClientPermissions>
Once you hold those rights, the in-game console does the rest: giverank assigns a preset rank (None, Moderator or Admin, from Data/permissionpresets.xml), giveperm and givecommandperm add single rights, showperm lists them. Server commands include clientlist, kick, ban, banaddress, unban, servername, setpassword, setmaxplayers, startgame and endgame. Typing into the journal does nothing: per the server's source, standard input is ignored whenever systemd or anything else redirects it.
Where campaign saves live
Multiplayer campaigns are saved under the running user's local data folder. The save code in the GitHub repository names it in a comment and builds it from .NET's local application data path: for baro that is /home/baro/.local/share/Daedalic Entertainment GmbH/Barotrauma/Multiplayer. A custom SavePath in config_player.xml, which the server reads from its install folder, overrides that location, and campaigns then go to a Multiplayer subfolder of it (SaveUtil.cs and GameSettings.cs).
- Back up with the service stopped:
sudo systemctl stop barotrauma, archive theMultiplayerfolder plusserversettings.xmlandData/clientpermissions.xml, start the service, then copy the archive to a machine you control. - Give the archive the same
chmod 600as the settings file, since it carries the join password. - Workshop mods go in
.../Barotrauma/WorkshopMods/Installedunder the same folder, copied from your own client, and are switched on in the install folder'sconfig_player.xml, per the wiki's mod guide.
Updates and restarts
FakeFish ships patches through Steam, and the dedicated server app updates through SteamCMD like the game does. With the unit above, sudo systemctl restart barotrauma stops the server with SIGTERM, runs app_update 1026340, then starts the new build. Restart outside play hours, since every connected player drops. If an update ever leaves the install broken, copy your edited files aside, stop the service and run the install line from the earlier block once more, validate included.
A second world on the same machine needs its own install folder, since serversettings.xml lives there, and its own pair of ports, for example 27017 and 27018 with a matching ufw allow 27017:27018/udp. That is our reading of where the files sit, not a FakeFish recipe; a separate user per world also keeps the save folders apart.
When this is the wrong place to run it
- A crew of friends who play only while the host is online: the game's own host-server menu does that without a second machine.
- Any ARM line, the X-Gene cartridge first among them: the server is built for x86-64 only.
- Someone who wants a panel that handles updates, mods and backups for them. Here you get root and a clean OS; the server, its files and its backups are yours to run.
Hardware or network faults go to support: phone, email and live chat, staffed 24/7.
Questions
Does the Barotrauma server run on Linux?
Yes. Install app 1026340 with SteamCMD under an anonymous login and start ./DedicatedServer from the install folder. The wiki, in a page written for version 0.18.15.0, gives an older-OpenSSL workaround for Ubuntu 22.04 and says 24.04 appears to work without one.
Which ports have to be open?
Two UDP ports: 27015 for game traffic and 27016 for Steam queries, set by port and queryport in serversettings.xml. On a machine with a public IPv4 that means ufw allow 27015:27016/udp; there is no router to forward through.
How do I make myself an admin?
Stop the server, add a Client entry with your Steam account ID to Data/clientpermissions.xml, list the console commands you want, and start it again. From then on giverank in the in-game console hands the Moderator or Admin preset to other players.
Where are the multiplayer campaign files on Linux?
In the running user's ~/.local/share/Daedalic Entertainment GmbH/Barotrauma/Multiplayer, unless a SavePath in the install folder's config_player.xml points elsewhere. Copy that folder off the machine with the server stopped.
How many players can one server take?
MaxPlayers accepts 1 to 16, and the code caps it at 16. FakeFish publishes no hardware figure per player, so watch CPU and memory through a full round before adding a second world to the same machine.
Why did my settings change back after I edited them?
Per the game's source, the server saves serversettings.xml at launch and at shutdown. An edit made while it runs is overwritten; stop the service, edit, then start it.