SSD Nodes Learn Hosting plans →
Gidsen Matt ConnorDoor Matt Connor

FiveM server installeren op een VPS: handleiding

Leer hoe u FXServer op Ubuntu installeert, een artifact-build vastzet en uw Cfx.re licentiesleutel koppelt. Open poort 30120 en houd txAdmin veilig buiten het openbare internet.

Wat een FiveM-server op een VPS nodig heeft

Een FiveM-server op een VPS bestaat uit één Linux-gebruiker zonder privileges, één artifact-build van Cfx.re, één licentiesleutel en één poort die openstaat voor zowel TCP als UDP. De installatie duurt ongeveer tien minuten. De rest van deze handleiding behandelt de onderdelen die bepalen of de server speelbaar is: de snelheid van een enkele CPU-core, het geheugen dat uw resources vereisen en een beheerpaneel dat nooit op een openbaar adres toegankelijk mag zijn.

Drie vereisten staan vast. De server-binaries, artifacts genoemd, zijn afkomstig uit de officiële build-lijst van Cfx.re. De licentiesleutel komt uit het Cfx.re-portaal op portal.cfx.re, de dienst die in oudere handleidingen keymaster wordt genoemd, en de sleutel is gekoppeld aan het adres van de machine die deze gebruikt. Elke speler die verbinding maakt, heeft een eigen legitiem exemplaar van GTA V (Grand Theft Auto V) nodig op Steam, de Rockstar Games Launcher of Epic Games, plus een gratis Cfx.re-account. De client controleert bij het opstarten of de game in bezit is; een server die op basis van iets anders is gebouwd, werkt daarom niet. Er wordt hier geen enkele vorm van workaround-content behandeld.

Het hosten van de server is een andere taak dan het spelen op de machine zelf, wat of u de game zelf op een VPS kunt draaien betreft, en is een afzonderlijke vraag met een ander antwoord.

Waarom single-core snelheid bepaalt hoe een FiveM server aanvoelt

FXServer, het binary-bestand van de FiveM server, voert de spellogica uit op één hoofdthread. Elk resource-script, elke event-handler en elke statusupdate verloopt via deze enkele lus. Extra cores helpen de kernel, de database en de netwerkstack. Ze splitsen de gameloop echter niet. Een server met 4 vCPU's op een trage core zal dus stotteren onder belasting, terwijl een server met 2 vCPU's op een snelle core soepel blijft draaien.

Dit draait de gebruikelijke gewoonte bij het kopen van een VPS om, waarbij het aantal cores vaak het belangrijkste verkoopargument is. Controleer de snelheid per core voordat u geld uitgeeft. Begin met het CPU-model:

lscpu | grep -E 'Model name|MHz'

Zoek vervolgens de gepubliceerde single-thread score van dat model op. De PassMark single-thread rating en de Geekbench single-core score zijn beide openbaar en meten beide het werkvermogen van één core; dit is het getal dat hier telt. Meet daarna de server die u daadwerkelijk heeft gekregen:

sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 run

Lees de events per second regel. Voer hetzelfde commando uit bij twee potentiële providers en u kunt ze eerlijk vergelijken, omdat de werklast identiek is en beperkt blijft tot één core. Een reproduceerbare VPS-benchmark laat zien hoe u deze cijfers vergelijkbaar houdt tussen verschillende servers.

Controleer daarna of de core daadwerkelijk aan u is toegewezen:

vmstat 1 5

De laatste kolom, st, is steal time: het percentage van de tijd dat uw virtuele CPU klaar was om te draaien, maar de hypervisor hem liet wachten. Een constant cijfer boven 1 of 2 betekent dat u een fysieke core deelt met drukke buren, en een gameloop merkt dat direct als 'rubber banding'. Steal time door een luidruchtige buur beschrijft hoe u deze kolom leest en wat u eraan kunt doen.

Geheugengebruik schaalt met de resources die u draait, niet alleen met het aantal slots. De basis-serverdata van Cfx.re draait in enkele honderden megabytes. Een roleplay-framework met veertig of vijftig resources en een MariaDB-database op dezelfde server is een andere machine: 4 GB is een verstandig minimum, en 8 GB is comfortabel bij 32 tot 64 slots. Dit zijn typische cijfers die door community-setups worden gepubliceerd; beschouw ze als uitgangspunt en monitor free -m onder daadwerkelijke spelersbelasting.

