Save 20% on all Cloud VPS plans — use code HAPPY20 at checkout
99.95% uptime SLA 24/7 support Since 2019 Tier IV · Noida
Client Area
BLOGGame servers

Setting up a Rust dedicated server on a Linux VPS: SteamCMD, Oxide and scheduled wipes

Running your own Rust server on an Ubuntu VPS, start to finish: sizing, the SteamCMD install, server config, Oxide plugins, systemd, the firewall, and a cron job for wipe day.

By URLStart Engineering 3 min read
Setting up a Rust dedicated server on a Linux VPS: SteamCMD, Oxide and scheduled wipes — URLStart blog cover
Fig. 01 — Setting up a Rust dedicated server on a Linux VPS: SteamCMD, Oxide and scheduled wipes — URLStart blog cover
    TL;DR
  • Rust wants RAM and one fast core. 8 GB for a friends server on a 2,500 map; 16 GB for a public 3,500 to 4,000 map with plugins.
  • Install with SteamCMD on Ubuntu, run it under systemd so it survives reboots, open UDP 28015 and TCP 28016, and put wipes on cron.
  • Oxide (uMod) or Carbon give you plugins. Install one of them after the first clean start, not both.
  • On a URLStart Gaming VPS the game-protocol DDoS shield is already in front of the ports, which is what you want on wipe day.

This assumes a fresh Ubuntu 22.04 or 24.04 VPS with root. The commands are meant to be pasted; change the names and passwords.

Pick a size first

Rust loads the whole map into memory and simulates every entity on one main thread, so RAM and single-core speed decide whether the server is playable. Friends only, vanilla, a 2,000 to 2,500 map, up to 20 players: 8 GB. Public with a few plugins, 3,000 to 3,500 map, 50 to 75 players: 16 GB. Public with a heavy plugin list, 4,000 map, 100 or more: 32 GB. Whatever the size, get a plan with priority or dedicated vCPU; a crowded shared core shows up as server FPS collapsing during raids. NVMe helps with the map save every few minutes.

Prepare the box

apt update && apt upgrade -y
apt install -y lib32gcc-s1 lib32stdc++6 curl tar screen
useradd -m -s /bin/bash rust

SteamCMD and the server files

su - rust
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zx
./steamcmd.sh +force_install_dir /home/rust/server +login anonymous +app_update 258550 validate +quit

The first download is several gigabytes. Run that app_update line again whenever Rust updates, which is the first Thursday of each month.

The start script

Create /home/rust/start.sh:

#!/bin/bash
cd /home/rust/server
./RustDedicated -batchmode -nographics \
  +server.hostname "My Rust Server" \
  +server.port 28015 +rcon.port 28016 \
  +server.identity "main" +server.seed 12345 +server.worldsize 3000 \
  +server.maxplayers 50 +server.saveinterval 300 \
  +server.description "Friends server. Wipes first Thursday." \
  +rcon.password "change-this" +rcon.web 1 \
  -logfile /home/rust/server/rust.log

chmod +x /home/rust/start.sh. Seed and world size define the map; a new seed on wipe day gives a new map.

Keep it running with systemd

As root, create /etc/systemd/system/rust.service:

[Unit]
Description=Rust Dedicated Server
After=network.target

[Service]
User=rust
WorkingDirectory=/home/rust/server
ExecStart=/home/rust/start.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Then:

systemctl daemon-reload
systemctl enable --now rust
journalctl -u rust -f

It now starts at boot and comes back after a crash.

Firewall

ufw allow 28015/udp
ufw allow 28016/tcp
ufw allow OpenSSH
ufw enable

Add 28082/tcp if you turn on the Rust+ companion app. On a URLStart Gaming VPS the game-protocol DDoS shield already sits in front of these ports; there is nothing to configure for it.

Plugins: Oxide or Carbon

Stop the server, then as the rust user:

cd /home/rust/server
curl -sSL -o oxide.zip https://umod.org/games/rust/download/develop
unzip -o oxide.zip && rm oxide.zip

Start it again. Plugins go in oxide/plugins/ and load on their own. Carbon is the other framework and has its own installer. One or the other, never both.

Wipes on a schedule

Rust forces a map wipe on the first Thursday of the month with the game update; many servers wipe weekly on top. As root, crontab -e and add a line that runs a wipe script at a quiet hour:

0 6 * * 4 /home/rust/wipe.sh

With /home/rust/wipe.sh something like:

#!/bin/bash
systemctl stop rust
cd /home/rust/server/server/main
rm -f *.map *.sav
# add: rm -f player.blueprints.*.db   for a blueprint wipe
sed -i "s/server.seed [0-9]*/server.seed $RANDOM/" /home/rust/start.sh
/home/rust/steamcmd/steamcmd.sh +force_install_dir /home/rust/server +login anonymous +app_update 258550 +quit
systemctl start rust

Set the day-of-week field to your schedule and put the schedule in the server description so players are not surprised.

Joining and admin

Players connect from the F1 console with client.connect your.server.ip:28015. Make yourself owner over RCON or in the server console with ownerid <steamid64> "name". Run server.save before any manual stop.

Questions we get asked

Linux or Windows for Rust? Linux. The dedicated server runs natively, uses less RAM and needs no licence.

How much bandwidth does a Rust server use? Not much. A 50-player server sits well inside a fair-use allowance.

Why does it stutter every few minutes? The map save. NVMe shortens it; server.saveinterval spaces it out.

Two Rust servers on one VPS? On 32 GB and up with small maps. For two public servers, a VDS with dedicated cores.

DDoS on wipe day? It is routine for any popular server. Our gaming plans include a game-protocol shield with port isolation. On another host, ask before wipe day rather than after.

Ready to deploy?

Root shell in about a minute. Talk to an engineer first if you'd rather size it together.

✓ 99.95% uptime SLA ✓ Cards · UPI · Net banking · PayPal · Crypto ✓ Cancel anytime