Installer un serveur FiveM sur un VPS Ubuntu
Installez FXServer sur Ubuntu, verrouillez un build d’artifacts, ajoutez votre clé Cfx.re, ouvrez le port 30120 en TCP et UDP, puis protégez txAdmin.
Ce dont un serveur FiveM sur un VPS a besoin
Un serveur FiveM sur un VPS nécessite un utilisateur Linux non privilégié, un build d’artifacts provenant de Cfx.re, une licence et un port ouvert en TCP et en UDP. L’installation prend environ dix minutes. Le reste de ce guide traite des éléments qui déterminent si le serveur est réellement jouable : la vitesse d’un seul cœur CPU, la mémoire nécessaire à vos resources et un panneau d’administration qui ne doit jamais être exposé sur une adresse publique.
Trois prérequis sont indispensables. Les binaires du serveur, appelés artifacts, proviennent de la liste officielle des builds Cfx.re. La licence se récupère sur le portail Cfx.re, à l’adresse portal.cfx.re. Il s’agit du service que les anciens guides appellent keymaster, et la licence est liée à l’adresse de la machine qui l’utilise. Chaque joueur qui se connecte doit disposer de sa propre copie légitime de GTA V (Grand Theft Auto V) sur Steam, le Rockstar Games Launcher ou Epic Games, ainsi que d’un compte Cfx.re gratuit. Le client vérifie la possession du jeu au démarrage. Un serveur basé sur autre chose ne fonctionne donc pas, et ce guide ne couvre aucun contenu de contournement.
Héberger le serveur est différent de jouer sur la machine. La question de savoir si vous pouvez exécuter le jeu lui-même sur un VPS est distincte et appelle une autre réponse.
Pourquoi la vitesse d’un seul cœur détermine la fluidité d’un serveur FiveM
FXServer, le binaire du serveur FiveM, exécute la logique du jeu sur un thread principal unique. Chaque script de resource, chaque gestionnaire d’événements et chaque mise à jour d’état passe par cette boucle unique. Les cœurs supplémentaires aident le kernel, la base de données et la pile réseau. Ils ne répartissent pas la boucle du jeu. Ainsi, un serveur doté de 4 vCPU sur un cœur lent saccade sous la charge, tandis qu’un serveur doté de 2 vCPU sur un cœur rapide reste fluide.
Cela inverse l’habitude courante lors du choix d’un VPS, où le nombre de cœurs est souvent le principal argument. Vérifiez la vitesse par cœur avant de vous engager. Commencez par relever le modèle du CPU :
lscpu | grep -E 'Model name|MHz'Recherchez ensuite le score single-thread publié pour ce modèle. Le classement single-thread de PassMark et le score single-core de Geekbench sont publics. Tous deux mesurent le travail effectué par un seul cœur, ce qui est le chiffre important ici. Mesurez ensuite le serveur qui vous a réellement été attribué :
sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runLisez la ligne events per second. Exécutez la même commande chez deux fournisseurs candidats pour les comparer correctement, car la charge de travail est identique et limitée à un seul cœur. Exécuter un benchmark VPS reproductible explique comment rendre ces chiffres comparables entre plusieurs serveurs.
Vérifiez ensuite que le cœur vous est réellement réservé :
vmstat 1 5La dernière colonne, st, indique le steal time : la proportion de temps pendant laquelle votre CPU virtuel était prêt à s’exécuter, mais où l’hyperviseur l’a fait attendre. Une valeur stable supérieure à 1 ou 2 signifie que vous partagez un cœur physique avec des voisins très actifs. Une boucle de jeu le ressent immédiatement sous la forme de rubber banding. Le steal time causé par un voisin bruyant explique comment lire cette colonne et quelles mesures prendre.
La mémoire dépend des resources que vous exécutez, pas seulement du nombre de slots. Les données de base du serveur fournies par Cfx.re utilisent quelques centaines de mégaoctets. Un framework roleplay avec quarante ou cinquante resources et une base de données MariaDB sur le même serveur correspond à une configuration différente : 4 GB est un minimum raisonnable, et 8 GB offre une marge confortable pour 32 à 64 slots. Ces valeurs sont celles que publient généralement les configurations communautaires. Considérez-les donc comme un point de départ et surveillez free -m avec une charge réelle de joueurs.
Créer un utilisateur et installer les dépendances
Exécutez le serveur avec un utilisateur ordinaire, jamais avec root. Il y a deux raisons à cela. Utiliser root est une mauvaise pratique pour tout service exposé à Internet. De plus, l’artefact Linux s’exécute dans un système de fichiers racine Alpine Linux inclus. Les fichiers décompressés par root ne peuvent donc pas être exécutés par les autres utilisateurs. C’est la cause la plus fréquente d’un refus de démarrage après une nouvelle installation.
sudo adduser --disabled-password --gecos "" fivem
sudo apt update
sudo apt install -y git xz-utils curl tcpdump
sudo -iu fivemToutes les commandes ci-dessous s’exécutent avec l’utilisateur fivem. xz-utils est requis, car le téléchargement est une archive .tar.xz, et git sert à cloner les données de base du serveur.
Télécharger une build d’artefact figée
La build Linux se trouve dans le canal build_proot_linux du serveur d’artefacts Cfx.re. La liste désigne une build comme étant la dernière recommandée, et cette désignation passe à une nouvelle build toutes les quelques semaines. Utilisez plutôt le dossier numéroté comme référence fixe. Si vous reconstruisez votre serveur le mois prochain, vous obtenez ainsi le même binaire que celui testé ce mois-ci. Une mise à niveau devient alors une décision volontaire.
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
lsLa build 25770 portait la désignation recommandée lorsque j’ai consulté la liste en août 2026. Ouvrez le même répertoire dans un navigateur pour voir la build actuelle, puis copiez le nom de ce dossier dans l’URL. Il contient le numéro de build et un hash de commit.
ls doit maintenant afficher run.sh et un répertoire alpine. Ce répertoire est l’élément essentiel : l’artefact Linux contient son propre petit système de fichiers racine Alpine et démarre le serveur à l’intérieur avec proot, un outil en espace utilisateur qui émule chroot sans privilèges root. C’est pourquoi un seul téléchargement fonctionne sur Ubuntu, Debian et Rocky, sans installer de paquets spécifiques à la distribution.
Clonez maintenant les données de base du serveur. Elles contiennent les ressources par défaut que votre server.cfg démarre :
git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-dataObtenir une clé de licence et rédiger server.cfg
Connectez-vous à portal.cfx.re avec votre compte Cfx.re et créez une clé de serveur. Le portail demande l’adresse IP de la machine qui l’utilisera, et la clé est liée à cette adresse. Si vous passez à un nouveau VPS, modifiez la clé dans le portail au lieu d’en créer une deuxième. La modification s’applique immédiatement, mais FXServer ne vérifie de nouveau la clé qu’après son redémarrage.
Rédigez ~/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.adminsv_maxclients accepte une valeur comprise entre 1 et 2048. À partir de 32, onesync doit être défini sur on ou legacy, et une valeur supérieure à 64 nécessite on. OneSync est le mode de gestion de l’état du serveur. Il permet à un serveur de dépasser le faible nombre de slots du jeu de base. Définir 128 slots avec OneSync désactivé ne vous donne pas 128 slots : le serveur rejette cette configuration.
sv_licenseKey reçoit la clé sans guillemets ni espace final. FXServer découpe cette ligne selon les espaces. Un seul caractère inattendu suffit donc à faire échouer la validation et à empêcher le démarrage du serveur.
rcon_password est volontairement absent de ce fichier. RCON (console distante) n’est activé que lorsque la variable est définie. Il écoute alors sur le même port UDP que le jeu. Un mot de passe RCON sur un port public constitue un canal de commandes distant vers votre serveur. Laissez cette variable non définie sauf en cas de besoin précis. Si vous l’utilisez, choisissez un mot de passe long et aléatoire.
sv_scriptHookAllowed reste false. La documentation officielle le déconseille, car l’autorisation des clients Script Hook V expose le serveur à des abus côté client.
add_principal identifier.fivem:1 accorde les droits d’administration au compte Cfx.re portant l’ID 1. Remplacez 1 par votre propre ID numérique. Sinon, vous accordez les droits d’administration au compte d’une autre personne et vous ne vous les accordez pas à vous-même.
Démarrez-le une fois manuellement :
cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfgDepuis une deuxième session SSH, demandez au serveur de fournir ses informations :
curl -s http://127.0.0.1:30120/info.json | head -c 200Le JSON qui nomme vos variables et ressources indique que FXServer est bien lié au port et répond. Connection refused signifie qu’il n’a jamais réussi à lier le port. Consultez donc la sortie de la console au lieu de procéder par suppositions.
Un serveur sans clé affiche ce message, puis s’arrête :
This server does not have a license key specified. Please set the sv_licenseKey console variable to a key from https://keymaster.fivem.net/.Le message mentionne toujours l’ancienne adresse de keymaster. Cette adresse renvoie vers le même portail Cfx.re. Si la clé est définie et que le serveur refuse toujours de démarrer, la cause habituelle est que l’adresse IP enregistrée avec la clé ne correspond plus à celle de cette machine.
Quels ports un serveur FiveM doit-il ouvrir ?
Le port 30120, en TCP (transmission control protocol) et en UDP (user datagram protocol). FiveM utilise le même numéro de port pour deux protocoles et a besoin des deux. Si vous ouvrez uniquement TCP, le symptôme est trompeur : http://your.ip:30120/info.json répond dans un navigateur, donc le serveur semble opérationnel, tandis que le client de jeu reste bloqué sur Failed to get info from server et ne rejoint jamais le serveur, car ses requêtes et son trafic de jeu passent par UDP.
sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verboseGardez une deuxième session SSH ouverte pendant l’activation d’un pare-feu. Les bases de ufw pour un VPS expliquent la stratégie de refus par défaut qui suffit à elle seule avec les règles ci-dessus.
La plupart des fournisseurs exécutent également un pare-feu réseau en dehors de la machine virtuelle, que vous contrôlez depuis le panneau plutôt que depuis le shell. Une règle ufw ne prouve rien concernant cette couche. Lorsque TCP répond depuis l’extérieur alors que les joueurs ne peuvent toujours pas se connecter, surveillez le trafic réseau pendant qu’une personne essaie de se connecter :
sudo tcpdump -ni any udp port 30120L’arrivée de paquets signifie que le pare-feu externe fonctionne et que le problème se situe sur le serveur. L’absence de trafic signifie qu’un équipement en amont les bloque. Vérifiez ensuite le panneau du fournisseur.
Gérer le serveur avec txAdmin sans l’exposer
txAdmin est inclus dans l’artifact que vous avez déjà téléchargé. Démarrez run.sh sans argument +exec : il ouvre une interface web sur le port TCP 40120, puis affiche dans la console l’URL de l’interface et un code PIN à durée de validité limitée. Utilisez ce code PIN une seule fois pour associer votre compte Cfx.re. Ensuite, connectez-vous avec le compte administrateur qu’il crée.
txAdmin n’a pas de mot de passe par défaut. Le risque ne vient donc pas d’un identifiant que vous auriez oublié de modifier. Le risque vient de la nature du panneau : c’est une console distante. Il redémarre le serveur, modifie server.cfg, déploie les données du serveur et exécute des commandes avec le compte utilisateur du serveur. Laisser le port 40120 accessible depuis Internet expose publiquement une page de connexion donnant accès à toutes ces fonctions. Les scanners détectent les ports de panneau ouverts en quelques heures. N’ouvrez pas le port 40120 dans le firewall. Accédez-y avec un tunnel SSH depuis votre propre machine :
ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IPOuvrez ensuite http://127.0.0.1:40120 dans votre navigateur. Le trafic du panneau passe à l’intérieur de la connexion SSH. Le port reste fermé pour tous les autres utilisateurs.
Un piège mérite d’être connu avant d’essayer une autre méthode. txAdmin lit TXHOST_INTERFACE (0.0.0.0 par défaut) pour déterminer l’interface sur laquelle écouter. La documentation précise que cette même valeur est imposée à FXServer. Si vous la définissez sur 127.0.0.1 pour masquer le panneau, le serveur de jeu écoutera lui aussi sur l’interface loopback. Aucun joueur ne pourra alors accéder au serveur. Fermez le port du panneau avec le firewall, et non avec cette variable. Pour déplacer le panneau vers un autre port, définissez TXHOST_TXA_PORT. Cette variable accepte toutes les valeurs sauf 30120. L’ancienne convar +set txAdminPort apparaît dans de nombreux guides. La documentation de txAdmin la marque comme obsolète et indique qu’elle cessera de fonctionner dans une prochaine release.
Laissez le serveur fonctionner après votre déconnexion
bash run.sh s’arrête avec votre session SSH. tmux convient pour les tests : exécutez tmux new -s fivem, démarrez le serveur, appuyez sur Ctrl-b puis sur d pour vous détacher, et utilisez tmux attach -t fivem pour revenir à la session. Une session tmux ne survit pas à un redémarrage. Tout ce qui doit rester disponible doit donc être défini dans une unité systemd.
Créez /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.targetsudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -fenable --now a deux fonctions : il démarre immédiatement le service et le relance après un redémarrage. Un serveur démarré manuellement disparaît au prochain redémarrage du noyau. journalctl -u fivem -f est désormais votre console, car un service systemd ne dispose d’aucun terminal dans lequel vous pouvez saisir des commandes. Si vous administrez plutôt le serveur avec txAdmin, supprimez +exec server.cfg de ExecStart et faites pointer WorkingDirectory vers /home/fivem/FXServer/server, car txAdmin démarre lui-même le serveur de jeu et conserve son dossier de données à côté de run.sh.
Ce qu’il faut sauvegarder et où le trouver
Les artifacts ne nécessitent pas de sauvegarde, car vous pouvez retélécharger la build épinglée en une minute. Quatre éléments vous appartiennent exclusivement.
~/FXServer/server-data/resources: toutes les ressources que vous avez installées, achetées ou écrites.server.cfg, quel que soit son emplacement : toute la configuration du serveur, y compris vos principaux d’administration.~/FXServer/server/txData: la configuration, la liste des administrateurs et les journaux de txAdmin. Avec l’artifact Linux, ce dossier est créé à côté derun.sh.- La base de données MariaDB ou MySQL, si votre framework en utilise une. Les personnages, l’argent, les véhicules et les inventaires y sont stockés, et nulle part ailleurs. Une sauvegarde des ressources sans dump de la base de données restaure donc un monde vide.
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sqlUn dump stocké sur le même disque que le serveur n’est pas une sauvegarde, car c’est précisément le disque qui peut tomber en panne. Transférez-le régulièrement vers un autre emplacement, comme le permet restic pour sauvegarder un VPS.
Modes d’échec et messages affichés
Permission denied sur le loader. Le serveur se ferme immédiatement avec une ligne similaire à celle-ci :
run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission deniedCela se produit parce que l’archive a été extraite avec sudo. Tout ce qui se trouve sous alpine/ appartient donc à root, et l’utilisateur fivem ne peut pas exécuter le loader qui s’y trouve. Corrigez le propriétaire avec sudo chown -R fivem:fivem /home/fivem/FXServer, ou supprimez le dossier et extrayez de nouveau l’archive avec fivem.
tar refuse d’ouvrir le téléchargement. tar (child): xz: Cannot exec: No such file or directory signifie que le package xz-utils est manquant. tar ne peut donc pas décompresser une archive .tar.xz. Installez ce package, puis extrayez de nouveau l’archive. Un téléchargement qui se termine beaucoup trop rapidement correspond généralement à une page d’erreur HTML enregistrée sous fx.tar.xz. tar la signale alors comme une archive corrompue.
Le serveur fonctionne, mais personne ne peut se connecter. Vérifiez d’abord les ports, dans cet ordre : la règle ufw pour TCP et UDP sur 30120, le firewall réseau du fournisseur, puis l’adresse IP enregistrée avec la licence. Exécuter curl contre info.json depuis l’extérieur du serveur permet de distinguer en une seule commande un problème réseau d’un problème lié au serveur.
Le tick time augmente lorsque les joueurs arrivent. Le panneau de performances de txAdmin affiche le tick time du serveur. Lorsqu’il augmente avec le nombre de joueurs alors que l’utilisation globale du CPU semble faible, une resource sature le thread principal. Gardez à l’esprit le calcul suivant : sur un serveur équipé de 4 vCPU, un seul core complètement utilisé représente environ 25 pour cent du CPU total dans top. La machine semble alors inactive, mais elle ne l’est pas. Arrêtez les resources une par une et surveillez le tick time pour identifier celle qui consomme ces ressources.
Comparer ces besoins à ceux d’autres serveurs de jeux
Un serveur FiveM jouable nécessite un cœur rapide et suffisamment de mémoire pour la liste de resources que vous exécutez réellement. Le nombre de slots découle de ces deux éléments, et aucun nombre de vCPU ne peut compenser un cœur lent. Choisir un VPS pour des serveurs de jeux explique cet arbitrage pour une flotte hétérogène, et Exécuter un serveur Minecraft sur un VPS repose sur le même principe : une boucle de tick principale, donc la vitesse par cœur détermine aussi la limite.
FAQ
De quels niveaux de CPU et de RAM un serveur FiveM a-t-il besoin ?
Un cœur rapide est plus important que plusieurs cœurs lents, car FXServer exécute la logique du jeu sur un thread principal unique. Comparez le score single-thread publié pour le modèle de CPU, puis vérifiez-le sur le serveur avec sysbench cpu --threads=1 run et contrôlez que vmstat affiche un steal time proche de zéro. Côté mémoire, les données de base du serveur Cfx.re tiennent dans quelques centaines de mégaoctets. En revanche, un framework roleplay avec quarante ou cinquante resources et une base de données locale fonctionne confortablement avec 8 GB, mais manque d’espace sous 4 GB. Ces valeurs sont typiques de la communauté. Surveillez donc free -m pendant les pics de charge au lieu de vous y fier.
Les joueurs doivent-ils posséder GTA V pour rejoindre mon serveur FiveM ?
Oui. Chaque joueur qui se connecte doit posséder une copie légitime et sous licence de GTA V sur Steam, Rockstar Games Launcher ou Epic Games, ainsi qu’un compte Cfx.re gratuit. Le client FiveM vérifie que le jeu appartient bien au joueur avant d’établir la connexion. Il n’existe aucune méthode prise en charge pour contourner cette vérification. L’exécution d’un serveur qui tente de la contourner n’est pas autorisée par Cfx.re.
Quels ports un serveur FiveM doit-il ouvrir ?
Le port 30120 doit être ouvert en TCP et en UDP. Les endpoints HTTP, comme info.json, ainsi que les téléchargements de resources utilisent TCP. Le trafic de jeu du client utilise UDP. Ouvrir uniquement TCP crée un cas trompeur : le serveur répond dans un navigateur, mais les joueurs voient Failed to get info from server. txAdmin utilise le port TCP 40120. Ce port doit rester fermé depuis Internet.
Est-il sûr de laisser txAdmin accessible sur le port 40120 ?
Non. txAdmin est une console distante qui redémarre le serveur, modifie la configuration et exécute des commandes. Un panneau exposé constitue donc un control plane exposé pour l’ensemble du serveur de jeu. Il n’y a pas de mot de passe par défaut, mais une page de connexion publique facilite les attaques contre les identifiants, que vous ne pouvez pas détecter. Laissez 40120 fermé dans le firewall et accédez au panneau par un tunnel SSH avec ssh -N -L 40120:127.0.0.1:40120 user@server, puis ouvrez http://127.0.0.1:40120 dans votre navigateur. Ne liez pas txAdmin à 127.0.0.1 avec TXHOST_INTERFACE, car ce réglage force également le serveur de jeu à utiliser loopback et empêche tout joueur de se connecter.
Dois-je figer une build d’artifact ou toujours utiliser la dernière build recommandée ?
Figez le dossier correspondant à la build numérotée. Le label recommended change régulièrement de build. Un script qui récupère la build recommended peut donc vous fournir un binaire différent à chaque reconstruction. Un serveur qui fonctionnait la veille peut alors tomber en panne lors d’un redeploy, pour des raisons sans rapport avec vos modifications. Notez le numéro de build et le commit hash que vous avez testés. Effectuez les mises à niveau volontairement et conservez l’ancien dossier sur le disque. Vous pourrez ainsi revenir en arrière en modifiant un seul chemin dans votre unité systemd.