Een gebruiker aanmaken en de afhankelijkheden installeren

Draai de server als een gewone gebruiker, nooit als root. Hiervoor zijn twee redenen. Root is een slechte gewoonte voor elke service die met het internet is verbonden. Daarnaast draait het Linux-artifact binnen een gebundeld Alpine Linux root-bestandssysteem. Bestanden die door root worden uitgepakt, kunnen door niemand anders worden uitgevoerd; dit is de meest voorkomende reden waarom een nieuwe installatie niet wil opstarten.

sudo adduser --disabled-password --gecos "" fivem
sudo apt update
sudo apt install -y git xz-utils curl tcpdump
sudo -iu fivem

Alles hieronder wordt uitgevoerd als de fivem-gebruiker. xz-utils is vereist omdat de download een .tar.xz-archief is, en git wordt gebruikt om de basis-serverdata te klonen.

Een vastgezet artifact-build downloaden

De Linux-build bevindt zich in het build_proot_linux-kanaal van de Cfx.re artifact-server. De lijst markeert één build als de laatst aanbevolen versie, en dit label verschuift elke paar weken naar een nieuwe build. Zet in plaats daarvan de genummerde map vast. Wanneer u uw server volgende maand opnieuw opbouwt, krijgt u hetzelfde binaire bestand als dat u deze maand hebt getest, waardoor een upgrade een bewuste keuze wordt.

mkdir -p ~/FXServer/server
cd ~/FXServer/server
curl -fLO https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/25770-8ddccd4e4dfd6a760ce18651656463f961cc4761/fx.tar.xz
tar xf fx.tar.xz
ls

Build 25770 droeg het aanbevolen label toen ik de lijst in augustus 2026 bekeek. Open dezelfde map in een browser om de huidige versie te zien en plak vervolgens die mapnaam, die bestaat uit het buildnummer plus een commit-hash, in de URL.

ls zou nu run.sh en een alpine-map moeten tonen. Die map is de hele truc: het Linux-artifact bevat zijn eigen kleine Alpine root-bestandssysteem en start de server daarbinnen met behulp van proot, een userspace-tool die chroot emuleert zonder root-rechten. Daarom werkt één download op Ubuntu, Debian en Rocky zonder distributiespecifieke pakketten.

Kloon nu de basis-serverdata, die de standaard resources bevat die uw server.cfg opstart:

git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-data

Verkrijg een licentiesleutel en schrijf server.cfg

Meld u aan bij portal.cfx.re met uw Cfx.re-account en maak een serversleutel aan. Het portaal vraagt om het IP-adres van de machine die de sleutel gaat gebruiken; de sleutel wordt aan dat adres gekoppeld. Verhuizen naar een nieuwe VPS betekent dat u de sleutel in het portaal moet bewerken, niet dat u een tweede sleutel moet aanmaken. De wijziging is direct van kracht, maar FXServer valideert deze pas opnieuw bij een herstart.

Schrijf ~/FXServer/server-data/server.cfg:

endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

sv_hostname "My FiveM server"
sv_maxclients 48
set onesync on
sv_scriptHookAllowed false

sv_licenseKey ChangeMe

add_ace group.admin command allow
add_principal identifier.fivem:1 group.admin

sv_maxclients accepteert een waarde van 1 tot 2048. Een waarde van 32 of hoger vereist dat onesync is ingesteld op on of legacy, en een waarde boven 64 vereist on. OneSync is de modus voor statusbewustzijn van de server en stelt de server in staat om het standaard aantal slots van de basisgame te overschrijden. Het instellen van 128 slots met OneSync uitgeschakeld levert geen 128 slots op, maar een configuratie die door de server wordt geweigerd.

sv_licenseKey bevat de sleutel zonder aanhalingstekens en zonder spaties aan het einde. FXServer splitst die regel op witruimte; één extra teken verbreekt de validatie en de server weigert op te starten.

rcon_password ontbreekt bewust in dat bestand. RCON (remote console) wordt alleen ingeschakeld wanneer de variabele is ingesteld en luistert vervolgens op dezelfde UDP-poort als de game. Een RCON-wachtwoord op een publieke poort is een extern commandokanaal naar uw server. Laat dit oningesteld tenzij u een specifieke behoefte heeft, en kies een lang en willekeurig wachtwoord als u het wel gebruikt.

