🚓 Chapitre 3 · Ton serveur FiveM sur TeamKit

Installer ESX Legacy pas à pas

Mis à jour le 07/09/2026 ·

Tu as un serveur FiveM qui démarre avec les ressources de base (chapitre 01) et tu as choisi ESX (chapitre 02). Ce chapitre t'emmène jusqu'à une ville jouable : création de personnage, inventaire, garage, police, ambulance, mécano.

Rappel du contexte TeamKit : pas de txAdmin, donc pas de « recipe » qui installe tout seul. Tu fais à la main ce que la recette officielle ESX fait automatiquement. Ce n'est pas long, mais l'ordre compte.

Versions vérifiées le 7 septembre 2026 :

Si les numéros ont changé quand tu lis ceci, prends la dernière version stable de chaque page.

Ce que tu vas installer #

Bloc Contenu D'où
Cœur es_extended, esx_lib et le reste du dossier [core] (identité, multi-personnage, skin, menus, notifications) archive esx_core
Addons les esx_* du dossier [esx_addons] (métiers, garage, banque, boutiques…) archive ESX-Legacy-Addons
Base de données oxmysql oxmysql.zip
Bibliothèque ox_lib — pas requis par ESX 1.15, mais exigé par beaucoup de scripts tiers et par ox_inventory ox_lib.zip

✅ À retenir : ESX 1.15 embarque sa propre bibliothèque esx_lib. ox_lib est un plus, pas une obligation.

Avant de commencer #

  • Ton serveur démarre et est « online » sur Status, clé Cfx.re renseignée.
  • FileZilla ou WinSCP connecté en SFTP (identifiants sur Status → Connection Info).
  • Les infos de ta base sur le tableau de bord teamkit.fr : hôte local, port, utilisateur, nom de base, lien vers l'interface web (Adminer).
  • Une base MariaDB. Si ton tableau de bord indique MySQL 8.4, demande une base MariaDB au staff avant d'importer : plusieurs fichiers SQL des packs FiveM échouent sur MySQL 8.4 (chapitre 06).

1. Télécharger les archives #

  1. Ouvre https://github.com/esx-framework/esx_core/releases, clique sur la dernière version et télécharge Source code (zip). Il n'y a pas d'autre fichier : la release ESX, c'est le code source. Le zip s'appelle esx_core-1.15.2.zip.
  2. Fais pareil sur https://github.com/esx-framework/ESX-Legacy-Addons/releases.
  3. Ouvre https://github.com/overextended/oxmysql/releases/latest et télécharge oxmysql.zip (pas « Source code » : le zip de release contient la version compilée, le code source ne fonctionne pas tel quel).
  4. Ouvre https://github.com/overextended/ox_lib/releases/latest et télécharge ox_lib.zip (même remarque).
  5. Décompresse les quatre archives dans un dossier de travail sur ton PC.

Ce que tu obtiens :

esx_core-1.15.2/
├── [SQL]/legacy.sql      ← le fichier à importer en base
└── [core]/               ← le dossier à envoyer (es_extended, esx_lib, esx_identity, esx_multicharacter, esx_skin, skinchanger, esx_context, esx_notify, esx_menu_*, esx_inventory, cron…)
ESX-Legacy-Addons-1.15.0/
└── [esx_addons]/         ← 36 dossiers esx_*
oxmysql/  et  ox_lib/     ← prêts à l'emploi

✅ À retenir : les zips « Source code » ajoutent un dossier d'enrobage (esx_core-1.15.2/). C'est son contenu qui t'intéresse.

2. Déposer les ressources par SFTP #

