Why your Steam account matters
Because there is no separate free download. SteamCMD, the text-only Steam client Valve provides for servers, fetches the whole game, server included, and only for an account that bought it. Valve's dedicated-server table puts Starbound under app 211820, says No to anonymous login, and flags it as needing a game purchase. Four things follow.
- You sign in by hand, once. The password goes into SteamCMD's own prompt. With Steam Guard switched on, Valve's guide says the code is asked for on that first sign-in, and again only if SteamCMD's stored login files get deleted.
- The sign-in is remembered, not the password. SteamCMD stores the saved login inside its data folder, which with the steamcmd package on Ubuntu goes in
~/.local/share/Steamin the home folder of the server's user (the launcher script Debian writes and Ubuntu ships picks that spot). Valve never puts it in so many words, but its guide implies that updates after that need only the account name, and the service below depends on that. Treat the folder like a house key: it is left out of your backups, and removing it logs the machine out, so the next sign-in asks for password and Steam Guard code again. - Your own game can get bumped. Valve says an account can only be signed in once at a time, desktop app and SteamCMD counted together, and the server signs in at every update. Valve's advice is to give servers an account of their own; for Starbound, that account has to buy its own copy.
- No password in any file. Nothing below puts it in a script, a service file or a command line. Only the account name is kept, in a file root alone can read and in the server user's private update log.
How much computer does a Starbound universe need?
Nobody publishes a figure for the server alone, so start from the game's own. Chucklefish's Linux list on the Steam store reads: processor, Core 2 Duo (minimum) or Core i3 (recommended); memory, 2 GB or 4 GB; free disk, 3 GB or 4 GB; system, Ubuntu 12.04 LTS or newer, or Debian Stable. Those figures include drawing the game, which a server never does. Our own reading: treat them as where you start, and let your group set the rest, because the work grows with how many worlds people have open together and with the mods you add. Watch top while everyone is on.
One firm rule, which is our conclusion rather than Chucklefish's: pick an x86 machine. SteamCMD is built for 32-bit x86 (Valve's Ubuntu steps switch on the i386 architecture for it), and the start-up line shown in the community guide says linux x86_64. Our ARM cartridge also only runs Ubuntu 16.04 or 18.04.
The server that fits
Our game server machines are whole bare metal servers you configure to suit, with whichever operating system you like, in five cities: Amsterdam and Bucharest in Europe, and, in the US, San Francisco, Miami and New York. Each sits on a port no other customer shares at the access switch, and that port is unmetered: 500 Mbps or 1 Gbps depending on the line, with no transfer allowance to run out of. A server already sitting in a rack is yours in about 30 minutes once the order is approved; payment checks can stretch that.
On rack servers and blades you also get a remote console, useful if you ever cut off your own SSH access. Pick the city nearest most of your players; you can ping a test address for each one from our data center locations. The whole range is on our dedicated server page. You manage the server; we keep the hardware and the network running.
Up and running in an evening
Firewall first, before anything listens, then an account just for the game. Valve warns not to run SteamCMD as root, and an old Chucklefish security notice told admins to give the server a tightly limited user. Paste this as your normal sudo user; the final line pauses on Steam's licence, which you accept to finish.
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
sudo ufw allow OpenSSH
sudo ufw --force enable
sudo ufw allow 21025/tcp
sudo useradd -m -s /bin/bash starbound
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y libvorbisfile3
sudo apt install steamcmd
(The community setup guide names libvorbisfile3 as something the server depends on. Port 21025 and the server's path come from that wiki too. Its Linux page mentions UDP as well as TCP, yet the server's own start-up log only ever mentions TCP, and the query service that would share 21025 stays off unless you turn on runQueryServer; if you do, open UDP as well: sudo ufw allow 21025/udp.) Next, the one hand-typed sign-in that downloads the game:
- Start SteamCMD as the game's user:
sudo -H -u starbound /usr/games/steamcmd. You get aSteam>prompt. - Choose the folder first, since Valve says to set it before signing in:
force_install_dir /home/starbound/game - Sign in:
login your_steam_name, followed by your password and, if requested, the Steam Guard code. - Fetch everything with
app_update 211820 validate, and when it reports success,quit.
Letting it look after itself
This block stores the account name where only root can read it, then installs a systemd service that starts the world at boot, checks Steam for an update at every start, and brings it back if it crashes. Replace your_steam_name before pasting.
sudo install -d -m 700 /etc/starbound
sudo install -m 600 /dev/null /etc/starbound/steam.env
echo 'STEAM_USER=your_steam_name' | sudo tee /etc/starbound/steam.env > /dev/null
sudo tee /etc/systemd/system/starbound.service > /dev/null <<'EOF'
[Unit]
Description=Starbound dedicated server
Wants=network-online.target
After=network-online.target
[Service]
User=starbound
Group=starbound
UMask=0077
EnvironmentFile=/etc/starbound/steam.env
WorkingDirectory=/home/starbound/game/linux
ExecStartPre=-/bin/bash -c '/usr/games/steamcmd +@NoPromptForPassword 1 +force_install_dir /home/starbound/game +login "$STEAM_USER" +app_update 211820 +quit > /home/starbound/steamcmd-update.log 2>&1'
ExecStart=/home/starbound/game/linux/starbound_server
TimeoutStartSec=1800
KillSignal=SIGINT
TimeoutStopSec=60
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now starbound
- Watch
journalctl -u starbound -ffor the line saying it listens on 21025, then connect from your own game. - The minus sign before the update means a failed update (an expired Steam sign-in, say) won't keep the world offline: it starts on the version already installed. A stuck update is another matter.
TimeoutStartSec=1800allows half an hour; after that systemd abandons that start and tries again. @NoPromptForPassword 1comes from Valve's own script example and keeps SteamCMD from waiting at a password prompt nobody will answer. What it printed lands insteamcmd-update.login the starbound user's home; if that shows a refused sign-in, repeat the hand-typed steps.Restart=alwaysrevives the world after a crash, while a deliberatesystemctl stopkeeps it down.KillSignal=SIGINTis the Ctrl+C the community guide uses to close it.- Starbound updates reach your friends through Steam automatically. Restart the service (
sudo systemctl restart starbound) and the server catches up.
Deciding who can join
Out of the box, anyone with the address can walk in. Settings live in storage/starbound_server.config, a JSON file written the first time the server runs; the defaults here are from the community wiki.
serverUsersholds one login per friend, like"maya": {"admin": true, "password": "..."}for you and"admin": falsefor the others. It starts empty.allowAnonymousConnectionsbegins as true. When everyone has a login, make it false so a password is required.maxPlayersbegins at 8;serverNameis the name people see.- Remote commands (RCON) start switched off, on port 21026 with a blank password. If you turn on
runRconServer, set a longrconServerPasswordandrconServerBindto127.0.0.1, leave 21026 closed in the firewall, and open it through a tunnel from your PC:ssh -N -L 21026:127.0.0.1:21026 yourname@server-ip.
Stop the world before editing, because the community guide warns that a file with a syntax slip is renamed .old and replaced by defaults. So: sudo systemctl stop starbound; then sudo -u starbound -H bash -c 'cd ~/game/storage && nano starbound_server.config && python3 -m json.tool starbound_server.config > /dev/null && chmod 600 starbound_server.config && echo looks good', which also makes the file private, since its passwords are plain text; then sudo systemctl start starbound.
Bringing your mods
Mods go in /home/starbound/game/mods, as .pak files or unpacked folders; that is where the community's modding guide puts them. The Steam Workshop only downloads to a PC that subscribes, so upload the files yourself and restart.
Every player should run the identical mod set the server has. Chucklefish's 1.2 patch notes say some changes have to be made on both ends, and the community wiki gives allowAssetsMismatch a default of true, meaning the server lets in a friend whose mods differ; share the list with everyone. When something misbehaves, open storage/starbound.log first: according to Chucklefish's FAQ, JSON errors nearly always trace back to a mod. Back up before you add any.
Keeping your universe safe
Two folders hold everything. One is storage, whose universe folder is the save itself (worlds and ships), next to characters, the log and the config; the other is mods. This sets up a daily archive at 04:30 that pauses the world for a moment so the files are consistent, keeps two weeks of copies, and brings it back (checking Steam for an update on the way).
sudo install -d -m 700 /var/backups/starbound
sudo tee /usr/local/sbin/starbound-backup.sh > /dev/null <<'EOF'
set -euo pipefail
umask 077
ARCHIVE=/var/backups/starbound/universe-$(date +%F-%H%M).tar.gz
systemctl stop starbound
trap 'systemctl start starbound' EXIT
tar -C /home/starbound/game -czf "$ARCHIVE" storage mods
find /var/backups/starbound -name 'universe-*.tar.gz' -mtime +14 -delete
EOF
printf '%s\n' '30 4 * * * root bash /usr/local/sbin/starbound-backup.sh >> /var/log/starbound-backup.log 2>&1' | sudo tee /etc/cron.d/starbound-backup > /dev/null
If a world goes wrong and you want yesterday back:
- See what is there with
sudo ls /var/backups/starbound, then name your pick once, for exampleB=/var/backups/starbound/universe-2026-10-21-0430.tar.gz. - Confirm it exists:
sudo test -f "$B" && echo ok. No ok, no restore. - Take the world offline:
sudo systemctl stop starbound. - A rescue copy from an earlier restore is never thrown away or written over; if one is there, this renames it with the date:
sudo bash -c 'cd /home/starbound/game && for x in storage mods; do if [ -e $x.before-restore ]; then mv $x.before-restore $x.before-restore-$(date +%F-%H%M%S); fi; done' - Park the current files, refusing if anything is in the way:
sudo bash -c 'cd /home/starbound/game && test ! -e storage.before-restore && test ! -e mods.before-restore && mv storage storage.before-restore && mv mods mods.before-restore && echo moved'. No moved, no further steps: find out why first. - Now unpack with
sudo tar -xzf "$B" -C /home/starbound/game, then return ownership to the game's user:sudo chown -R starbound: /home/starbound/game. - Bring it up with
sudo systemctl start starboundand log in to check your bases and characters. - Happy with it? Then, and only then, remove this restore's parked copies:
sudo bash -c 'cd /home/starbound/game && rm -rf storage.before-restore mods.before-restore'.
Copies that never leave the server vanish with its disk, so pull some home now and then. On the server, sudo cp "$B" ~/ && sudo chown "$USER": ~/"$(basename "$B")"; on your computer, scp yourname@server-ip:universe-*.tar.gz .; afterwards remove the copy from your home folder on the server. Keep the archives private, as they include your friends' passwords.
Questions people ask
- Is there a free Starbound server download for people who do not own the game?
- No. Valve lists the Starbound server under the game's own app ID, 211820, with anonymous login unavailable and a purchase required. Whatever account you sign SteamCMD into has to own Starbound.
- Will the server kick me out of my own game?
- It can. Valve says a Steam account can be signed in only once at a time, and the server signs in every time it starts and updates. Valve's suggestion is a separate account for servers, which for Starbound means buying a second copy.
- What do my friends type to connect?
- In Starbound they choose Multiplayer, pick a character and enter your server's IP address or hostname. If you set up
serverUsers, they add the account name and password you gave them. The game port is the default 21025, so there is nothing more to type. - Could we skip the dedicated server altogether?
- Sometimes. Since version 1.0, Chucklefish says you can hop into a friend's game straight from your Steam friends list. A machine of your own pays off when the universe should stay up with the host away, or when people drop in at different hours.
- Can I run two Starbound worlds on one machine?
- Yes, as two separate installs. Give the second its own folder (another
force_install_dir), its own service file and config, and its own ports: changegameServerPort,queryServerPortandrconServerPort, then allow the new game port in ufw. Because all three can be changed, one IP address is enough.