Do you need a server at all?
Only if your world should be open when its owner isn't playing. The official Necesse wiki puts it plainly: anyone can host from inside the game, and what a dedicated server adds is a world that's reachable around the clock, whoever is online. If your group always plays together with the host, skip the server. If people drop in at different hours, or the world should carry on while the host is away, a server earns its keep.
Fair Games doesn't publish separate hardware figures for the server. The game's Steam page asks for 4 GB of memory at minimum and 8 GB recommended, a dual-core Core i3-4160 at the low end and a quad-core Core i5-4590 / Ryzen 3 2200G class chip recommended, plus 500 MB of disk. That's for the full game with graphics; as our own rule of thumb, treat the recommended line as a sensible floor for the server and check how it copes once your group is busy.
What to have ready
- A 64-bit x86 machine on Ubuntu 24.04 that you reach with your own SSH login. Fair Games lists Windows64, MacOS and Linux64 server downloads, and the Steam page says Apple's M-chip Macs aren't supported. From those two facts we conclude the bundled Java targets x86-64 processors, so we'd steer clear of ARM machines; that's our inference, not something Fair Games states.
- A world name. We use Homestead in the examples.
- A server password if your world is private. You'll type it into the server itself, not into a command.
- Your in-game name, so you can make yourself the owner afterwards.
Downloading the server in one paste
- Switch on the firewall before anything listens: IPv6 rules first, then your SSH connection, then the firewall itself, and only then the game's port.
- Add the 32-bit support SteamCMD needs (Valve's SteamCMD page names lib32gcc-s1 for Ubuntu), then create an
nserveraccount so the game never runs as root, with a home folder only it can open. - Fetch SteamCMD into that account and write a small update script with
printf. It is the runscript from the wiki's Linux page, minus its comments, pointed at /home/nserver/game. Valve wants the install folder named ahead of the login, and the script does it in that order. - Run the script. Each line up to the download waits for the one before it to succeed, and a second run leaves an existing account alone. The last line checks the result: if found doesn't print, read the first error above and run the whole paste again.
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw &&
sudo ufw allow OpenSSH &&
sudo ufw --force enable &&
sudo ufw allow 14159/udp &&
sudo dpkg --add-architecture i386 &&
sudo apt update && sudo apt install -y lib32gcc-s1 curl &&
{ id -u nserver > /dev/null 2>&1 || sudo useradd --create-home --shell /bin/bash nserver; } &&
sudo chmod 700 /home/nserver &&
sudo -u nserver bash -o pipefail -c 'cd /home/nserver && mkdir -p steamcmd && curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxf - -C steamcmd' &&
printf '%s\n' '@ShutdownOnFailedCommand 1' '@NoPromptForPassword 1' 'force_install_dir /home/nserver/game' 'login anonymous' 'app_update 1169370 validate' 'quit' | sudo -u nserver tee /home/nserver/update.txt > /dev/null &&
sudo -u nserver bash -c 'cd /home/nserver && steamcmd/steamcmd.sh +runscript /home/nserver/update.txt'
sudo test -x /home/nserver/game/StartServer-nogui.sh && echo found
Where we differ from the wiki: it installs both lib32gcc1 and lib32gcc-s1 (current Ubuntu only has the second), installs into the home folder itself while starting the server from a Steam subfolder, and has no firewall step. We picked one folder and put the firewall first.
Your first launch: naming the world
Start the server by hand once: sudo -u nserver bash -c 'cd /home/nserver/game && ./StartServer-nogui.sh'. With no world named, it asks you questions. The wiki's walk-through covers them: the world's name (Homestead), whether you want custom options, the port (keep 14159), how many player slots (1 to 250), a password (leave it empty for an open world), a spawn island, a seed, and whether to place the guide house.
Answering the password question here keeps it out of sight. You could pass it with the -password flag instead, but anything on a command line is readable in ps by every account on the machine. The wiki notes that options you don't pass are read from the server's settings file, and Fair Games fixed the server not using its saved password back in v0.21.1. We take that to mean your answer is stored in that file, inside the locked home folder.
When the server says it's up, type stop. The wiki lists stop as the command that saves and shuts the server down. Your world is now in /home/nserver/.config/Necesse/saves as Homestead.zip.
Keeping it running, and saving every time it stops
The wiki's Linux page sets the server up as a systemd service, which is how Linux starts programs at boot and restarts them. There's a catch the same wiki mentions in its Docker notes: the server doesn't save when it receives SIGTERM, the signal a normal service stop sends, so anything since the last autosave is gone. Our fix is a small launcher that feeds the server's input from a pipe called /home/nserver/console. When the service stops, systemd types stop into that pipe and waits for the save. Every start also checks Steam for updates first.
sudo test -x /home/nserver/game/StartServer-nogui.sh && sudo -u nserver tee /home/nserver/launch.sh > /dev/null <<'EOF'
cd /home/nserver/game || exit 1
rm -f /home/nserver/console
mkfifo -m 600 /home/nserver/console || exit 1
exec ./StartServer-nogui.sh -world Homestead -port 14159 -slots 8 -pausewhenempty 0 <> /home/nserver/console
EOF
sudo test -s /home/nserver/launch.sh && sudo tee /etc/systemd/system/necesse-world.service > /dev/null <<'EOF'
[Unit]
Description=Necesse world
Wants=network-online.target
After=network-online.target
[Service]
User=nserver
ExecStartPre=-/home/nserver/steamcmd/steamcmd.sh +runscript /home/nserver/update.txt
ExecStart=/bin/bash /home/nserver/launch.sh
ExecStop=/bin/bash -c '[ -n "$MAINPID" ] || exit 0; echo stop > /home/nserver/console; while kill -0 "$MAINPID" 2>/dev/null; do sleep 1; done'
TimeoutStartSec=1800
TimeoutStopSec=120
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
Then switch it on, but only if the firewall is active and your world file exists: sudo ufw status | grep -qw active && sudo test -e /home/nserver/.config/Necesse/saves/Homestead.zip && sudo systemctl enable --now necesse-world.
A few choices in there are ours, not the wiki's. The dash in front of the update line means a failed update still lets your world start. A download that hangs is different: after 30 minutes (TimeoutStartSec, our margin) that start counts as failed, and Restart=always has another go ten seconds later. The stop step only writes to the pipe while the server is actually running, and gives it two minutes to save before systemd stops waiting. Because of Restart=always, a /stop typed in game just restarts the server; use sudo systemctl stop necesse-world when you really want it off.
Settings you'll actually change
Everything after the script name in the launcher is a launch option from the wiki's parameter list:
-world Homesteadloads your world without asking any questions.-port 14159and-slots 8set the port and the number of places. Change the port here and in the firewall together.-pausewhenempty 0keeps time running with nobody online; 1 freezes the world until someone joins. The wiki's table lists 0 as the default, yet Fair Games' v0.21.27 notes state that an empty dedicated server pauses unless told otherwise, so we always spell it out.-ownerhands owner powers to anyone who joins using that name, so we leave it out. Once the service runs, give yourself the role through the pipe instead:sudo -u nserver sh -c 'echo "permissions set YourName owner" > /home/nserver/console'. You'll see the reply injournalctl -u necesse-world -f.-settingspoints at a different settings file;-localdiror-datadirmove saves, logs and settings out of the default folder.
The default folder is ~/.config/Necesse of the account running the game: server.cfg sits in its cfg folder, logs in logs, and each world's own worldSettings.cfg is packed inside its zip under saves. Shut the world down before you touch any of these files, as the wiki advises. For difficulty, raids and the death penalty you don't need to unzip anything, since owners and admins can change those in game with /difficulty, /raids, /deathpenalty and /settings.
Protecting your settlement
A backup is only useful if it lives somewhere else. Stopping the service first is what makes the copy safe, because stopping now saves the world. Then move the finished archive to your own computer or a second server, using rsync -a (or scp).
sudo install -d -m 700 /root/world-backups
B=/root/world-backups/homestead-$(date +%F).tgz
sudo systemctl stop necesse-world && sudo tar -czf "$B" -C / home/nserver/.config/Necesse home/nserver/launch.sh home/nserver/update.txt etc/systemd/system/necesse-world.service && sudo tar -tzf "$B" > /dev/null && echo saved
sudo systemctl start necesse-world
No saved means no backup, so look at the error. To bring a world back:
- Pick the archive you want with
sudo ls -l /root/world-backupsand set it:B=/root/world-backups/homestead-DATE.tgz, with DATE replaced by its date. - If an older Necesse.old is still there, move or remove it first. Then stop the world, check the archive, put today's data to one side (nothing is deleted), unpack the old copy and make sure Homestead.zip is back: `sudo systemctl stop necesse-world && sudo test -s "$B" && sudo tar -tzf "$B" > /dev/null && ! sudo test -e /home/nserver/.config/Necesse.old && sudo mv /home/nserver/.config/Necesse /home/nserver/.config/Necesse.old && sudo tar -xzf "$B" -C / home/nserver/.config/Necesse && sudo chown -R nserver:nserver /home/nserver/.config/Necesse && sudo test -s /home/nserver/.config/Necesse/saves/Homestead.zip && echo back`. If you don't see back, leave the service stopped and read the error.
- Run
sudo systemctl start necesse-worldand join. If the restore stopped before printing back and Necesse.old was never created, nothing changed, so just start the service. Not the world you expected, or the restore stopped partway? Swap the folders back: `sudo systemctl stop necesse-world && sudo test -d /home/nserver/.config/Necesse.old && ! sudo test -e /home/nserver/.config/Necesse.bad && { ! sudo test -e /home/nserver/.config/Necesse || sudo mv /home/nserver/.config/Necesse /home/nserver/.config/Necesse.bad; } && sudo mv /home/nserver/.config/Necesse.old /home/nserver/.config/Necesse && echo swapped, then start it again withsudo systemctl start necesse-world`. Once the restored world looks right, delete Necesse.old; after a swap back, delete Necesse.bad instead.
Updates take care of themselves: each start pulls the newest server from Steam, so a restart after a patch is all it takes. Do it promptly: the 1.3.3 notes tell everyone running a server or hosting a world to update. If you'd rather stay on a version for a while, put a # before the ExecStartPre line and run sudo systemctl daemon-reload.
The server that fits
Our bare metal game servers put your world on a physical machine nobody else uses, where all its cores and memory go to the game, on a network port that isn't shared with any other customer at the access switch. Each one ships on an unmetered port, 500 Mbps or 1 Gbps depending on the line, so there's no transfer allowance to watch. A racked server is ready in about 30 minutes; payment verification can add time. The instant servers page shows what's racked now, and there's no long-term contract.
Choose a rack server or a blade and you get a remote console, which rescues you if a firewall mistake ever shuts out SSH; among the small cartridge machines, only two models, the m510 and the m710x, include it. Put the world near most of your players: our data center locations are Amsterdam, Bucharest, Miami, New York and San Francisco. Support is there around the clock by live chat, email and phone.
You manage the server; we keep the hardware and the network running.
Want a world that's a little more hardcore next? Our Vintage Story server guide follows the same steps for another survival game.
Questions people ask
- Do my friends need anything special to join?
- Just the game itself. In Multiplayer they choose Add Server, enter your server's public IPv4 address and port 14159, and join. The server tool is a separate free download, so the machine doesn't need to own Necesse.
- Will the server run on a Raspberry Pi or another ARM board?
- We wouldn't plan on it. Fair Games doesn't say the server runs on ARM, the Steam page says M-chip Macs aren't supported, and the Linux server brings its own Java. Our reading is that it expects an x86-64 processor.
- How many players can one world hold?
- The wiki allows 1 to 250 slots, set with
-slots. There's no official figure for how much machine a full world needs, so start with a sensible slot count and raise it once you've seen how busy evenings feel. - Does the world keep going when everyone logs off?
- With our launcher, yes. It passes
-pausewhenempty 0, which keeps the world going with nobody online; set it to 1 if you'd rather nothing happens while you're away. An admin can also flip it in game with/pausewhenempty. - Can I use Docker instead?
- Yes. The wiki includes instructions for building your own image, plus a few images maintained by the community. Whichever you pick, check that it saves the world on shutdown, because
docker stopalso sends SIGTERM.