Tout va dans server-data/resources/. Les dossiers entre crochets sont de simples catégories : FXServer les parcourt et trouve les ressources dedans.

  1. Ouvre server-data/resources/ en SFTP. [system], [managers], [gameplay], [gamemodes], [local], [test] sont la base FiveM clonée par AMP : ne les touche pas.
  2. Crée [standalone] et dépose dedans oxmysql et ox_lib.
  3. Dépose le dossier [core] (celui qui est DANS esx_core-1.15.2) directement dans resources/.
  4. Dépose [esx_addons] (celui qui est DANS ESX-Legacy-Addons-…) directement dans resources/.
  5. Vérifie que resources/[core]/es_extended/fxmanifest.lua existe. Si tu vois [core]/[core]/es_extended, tu as envoyé un niveau de trop.
server-data/resources/
├── [system]  [managers]  [gameplay]  [gamemodes]  [local]  [test]   (base FiveM, déjà là)
├── [standalone]/
│   ├── oxmysql/
│   └── ox_lib/
├── [core]/
│   ├── es_extended/
│   ├── esx_lib/
│   └── …
└── [esx_addons]/
    ├── esx_policejob/
    └── …

Deux règles :

  • Aucun fichier de sauvegarde dans un dossier de ressource (config.lua.bak, main.lua.old). Beaucoup de manifestes chargent server/** ou client/** : la copie serait exécutée comme un script, avec des événements en double. Sauvegarde dans server-data/sauvegardes/, hors resources/.
  • Un seul inventaire, un seul menu de vêtements, un seul HUD. Deux ressources qui font la même chose = bugs aléatoires.

✅ À retenir : resources/[core]/es_extended/fxmanifest.lua doit exister. Sinon rien ne démarre.

3. Importer la base de données #

ESX fournit un seul fichier qui crée toutes les tables du cœur ET des addons officiels : [SQL]/legacy.sql (users, jobs, job_grades, items, owned_vehicles, addon_account, billing, multicharacter_slots, banking…). C'est celui que la recette officielle importe.

  1. Tableau de bord teamkit.fr → ton serveur → base de données → lien vers l'interface web (Adminer).
  2. Connecte-toi avec l'utilisateur et le mot de passe affichés (le même que ton compte AMP).
  3. Sélectionne ta base, vide, dans la colonne de gauche.
  4. Onglet Importerlegacy.sql → lance.
  5. Vérifie qu'aucune erreur rouge n'apparaît et que users, jobs, items et owned_vehicles sont listées.

Les fichiers es_extended.sql, esx_identity.sql, esx_multicharacter.sql et esx_skin.sql de [core] sont des sous-ensembles de legacy.sql : ne les importe pas en plus.

-- Vérification rapide (onglet SQL)
SHOW TABLES;
SELECT COUNT(*) FROM jobs;

✅ À retenir : un seul import, legacy.sql. Une erreur DEFAULT sur une colonne TEXT ou un IF NOT EXISTS refusé = tu es sur MySQL 8.4, passe sur MariaDB.

4. Renseigner la chaîne de connexion #

oxmysql lit la ConVar mysql_connection_string. Sur AMP TeamKit tu ne touches jamais server.cfg (regénéré à chaque démarrage) : tu passes par Configuration → FiveM → Additional Server Settings, une ligne par réglage.

  1. Ouvre Configuration → FiveM → Additional Server Settings.
  2. Ajoute cette ligne avec les valeurs du tableau de bord (hôte LOCAL, port de l'instance — pas 3306) :
set mysql_connection_string "mysql://UTILISATEUR:MOT_DE_PASSE@HOTE:PORT/BASE?charset=utf8mb4"
  1. Enregistre.

Le tableau de bord propose la chaîne déjà construite : ajoute set mysql_connection_string " devant et ?charset=utf8mb4" derrière. Un mot de passe contenant ; , / ? : @ & = + $ # est mal lu dans cette forme (https://overextended.dev/oxmysql) : utilise alors la forme à points-virgules user=…;password=…;host=…;port=…;database=… décrite au chapitre 06.

✅ À retenir : ER_ACCESS_DENIED_ERROR 1045 = utilisateur, mot de passe ou hôte faux. ECONNREFUSED = hôte ou port faux.

5. Écrire le bloc Starting Resources #

C'est le cœur du chapitre. Configuration → FiveM → Starting Resources accepte n'importe quelle ligne de server.cfg, pas seulement des ensure. Et c'est là que se joue un piège d'AMP : Additional Server Settings est écrit APRÈS les ressources dans le server.cfg généré. Une ressource qui lit une ConVar au démarrage (langue ESX, inventaire, apparence…) ne la verrait pas. Donc : toutes les ConVars en TÊTE de Starting Resources, avant le premier ensure.

  1. Ouvre Configuration → FiveM → Starting Resources.
  2. Remplace tout le contenu par le bloc ci-dessous.
  3. Supprime ensure ox_lib si tu n'as pas déposé ox_lib.
  4. Enregistre.
# ===== 1. ConVars : TOUJOURS avant le premier ensure =====
setr esx:locale "fr"
setr esx:identifier "license"
setr ox:locale "fr"
# Durcissement repris de la recette officielle ESX
sv_enableNetworkedSounds false
sv_enableNetworkedScriptEntityStates false
sv_enableNetworkedPhoneExplosions false
sv_filterRequestControl 2

# ===== 2. Base FiveM (cfx-server-data) =====
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
ensure baseevents

# ===== 3. Base de données et bibliothèques =====
ensure oxmysql
ensure ox_lib
ensure esx_lib

# ===== 4. Cœur ESX =====
ensure es_extended
ensure cron
ensure esx_context
ensure esx_notify
ensure esx_textui
ensure esx_progressbar
ensure esx_menu_default
ensure esx_menu_dialog
ensure esx_menu_list
ensure esx_chat_theme
ensure esx_loadingscreen
ensure skinchanger
ensure esx_skin
ensure esx_identity
ensure esx_multicharacter
ensure esx_inventory

# ===== 5. Addons essentiels (dépendances avant dépendants) =====
ensure esx_addonaccount
ensure esx_addoninventory
ensure esx_datastore
ensure esx_society
ensure esx_status
ensure esx_basicneeds
ensure esx_license
ensure esx_billing
ensure esx_vehicleshop
ensure esx_garage
ensure esx_shops
ensure esx_joblisting
ensure esx_hud
ensure esx_adminmenu
ensure esx_policejob
ensure esx_ambulancejob
ensure esx_mechanicjob

Pourquoi cet ordre (lu dans les fxmanifest.lua) :

  • oxmysql et esx_lib avant es_extended : le cœur charge @oxmysql/lib/MySQL.lua et @esx_lib/imports.lua dès son démarrage.
  • esx_context, esx_identity, esx_skin (donc skinchanger) avant esx_multicharacter : dépendances déclarées.
  • cron et esx_addonaccount avant esx_society ; esx_society et esx_billing avant esx_mechanicjob ; esx_billing et esx_vehicleshop avant esx_policejob ; esx_status avant esx_basicneeds et esx_hud.

La recette officielle fait plus court avec ensure [core] puis ensure [esx_addons], qui démarrent tout un dossier. Ça marche aussi. La liste explicite te montre ce qui tourne et te laisse retirer un addon en supprimant une ligne.

Trois réglages voisins dans la même page Configuration :

  • Enforce Game Build : la recette ESX utilise 3258. Le défaut AMP 1604 n'a aucun DLC récent. Choisis 3258 ou plus, puis n'en change plus.
  • OneSync Mode : On (ox_inventory l'exige).
  • Player Limit : 32 pour commencer.

✅ À retenir : ConVars en haut, oxmysqlesx_libes_extended, puis le reste. Après chaque modification de Configuration, redémarre l'instance.

6. Créer le premier admin #

ESX 1.15 connaît trois groupes : user, admin et owner (les commandes admin sont ouvertes à admin et owner dans Config.CommandPermissions). Le groupe est stocké dans users.group ET posé comme principal ACE group.<nom> à chaque connexion. Sur AMP, les lignes ACE vont dans Configuration → FiveM → Access Control Commands.

  1. Démarre le serveur et connecte-toi une première fois : F8 → connect ip:30120.
  2. Dans la Console AMP, repère la ligne de connexion de ton joueur : elle affiche license: suivi de 40 caractères hexadécimaux. Copie cette valeur.
  3. Ouvre Configuration → FiveM → Access Control Commands et colle ce bloc en remplaçant XXXX :
add_principal group.admin group.user
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_ace resource.es_extended command.add_ace allow
add_ace resource.es_extended command.add_principal allow
add_ace resource.es_extended command.remove_principal allow
add_ace resource.es_extended command.stop allow
add_principal identifier.license:XXXX group.admin

Les quatre lignes resource.es_extended viennent de la recette officielle : elles autorisent ESX lui-même à poser des principals quand il charge un joueur ou exécute /setgroup.

  1. Enregistre, puis Restart sur Status. Un refresh en console ne relit pas la Configuration.
  2. Reconnecte-toi. Deux cas :
    • Tu n'avais pas encore de personnage : ESX te crée directement en admin et la console affiche Has been granted admin permissions via Ace Perms.
    • Tu avais déjà un personnage en user : tape dans la Console AMP setgroup <ton id en jeu> admin (la commande accepte la console ; l'id s'obtient avec status).

Pour promouvoir un autre joueur : /setgroup <id> admin en jeu ou en console. En dernier recours, en base :

UPDATE users SET `group` = 'admin' WHERE identifier = 'license:XXXX';

✅ À retenir : licence lue dans la Console AMP, une ligne add_principal identifier.license:XXXX group.admin, Restart.

7. Redémarrer et vérifier #

  1. Restart sur Status, attends « Running ».
  2. Console : oxmysql annonce sa connexion, es_extended démarre sans ligne rouge, puis chaque addon.
  3. Tape status : liste vide, pas d'erreur.
  4. Connecte-toi. Tu dois voir la sélection de personnage (esx_multicharacter) puis le formulaire d'identité (esx_identity : prénom, nom, date de naissance, sexe, taille).
  5. En jeu, teste les commandes de es_extended : /car adder, /setjob <id> police 0, /giveitem <id> bread 1, /tpm, /noclip, /players.
  6. F8 côté client : aucune erreur rouge.

Lignes rouges fréquentes à ce stade :

  • Couldn't find resource es_extended → chemin SFTP faux (dossier d'enrobage).
  • 1045 ou ECONNREFUSED → chaîne de connexion.
  • ESX = nil dans un addon → es_extended trop ancien pour cet addon (https://docs.esx-framework.org/en/troubleshoot).
  • Native XXXX is not supported → artefact FXServer trop vieux : Updates → Server Build → Latest, puis Update.

✅ À retenir : console propre + création de personnage = ESX est installé.

8. Ajouter les premiers scripts essentiels #

Inventaire #

Deux options. N'en installe qu'une.

Option A — esx_inventory (déjà installé). L'inventaire par défaut d'ESX 1.15, dans [core]. Il s'active tout seul tant qu'aucun autre inventaire n'est présent. Bon choix pour démarrer.

Option B — ox_inventory. Inventaire à slots avec coffres, boutiques et armes-objets. ESX est dans sa liste de frameworks supportés (https://github.com/overextended/ox_inventory). Il exige oxmysql, ox_lib et OneSync. Prends ox_inventory.zip sur https://github.com/overextended/ox_inventory/releases/latest, dépose-le dans [standalone], puis :

# En TÊTE de Starting Resources, avec les autres ConVars
setr inventory:framework "esx"
setr inventory:slots 50
setr inventory:weight 30000
setr inventory:target false

# Après es_extended, À LA PLACE de ensure esx_inventory
ensure ox_inventory

es_extended détecte ox_inventory au démarrage et coupe son inventaire interne. Retire quand même ensure esx_inventory. La documentation prévient que remplacer l'inventaire natif crée des incompatibilités avec les scripts qui gèrent l'argent comme un objet (https://overextended.dev/docs/ox_inventory). Si tu débutes, reste en option A.

Garage #

esx_garage, dans [esx_addons] et déjà dans ton bloc. Il dépend de es_extended et oxmysql, utilise owned_vehicles (créée par legacy.sql) et travaille avec esx_vehicleshop, qui remplit cette table à l'achat. Les emplacements se règlent dans son config.lua.

Métiers #

Métier Ressource Dépend de
Police esx_policejob es_extended, esx_billing, esx_vehicleshop
Ambulance esx_ambulancejob es_extended, esx_skin, esx_vehicleshop
Mécano esx_mechanicjob es_extended, esx_society, esx_billing

esx_society gère les comptes d'entreprise (recrutement, salaires) et dépend de cron et esx_addonaccount. Grades et salaires sont déjà dans jobs et job_grades via legacy.sql.

Pour des libellés en français, chaque métier fournit un localization/fr_*.sql (exemple : [esx_addons]/esx_policejob/localization/fr_esx_policejob.sql). Importe-le APRÈS legacy.sql, une fois par métier.

Pour continuer, dans [esx_addons] : esx_taxijob, esx_jobs, esx_dmvschool et esx_weaponshop (dépendent de esx_license), esx_banking, esx_property, esx_barbershop et esx_clotheshop (dépendent de esx_skin). La recette officielle ajoute aussi pma-voice (voix, projet tiers) dans [standalone] : https://github.com/esx-framework/esx-recipes, branche legacy. Un script à la fois : dépose, ensure sous ses dépendances, Restart, test.

✅ À retenir : un seul inventaire. Un script à la fois, dépendances d'abord.

✅ Checklist du chapitre #

❓ Si ça ne marche pas #

Couldn't find resource es_extended (ou un autre nom). Le dossier n'est pas où FXServer le cherche. Vérifie par SFTP que resources/[core]/es_extended/fxmanifest.lua existe. Si tu vois esx_core-1.15.2 ou [core]/[core], remonte le contenu d'un niveau, puis refresh et ensure es_extended en console.

oxmysql : ER_ACCESS_DENIED_ERROR (1045) ou ECONNREFUSED. 1045 : utilisateur, mot de passe ou hôte. ECONNREFUSED : hôte ou port (celui du tableau de bord, pas 3306). Recopie la chaîne du tableau de bord. Si la ligne est bonne mais qu'oxmysql dit ne pas avoir de chaîne au démarrage, déplace-la en tête de Starting Resources : cette zone est écrite avant les ressources.

ESX Multicharacter couldn't connect to the database. Même cause : la chaîne de connexion, ou un import SQL à moitié fait. Vérifie que multicharacter_slots existe.

Mes commandes admin répondent que je n'ai pas la permission. Licence fausse (recopie-la depuis la console à ta connexion), instance pas redémarrée après l'ajout, ou lignes add_ace resource.es_extended … manquantes.

Écran noir ou pas de menu de personnage. Ouvre F8 : une ressource client plante. Causes fréquentes : Enforce Game Build trop bas, ou une chaîne Lua '...' coupée par un retour à la ligne dans un config.lua modifié.

J'ai modifié un fxmanifest.lua et la ressource ne bouge plus. refresh PUIS restart <ressource>. Un restart seul ne relit pas le manifeste. Si la modification touche Configuration, c'est Restart de l'instance.

Pour le reste (erreurs réseau, streaming, MLO, No such export), va au chapitre 08 « Dépannage ».

Une étape qui coince ? Ouvre un ticket sur le site ou demande sur le Discord TeamKit. Le bot Guide connaît ces pages.