sv_scriptHookAllowed blijft false. De officiële documentatie geeft aan dat dit niet wordt aanbevolen, omdat het toestaan van Script Hook V-clients de server kwetsbaar maakt voor misbruik aan de clientzijde.

add_principal identifier.fivem:1 verleent beheerdersrechten aan Cfx.re-account-ID 1. Vervang de 1 door uw eigen numerieke ID, anders verleent u beheerdersrechten aan het account van iemand anders en heeft u zelf geen rechten.

Start de server eenmaal handmatig:

cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfg

Vraag vanuit een tweede SSH-sessie informatie op over de server:

curl -s http://127.0.0.1:30120/info.json | head -c 200

JSON-uitvoer met uw servervariabelen en resources betekent dat FXServer is gebonden en reageert. Connection refused betekent dat de poort niet is gebonden; lees in dat geval de console-uitvoer in plaats van te gissen.

Een server zonder sleutel toont dit bericht en stopt:

This server does not have a license key specified. Please set the sv_licenseKey console variable to a key from https://keymaster.fivem.net/.

Het bericht bevat nog steeds het oude keymaster-adres. Dat adres leidt naar hetzelfde Cfx.re-portaal. Als de sleutel is ingesteld en de server weigert nog steeds te draaien, is de gebruikelijke oorzaak dat het IP-adres dat bij de sleutel is geregistreerd niet langer overeenkomt met deze machine.

Welke poorten moet een FiveM-server open hebben?

Poort 30120, via TCP (transmission control protocol) en UDP (user datagram protocol). FiveM gebruikt één poortnummer voor twee protocollen en heeft beide nodig. Als u alleen TCP openstelt, is het symptoom verwarrend: http://your.ip:30120/info.json antwoordt in een browser, waardoor de server gezond lijkt, terwijl de game-client blijft hangen op Failed to get info from server en nooit verbinding maakt, omdat de query van de client en het gameverkeer via UDP verlopen.

sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verbose

Houd een tweede SSH-sessie open terwijl u een firewall inschakelt. De basis van ufw voor een VPS legt het default deny-beleid uit, waardoor de bovenstaande regels op zichzelf voldoende zijn.

De meeste providers gebruiken ook een netwerkfirewall buiten de guest, die vanuit het paneel wordt beheerd in plaats van vanuit de shell. Een ufw-regel zegt niets over die laag. Wanneer TCP van buitenaf antwoordt en spelers nog steeds geen verbinding kunnen maken, monitor dan het netwerkverkeer terwijl iemand het probeert:

sudo tcpdump -ni any udp port 30120

Als er pakketten aankomen, is de externe firewall in orde en ligt de fout binnen de server. Stilte betekent dat iets vóór de server de pakketten blokkeert; controleer in dat geval het paneel van de provider.

Beheer de server met txAdmin zonder deze bloot te stellen

txAdmin wordt meegeleverd in het artifact dat u reeds heeft gedownload. Start run.sh zonder +exec-argument en er verschijnt een webpaneel op TCP-poort 40120; vervolgens worden de URL van het paneel en een tijdelijke PIN naar de console geschreven. U gebruikt deze PIN eenmalig om uw Cfx.re-account te koppelen, waarna u inlogt met het beheerdersaccount dat wordt aangemaakt.

txAdmin heeft geen standaardwachtwoord, dus het risico is niet een wachtwoord dat u bent vergeten te wijzigen. Het risico is wat het paneel is: een console op afstand. Het herstart de server, bewerkt server.cfg, implementeert serverdata en voert commando's uit als uw servergebruiker. Als u 40120 bereikbaar laat vanaf het internet, plaatst u een inlogpagina voor al deze functies op een publiek adres, en scanners vinden open paneelpoorten binnen enkele uren. Open 40120 niet in de firewall. Benader het paneel via een SSH-tunnel vanaf uw eigen machine:

ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IP

Open vervolgens http://127.0.0.1:40120 in uw browser. Het verkeer van het paneel verloopt via de SSH-verbinding en de poort blijft voor iedereen anders gesloten.

