We zetten een Rust-server op je eigen VPS op: we downloaden hem via SteamCMD, maken een startscript, starten hem als systemd-service, openen de poorten en stellen het beheer via RCON in. Aan het eind vind je de stappen voor de maandelijkse updates en voor de installatie van Oxide of Carbon.
Wat je nodig hebt
- Een VPS bij StormHost met Ubuntu 24.04 of Debian 13, bij voorkeur met 16 GB RAM of meer (zie Systeemeisen)
- Minstens 30 GB vrije schijfruimte
- Een SSH-verbinding als root (handleiding) en voor de zekerheid de console in de browser geopend
- Het spel Rust op je computer (om de verbinding te testen)
- Ongeveer 45 minuten
Rust bij StormHost
Rust-servers zijn bij ons in voorbereiding. Tot die tijd zet je met deze handleiding een Rust-server op een VPS op. Dezelfde stappen gelden voor elke Linux-VPS.
Hoe het gaat werken#
- De gebruiker
rust– de server draait niet als root. Als iemand hem aanvalt (bijvoorbeeld via een fout in een plugin), krijgt hij alleen de rechten van deze gebruiker. - SteamCMD – de officiële tool van Valve om gameservers te downloaden. Rust Dedicated Server heeft in Steam het applicatienummer
258550. - Het startscript
/opt/rust/start.sh– bevat alle parameters van de server (poorten, kaart, RCON). - De systemd-service
rust– start de server bij het opstarten van de VPS en start hem na een crash opnieuw. - RCON – de externe console. De console van een Linux-server is niet interactief, daarom stuur je commando's via RCON.
De mappenstructuur:
| Pad | Wat er staat |
|---|---|
/opt/rust/steamcmd | SteamCMD |
/opt/rust/server | De Rust-server (de hoofdmap van de server, hier horen ook Oxide of Carbon) |
/opt/ | De wereld, de spelers en de configuratie (identiteit rust) |
/opt/rust/start.sh | Het startscript |
Systeemeisen#
- RAM: Facepunch noemt voor de server minstens 12 GB vrij geheugen, een kaart van grootte 6000 heeft meer nodig. Plugins en spelers komen daar nog bij. Reken daarom op een VPS met 16 GB RAM of meer. Wisselgeheugen (swap) helpt om pieken te overleven, maar vervangt een tekort aan RAM niet.
- Processor: de hoofdlus van de server belast vooral één core. De prestaties van één core tellen zwaarder dan het aantal cores.
- Schijf: Facepunch noemt minstens 15 GB vrije ruimte, bij voorkeur SSD of NVMe. Houd ruimte over voor updates, back-ups en kaarten.
Het geheugen van een belaste server houd je in de gaten met het commando free -h.
Het systeem voorbereiden#
Dit geldt voor zowel Ubuntu 24.04 als Debian 13. Voer de commando's uit als root.
Werk de pakketlijst bij en installeer de benodigde programma's:
bash apt update apt install -y lib32gcc-s1 curl ca-certificates unziplib32gcc-s1– een 32-bits bibliotheek die SteamCMD nodig heeft om te starten (SteamCMD is een 32-bits programma).curl– downloadt bestanden van internet.ca-certificates– certificaten voor veilig downloaden via HTTPS.unzip– pakt het archief van Oxide uit (als je het gaat gebruiken).
Maak de gebruiker
rustaan met de thuismap/opt/rust:bash useradd --create-home --home-dir /opt/rust --shell /bin/bash rust--create-home --home-dir /opt/rust– maakt de map/opt/rustaan, die eigendom is van de gebruikerrust.--shell /bin/bash– de gebruiker krijgt een gewone shell, zodat je naar hem kunt overschakelen. Hij heeft geen wachtwoord, dus inloggen via SSH als deze gebruiker kan niet. Vanuit root schakel je naar hem over met het commandosu - rust.
SteamCMD installeren#
Schakel over naar de gebruiker
rust:bash su - rustDe prompt van de opdrachtregel verandert in
rust@…. Voer alle volgende commando's tot aan het hoofdstuk De systemd-service uit als deze gebruiker.Maak een map voor SteamCMD aan en ga erheen:
bash mkdir -p ~/steamcmd cd ~/steamcmdDownload SteamCMD en pak het uit:
bash curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -curl -sqL "…"– downloadt het archief van de officiële server van Valve;-sis de stille modus (zonder voortgangsbalk),-qslaat een eventueel persoonlijk configuratiebestand van curl,~/.curlrc, over,-Lvolgt doorverwijzingen.| tar zxvf -– pakt het gedownloade archief meteen uit in de huidige map (zgzip,xuitpakken,vbestanden tonen,f -van de invoer lezen).
In de map staat nu het script
steamcmd.sh.
De Rust-server downloaden#
Voer, nog steeds als gebruiker rust, dit uit:
~/steamcmd/steamcmd.sh +force_install_dir /opt/rust/server +login anonymous +app_update 258550 validate +quit~/steamcmd/steamcmd.sh– start SteamCMD. Bij de eerste start werkt SteamCMD zichzelf bij, dat duurt even.+force_install_dir /opt/rust/server– waar de server wordt geïnstalleerd. Geef een absoluut pad op en zet het altijd vóór+login.+login anonymous– anoniem inloggen. Om de server te downloaden heb je geen Steam-account nodig.+app_update 258550– downloadt de applicatie 258550 (Rust Dedicated Server) of werkt haar bij.validate– controleert alle bestanden en zet beschadigde of aangepaste bestanden terug naar de oorspronkelijke staat. Let op: het zet ook bestanden terug die door het framework Oxide zijn overschreven.+quit– sluit SteamCMD af als het klaar is.
Er worden enkele gigabytes gedownload. Aan het eind zie je:
Success! App '258550' fully installed.Testbranches
Facepunch biedt ook testversies van de server aan (bijvoorbeeld de branch staging). Je downloadt ze door -beta staging toe te voegen achter +app_update 258550. Gebruik voor een live server de standaard publieke versie.
Het startscript#
Maak als gebruiker
rusthet bestand aan:bash nano ~/start.shPlak de inhoud en pas de waarden aan (uitleg onder het blok):
/opt/ rust/ bashstart.sh #!/usr/bin/env bash cd /opt/rust/server || exit 1 export TERM=xterm export LD_LIBRARY_PATH="/opt/rust/server:/opt/rust/server/RustDedicated_Data/Plugins/x86_64" # Carbon: haal het commentaarteken (#) voor de volgende regel weg zodra Carbon is geïnstalleerd # source /opt/rust/server/carbon/tools/environment.sh exec ./RustDedicated -batchmode \ +server.identity "rust" \ +server.port 28015 \ +server.queryport 28017 \ +server.level "Procedural Map" \ +server.seed 12345 \ +server.worldsize 3000 \ +server.maxplayers 50 \ +rcon.port 28016 \ +rcon.password "<STRONG_PASSWORD>" \ +rcon.web 1 \ +app.port 28082 \ -logfile /opt/rust/rust.logSla op (Ctrl+O, Enter) en sluit de editor (Ctrl+X).
Stel de rechten zo in dat het script uitvoerbaar is en alleen de gebruiker
rusthet wachtwoord erin kan lezen:bash chmod 700 ~/start.sh
Wat de afzonderlijke onderdelen doen:
cd /opt/rust/server || exit 1– de server wordt gestart vanuit de hoofdmap (Oxide maakt daar zijn mapoxideaan). Als de map niet bestaat, stopt het script.export TERM=xterm– het type terminal; een systemd-service heeft geen terminal en volgens de documentatie van Carbon hebben sommige omgevingen er een nodig.export LD_LIBRARY_PATH=…– de mappen waarin de server zijn bibliotheken zoekt (de hoofdmap van de server enRustDedicated_).Data/ Plugins/ x86_ 64 source …/environment.sh– laadt Carbon. Laat de regel uitgecommentarieerd tot je Carbon hebt geïnstalleerd.exec ./RustDedicated– start de server;execzorgt ervoor dat systemd rechtstreeks het serverproces volgt.- De parameters van de server (
+server.port,+server.seed,+rcon.password…) worden uitgebreid uitgelegd in het artikel server.cfg en startparameters. -logfile /opt/rust/rust.log– de uitvoer van de serverconsole wordt naar dit bestand geschreven.
Vervang <STRONG_PASSWORD> door een wachtwoord voor RCON (zonder de punthaken), alleen met letters en cijfers en minstens 24 tekens lang. Je maakt er een met de wachtwoordgenerator. Kies de seed (12345), de kaartgrootte (3000) en het aantal slots (50) zelf. Laat in het script alleen de poorten, RCON, de identiteit, de kaart en het aantal slots staan, zodat dezelfde instelling niet op twee plekken staat.
Maak, nog steeds als gebruiker
rust, het bestandserver.cfgaan voor de servernaam, de beschrijving, de tags en andere instellingen:bash mkdir -p /opt/rust/server/server/rust/cfg nano /opt/rust/server/server/rust/cfg/server.cfgmkdir -p …– maakt de map van de identiteitrusten de submapcfgaan (bij de eerste start zou de server de map zelf aanmaken, maarserver.cfgniet).- Wat je in het bestand zet, lees je in het artikel over de configuratie. Voorlopig is één regel genoeg, bijvoorbeeld
server.hostname "Mijn Rust-server".
Maak de map en het bestand aan als gebruiker
rust. Als root ze zou aanmaken, kan de server geen adminaccounts en bans naar de mapcfgschrijven. De oplossing (als root):chown -R rust:rust /opt/rust/server/server.Ga terug naar root:
bash exit
De systemd-service#
Maak als root het servicebestand aan met nano /etc/:
[Unit]
Description=Rust Dedicated Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=rust
Group=rust
WorkingDirectory=/opt/rust/server
ExecStart=/opt/rust/start.sh
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target| Directive | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
After= en Wants= | De server start pas nadat het netwerk is ingesteld. | network-online.target | – |
User=, Group= | Onder welke gebruiker de server draait. | rust | Nooit root. |
WorkingDirectory= | De werkmap van het proces. | /opt/rust/server | Bij een ander pad naar de server. |
ExecStart= | Het startscript (absoluut pad). | /opt/rust/start.sh | – |
Restart=always | Nadat het proces is gestopt, start systemd het opnieuw, ook als het “netjes” is gestopt. Daardoor werkt ook het commando restart via RCON (de server sluit af en systemd start hem opnieuw). | always | on-failure, als je geen herstart wilt nadat je de server handmatig via RCON hebt afgesloten. |
RestartSec=15 | De pauze vóór de herstart. | 15 | – |
WantedBy= | Na enable start de server bij het opstarten van de VPS. | multi-user.target | – |
Een uitgebreidere uitleg van systemd-services vind je in de handleiding Applicatie als systemd-service.
Laad de service, schakel hem in en start hem:
systemctl daemon-reload
systemctl enable --now rustsystemctl daemon-reload– systemd leest de servicebestanden opnieuw in (na elke wijziging vanrust.service).systemctl enable --now rust– schakelt het starten bij het opstarten van de VPS in (enable) en start de service meteen (--now).
Met Restart=always stop je de server alleen met het commando systemctl stop rust. Afsluiten via RCON (quit) leidt tot een nieuwe start.
Poorten en firewall#
| Poort | Protocol | Waarvoor | Voor wie openen |
|---|---|---|---|
28015 | UDP | Het spel (verbindingen van spelers). | Iedereen |
28017 | UDP | Query: de server tonen in de serverlijst. | Iedereen |
28082 | TCP | Rust+ (mobiele app). Moet minstens 10000 zijn. | Iedereen (of niemand, als je Rust+ uitschakelt) |
28016 | TCP | RCON (externe console). | Alleen jouw IP-adres |
Als je UFW gebruikt:
ufw allow 28015/udp
ufw allow 28017/udp
ufw allow 28082/tcp
ufw allow from 198.51.100.25 to any port 28016 proto tcpufw allow 28015/udp– staat de poort van het spel toe voor UDP.ufw allow 28017/udp– staat de querypoort toe.ufw allow 28082/tcp– staat Rust+ toe.ufw allow from 198.51.100.25 to any port 28016 proto tcp– RCON alleen vanaf het IP-adres198.51.100.25; vul je eigen publieke IP-adres in.
Staat de firewall in je klantaccount in de modus Alles blokkeren behalve wat is toegestaan, voeg daar dan dezelfde regels toe (Richting Inkomend, Actie Toestaan, het juiste Protocol, en vul bij RCON Bron-IP / bereik in). De poort moet in beide firewalls zijn toegestaan.
Heb je Rust+ niet nodig? Vervang in het script +app.port 28082 door +app.port 1- (zo schakel je Rust+ volgens Facepunch uit) en open poort 28082 niet.
Controle#
Controleer de status van de service:
bash systemctl status rustZoek de regel
Active: active (running).Volg de uitvoer van de server:
bash tail -f /opt/rust/rust.logDe eerste start duurt enkele minuten (de kaart wordt gegenereerd). De server is klaar zodra
Server startup completeverschijnt. Je stopt het volgen met Ctrl+C.Open in het spel de console met F1 en maak verbinding:
text connect 203.0.113.10:28015Vervang
203.0.113.10door het IPv4-adres van de VPS van het tabblad Netwerk.Zoek de server een paar minuten na de start op naam in de serverlijst (zonder framework op het tabblad Community, met Oxide of Carbon op Modded).
Maak via RCON (RustAdmin of de webconsole) verbinding met
203.0.113.10:28016met het wachtwoord uit het script en voeg jezelf toe als eigenaar. De stappen staan in het artikel Admin en RCON.
De server bijwerken#
Een grote update van Rust verschijnt één keer per maand (meestal op de eerste donderdag van de maand), kleinere fixes tussendoor.
Kondig de herstart aan bij de spelers en sla de wereld op via RCON:
server.save.Stop de service (als root):
bash systemctl stop rustWerk de server bij als gebruiker
rust:bash su - rust -c "/opt/rust/steamcmd/steamcmd.sh +force_install_dir /opt/rust/server +login anonymous +app_update 258550 validate +quit"su - rust -c "…"– voert één commando uit als gebruikerrusten keert daarna terug.
Als je Oxide gebruikt, upload het dan opnieuw (de update heeft het overschreven), zie het hoofdstuk Oxide of Carbon hieronder. Carbon werkt zichzelf bij tijdens het starten.
Start de service:
bash systemctl start rust
Zet de update niet in het startscript als je Oxide gebruikt
Als SteamCMD met validate bij elke start zou draaien, zou elke herstart Oxide verwijderen en zou de server zonder plugins draaien. Facepunch waarschuwt hier in zijn handleiding uitdrukkelijk voor. Werk handmatig bij volgens de stappen hierboven.
Een maandelijkse update betekent meestal ook een nieuwe wereld (force wipe). De stappen en wat je moet verwijderen staan in het artikel Een Rust-server wipen.
Oxide of Carbon#
Wat wat is en welke je kiest, lees je in Oxide en Carbon. De installatie op deze VPS (de server moet gestopt zijn):
Oxide
Stop de server:
systemctl stop rust.Download Oxide en pak het uit als gebruiker
rust:bash su - rust -c "curl -fL -o /opt/rust/oxide.zip https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip && unzip -o /opt/rust/oxide.zip -d /opt/rust/server"curl -fL -o /opt/rust/oxide.zip …– downloadt de nieuwste stabiele versie van Oxide voor Linux naar de thuismap van de gebruikerrust.-flaat het commando met een fout eindigen als het bestand niet bestaat,-Lvolgt de doorverwijzing van GitHub.&&– het volgende commando wordt alleen uitgevoerd als het downloaden is gelukt.unzip -o … -d /opt/rust/server– pakt het archief uit in de hoofdmap van de server en overschrijft de oorspronkelijke bestanden van het spel.
Start de server:
systemctl start rust.Controleer via RCON
oxide.version.
Herhaal na de maandelijkse update van Rust de stappen 1–3 pas wanneer er op GitHub (opent in een nieuw venster) een versie van Oxide staat die nieuwer is dan de update van Rust.
Carbon
Stop de server:
systemctl stop rust.Download Carbon en pak het uit als gebruiker
rust:bash su - rust -c "curl -fL -o /opt/rust/carbon.tar.gz https://github.com/CarbonCommunity/Carbon/releases/download/production_build/Carbon.Linux.Release.tar.gz && tar -xzf /opt/rust/carbon.tar.gz -C /opt/rust/server"- Downloadt de stabiele build (production) van Carbon voor Linux en pakt die uit (
-x) uit het met gzip gecomprimeerde archief (-z,-fbestand) in de hoofdmap van de server (-C).
- Downloadt de stabiele build (production) van Carbon voor Linux en pakt die uit (
Haal in het bestand
/opt/rust/start.shhet commentaarteken weg voor de regelsource /opt/(verwijder derust/ server/ carbon/ tools/ environment. sh #aan het begin).Start de server:
systemctl start rust.Controleer via RCON
c.version.
Na een update van Rust hoef je de server alleen te starten, Carbon werkt zichzelf bij.
Back-ups#
De wereld en de spelers staan in /opt/, de plugins en hun gegevens in /opt/rust/server/oxide (of carbon). De back-ups van de VPS beheren wij, maar om snel één wereld of configuratie terug te zetten is een eigen back-up van deze mappen ook handig. Sla vóór de back-up de wereld op (server.save) of stop de server. De mogelijkheden voor back-ups staan beschreven in Back-ups op een VPS.
Als iets niet werkt#
ERROR! Failed to install app '258550' (No subscription)#
In het SteamCMD-commando ontbreekt +login anonymous. Zonder in te loggen kun je de server niet downloaden (een Steam-account heb je daarvoor niet nodig).
SteamCMD meldt linux32/steamcmd: No such file or directory#
De 32-bits bibliotheek ontbreekt. Installeer haar als root: apt install lib32gcc-s1.
SteamCMD meldt Please use force_install_dir before logon!#
De parameter +force_install_dir moet in het commando vóór +login staan. Pas de volgorde aan volgens de handleiding.
De service stopt meteen met status=203/EXEC#
systemd kan het script niet starten: het uitvoerrecht ontbreekt (chmod 700 /opt/rust/start.sh), de eerste regel #!/usr/bin/env bash ontbreekt, of het bestand heeft regeleinden van Windows (je hebt het in Windows geschreven en geüpload). Andere foutcodes worden uitgelegd in Applicatie als systemd-service. Uitgebreide uitvoer: journalctl -u rust -n 50.
error while loading shared libraries: …#
De server mist een systeembibliotheek, de naam staat in de melding. Controleer de regel export LD_LIBRARY_PATH=… in het script en installeer de bibliotheek zo nodig via apt.
De server draait, maar je kunt er geen verbinding mee maken#
- De server is nog niet klaar met starten (in de log ontbreekt
Server startup complete). - Poort 28015/UDP is niet toegestaan in UFW of in de firewall in je klantaccount. Let op: het spel gebruikt UDP, niet TCP.
- Je maakt verbinding met het verkeerde IP-adres of de verkeerde poort.
De server staat niet in de serverlijst#
De querypoort (28017/UDP) is niet open, of is dezelfde als de poort van het spel. De server verschijnt pas een paar minuten na de start in de lijst. Zoek op het juiste tabblad (Community of Modded).
De server crasht na een tijd en er staat niets in de log#
Waarschijnlijk was het geheugen op en heeft het systeem het proces beëindigd. Controleer het zo:
journalctl -k | grep -i "out of memory"journalctl -k– toont de meldingen van de kernel van het systeem (hier wordt ook vastgelegd dat een proces vanwege geheugengebrek is beëindigd).| grep -i "out of memory"– houdt alleen de regels met deze tekst over;-imaakt geen onderscheid tussen hoofdletters en kleine letters.
Uitvoer met RustDedicated betekent een tekort aan RAM. Verklein de kaart, beperk de plugins, voeg swap toe of breid het RAM uit (upgrade van de VPS).
Rust+ companion server connectivity test failed! Disabling Rust+ features.#
De server controleert of de poort van Rust+ vanaf internet bereikbaar is. Sta 28082/tcp toe in beide firewalls, of schakel Rust+ uit (+app.port 1-). Facepunch wijst erop dat de poort minstens 10000 moet zijn en dat de server toegang moet hebben tot companion-rust..
Na een update werken de plugins niet#
De update met validate heeft Oxide verwijderd. Upload het opnieuw (hoofdstuk Oxide of Carbon).
Samenvatting
- De server draait onder de gebruiker
rustin/opt/rust/serveren wordt gedownload via SteamCMD (applicatie258550). - De parameters staan in het script
/opt/rust/start.sh, de serviceruststart de server (systemctl start|stop|status rust). - Open 28015/UDP, 28017/UDP en 28082/TCP, en RCON 28016/TCP alleen voor je eigen IP, in UFW én in de firewall in je klantaccount.
- Stuur commando's via RCON; de console op Linux is niet interactief.
- Bijwerken: opslaan, stoppen, SteamCMD met
validate, Oxide opnieuw (Carbon doet het zelf), starten.