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.