Er is één valkuil die u moet kennen voordat u dit op een andere manier probeert op te lossen. txAdmin leest TXHOST_INTERFACE (standaard 0.0.0.0) om te bepalen aan welke interface het moet binden, en de documentatie is expliciet dat dezelfde waarde wordt afgedwongen voor FXServer. Als u dit instelt op 127.0.0.1 om het paneel te verbergen, bindt u ook de gameserver aan loopback, waardoor geen enkele speler de server kan bereiken. Sluit de paneelpoort met de firewall, niet met die variabele. Om het paneel naar een andere poort te verplaatsen, stelt u TXHOST_TXA_PORT in, wat elke waarde accepteert behalve 30120. De oudere +set txAdminPort-convar komt in veel handleidingen voor; de eigen documentatie van txAdmin markeert deze als verouderd en stelt dat deze in een toekomstige release niet meer zal werken.

De server actief houden na het uitloggen

bash run.sh stopt zodra uw SSH-sessie wordt beëindigd. tmux is geschikt tijdens het testen: voer tmux new -s fivem uit, start de server, druk op Ctrl-b en vervolgens op d om los te koppelen, en gebruik tmux attach -t fivem om terug te keren. Een tmux-sessie overleeft een herstart niet, dus alles wat belangrijk is, hoort in een systemd-unit thuis.

Schrijf /etc/systemd/system/fivem.service:

[Unit]
Description=FiveM FXServer
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=fivem
Environment=HOME=/home/fivem
WorkingDirectory=/home/fivem/FXServer/server-data
ExecStart=/bin/bash /home/fivem/FXServer/server/run.sh +exec server.cfg
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -f

enable --now voert twee taken uit: het start de service onmiddellijk en het zorgt ervoor dat de service na een herstart weer wordt opgestart. Een handmatig gestarte server is na de volgende kernel-update verdwenen. journalctl -u fivem -f is nu uw console, omdat een systemd-service geen terminal heeft waarin u kunt typen. Als u de server in plaats daarvan via txAdmin beheert, verwijder dan +exec server.cfg uit ExecStart en laat WorkingDirectory naar /home/fivem/FXServer/server wijzen, omdat txAdmin de gameserver zelf start en de datamap naast run.sh bewaart.

Wat u moet back-uppen en waar dit zich bevindt

De artifacts zijn het back-uppen niet waard, aangezien u de vastgelegde build binnen een minuut opnieuw kunt downloaden. Vier zaken zijn uitsluitend van u.

  • ~/FXServer/server-data/resources: elke resource die u heeft geïnstalleerd, gekocht of geschreven.
  • server.cfg, waar deze zich ook bevindt: de volledige serverconfiguratie, inclusief uw admin-principals.
  • ~/FXServer/server/txData: de configuratie, de admin-lijst en de logs van txAdmin. Bij de Linux-artifact wordt deze map naast run.sh aangemaakt.
  • De MariaDB- of MySQL-database, als uw framework er een gebruikt. Personages, geld, voertuigen en inventarissen bevinden zich daar en nergens anders; een resource-back-up zonder database-dump herstelt dus een lege wereld.
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sql

Een dump die op dezelfde schijf staat als de server is geen back-up, omdat de schijf zelf het onderdeel is dat defect raakt. Verplaats deze volgens een schema naar een externe locatie; dit is waar restic backups from a VPS voor dient.

Foutmodi en de meldingen die u zult zien

Permission denied on the loader. De server sluit onmiddellijk af met een regel zoals deze:

run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission denied

Dit gebeurt omdat het archief is uitgepakt met sudo, waardoor alles onder alpine/ eigendom is van root en de fivem gebruiker de loader daarin niet kan uitvoeren. Herstel het eigendom met sudo chown -R fivem:fivem /home/fivem/FXServer, of verwijder de map en pak deze opnieuw uit als fivem.

tar weigert de download te openen. tar (child): xz: Cannot exec: No such file or directory betekent dat het xz-utils pakket ontbreekt, waardoor tar een .tar.xz archief niet kan decomprimeren. Installeer het pakket en pak het archief opnieuw uit. Een download die veel te snel klaar is, is meestal een HTML-foutpagina die is opgeslagen als fx.tar.xz, en tar rapporteert dit als een corrupt archief.

De server draait en niemand kan verbinden. Controleer eerst de poorten in deze volgorde: de ufw-regel voor zowel TCP als UDP op 30120, vervolgens de netwerkfirewall van de provider zelf, en daarna het IP-adres dat bij de licentiesleutel hoort. curl tegen info.json vanaf buiten de server scheidt in één commando een netwerkprobleem van een serverprobleem.

Tick time loopt op naarmate er meer spelers komen. Het prestatiepaneel van txAdmin toont de tick time van de server. Wanneer deze stijgt met het aantal spelers terwijl het totale CPU-gebruik laag lijkt, verzadigt één resource de hoofdthread. Onthoud de rekensom: op een server met 4 vCPU's wordt één volledig belaste core weergegeven als ongeveer 25 procent totale CPU in top, wat er inactief uitziet maar dat niet is. Stop resources één voor één en observeer de tick time om te achterhalen welke resource de oorzaak is.

Dimensionering in vergelijking met andere gameservers

Een speelbare FiveM-server vereist een snelle single-core en voldoende geheugen voor de resource-lijst die u daadwerkelijk draait. Het aantal slots vloeit voort uit deze twee factoren; een groter aantal vCPU's lost een trage core niet op. Het kiezen van een VPS voor gameservers behandelt deze afweging voor een gemengde vloot, en het draaien van een Minecraft-server op een VPS heeft onderliggend dezelfde structuur: één centrale tick-loop, waardoor de snelheid per core ook daar de bovengrens bepaalt.

FAQ

Hoeveel CPU en RAM heeft een FiveM server nodig?

Eén snelle core is belangrijker dan meerdere langzame, omdat FXServer de spellogica op een enkele hoofdthread uitvoert. Vergelijk de gepubliceerde single-thread score van het CPU-model, bevestig dit op de server met sysbench cpu --threads=1 run en controleer of vmstat een steal time van bijna nul aangeeft. Wat betreft het geheugen: de basis Cfx.re serverdata draait in een paar honderd megabyte, terwijl een roleplay-framework met veertig of vijftig resources plus een lokale database comfortabel draait op 8 GB en krap is onder de 4 GB. Dit zijn typische cijfers uit de community; monitor daarom free -m tijdens piekuren in plaats van blind op deze cijfers te vertrouwen.

Moeten spelers GTA V bezitten om lid te worden van mijn FiveM server?

Ja. Elke speler die verbinding maakt, heeft een legitieme, gelicentieerde kopie van GTA V nodig op Steam, de Rockstar Games Launcher of Epic Games, plus een gratis Cfx.re account. De FiveM client controleert het eigendom van de game voordat er verbinding wordt gemaakt. Er is geen ondersteunde manier om dit te omzeilen, en het draaien van een server die dit probeert te omzeilen valt buiten wat Cfx.re toestaat.

Welke poorten moet een FiveM server open hebben?

Poort 30120 op zowel TCP als UDP. De HTTP-endpoints zoals info.json en resource-downloads gebruiken TCP, en het gameverkeer van de client gebruikt UDP. Het alleen openen van TCP leidt tot de verwarrende situatie waarin de server antwoordt op een browser, maar spelers de melding Failed to get info from server zien. txAdmin heeft TCP 40120 nodig, en die poort moet gesloten blijven voor het internet.

Is het veilig om txAdmin bereikbaar te laten op poort 40120?

Nee. txAdmin is een console op afstand waarmee de server opnieuw kan worden opgestart, configuraties kunnen worden bewerkt en commando's kunnen worden uitgevoerd. Een blootgesteld paneel is dus een blootgesteld controlepaneel voor de gehele gameserver. Er is geen standaardwachtwoord, maar een openbare inlogpagina nodigt uit tot inlogpogingen die u niet kunt inzien. Laat 40120 gesloten in de firewall en benader het paneel via een SSH-tunnel met ssh -N -L 40120:127.0.0.1:40120 user@server, en navigeer vervolgens naar http://127.0.0.1:40120. Bind txAdmin niet aan 127.0.0.1 met TXHOST_INTERFACE, omdat die instelling ook de gameserver dwingt naar loopback, waardoor geen enkele speler verbinding kan maken.

Moet ik een artifact-build vastzetten of altijd de laatste aanbevolen versie gebruiken?

Zet de genummerde build-map vast. Het label 'recommended' wijst regelmatig naar een nieuwe build. Een script dat de aanbevolen build ophaalt, kan u bij elke herbouw een ander binair bestand geven, waardoor een server die gisteren werkte, bij een herimplementatie kan falen door redenen die niets met uw wijzigingen te maken hebben. Noteer het buildnummer en de commit-hash die u hebt getest, voer upgrades bewust uit en bewaar de vorige map op de schijf, zodat u kunt terugschakelen door één pad in uw systemd-unit aan te passen.

#fivem#game-server#txadmin#single-thread#vps