🚓 Chapitre 4 · Ton serveur FiveM sur TeamKit

Installer QBCore 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 QBCore (chapitre 02). Ce chapitre t'emmène jusqu'à une ville jouable : multi-personnage, appartement, inventaire, garage, banque, police, ambulance, mécano.

Sur TeamKit il n'y a pas de txAdmin, donc pas de recette « QBCore Framework » qui télécharge tout. Cette recette est publique : tu vas reproduire à la main ce qu'elle fait, dans le panel AMP.

Vérifié le 7 septembre 2026 :

Ce que tu vas installer #

Bloc Contenu D'où
Cœur qb-core dépôt qbcore-fivem/qb-core
Ressources qb-* multi-personnage, spawn, appartements, vêtements, inventaire, garages, banque, métiers, admin… un dépôt par ressource
Dépendances oxmysql, PolyZone, progressbar, interact-sound, menuv, connectqueue (optionnel) oxmysql.zip + dépôts qbcore-fivem
Base de données qbcore.sql de la recette (toutes les tables) dépôt txAdminRecipe

✅ À retenir : QBCore, c'est une trentaine de dépôts séparés. Télécharge-les dans un dossier de travail avant d'envoyer quoi que ce soit.

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. Le SQL de la recette utilise CREATE TABLE IF NOT EXISTS et des colonnes JSON avec contraintes : sur MySQL 8.4 certaines constructions des packs FiveM échouent (chapitre 06). Si ton tableau de bord indique MySQL 8.4, demande une base MariaDB au staff.

1. Télécharger les archives #

  1. Télécharge oxmysql.zip sur https://github.com/overextended/oxmysql/releases/latest (le zip de release, pas « Source code »).
  2. Ouvre https://github.com/qbcore-fivem/txAdminRecipe, clique Code → Download ZIP. Tu y prends deux fichiers : qbcore.sql (le schéma complet) et server.cfg (à lire, pas à envoyer : il te sert de référence pour Starting Resources).
  3. Pour chaque dépôt de la liste ci-dessous, ouvre https://github.com/qbcore-fivem/<nom> et clique Code → Download ZIP.

Liste minimale pour une ville jouable (tous sur https://github.com/qbcore-fivem) :

Dépendances      : PolyZone  progressbar  interact-sound  menuv  connectqueue
Cœur et interface: qb-core  qb-menu  qb-input  qb-target  qb-smallresources  qb-weathersync
Personnage       : qb-multicharacter  qb-spawn  qb-apartments  qb-interior  qb-clothing
Inventaire/armes : qb-inventory  qb-weapons
HUD et menus     : qb-hud  qb-radialmenu  qb-scoreboard
Véhicules        : qb-vehiclekeys  qb-garages  qb-vehicleshop  qb-fuel
Économie         : qb-banking  qb-management  qb-shops  qb-phone  qb-cityhall
Métiers          : qb-policejob  qb-ambulancejob  qb-mechanicjob  qb-doorlock
Administration   : qb-adminmenu
  1. Décompresse chaque zip. Chaque archive contient un dossier d'enrobage nommé <nom>-main/ : renomme-le en <nom> (par exemple qb-core-mainqb-core). FXServer identifie une ressource par le nom de son dossier : qb-core-main ne serait pas trouvé par ensure qb-core.
  2. Vérifie que chaque dossier renommé contient un fxmanifest.lua à sa racine.

La recette complète installe une cinquantaine de qb-* (drogues, braquages, courses, jobs secondaires, maps, voix). Tu les ajouteras plus tard, un par un.

✅ À retenir : renomme xxx-main en xxx avant l'envoi. C'est l'erreur n°1 des installations QBCore à la main.

2. Déposer les ressources par SFTP #

Reprends l'organisation de la recette : quatre dossiers-catégories entre crochets dans server-data/resources/.

  1. Ouvre server-data/resources/ en SFTP. Les dossiers [system], [managers], [gameplay], [gamemodes], [local], [test] sont la base FiveM installée par AMP : ne les touche pas.
  2. Crée [standalone] et dépose dedans oxmysql, PolyZone, progressbar, interact-sound, menuv, connectqueue.
  3. Crée [qb] et dépose dedans qb-core et tous les autres qb-*.
  4. Crée [voice] et [defaultmaps] si tu installes pma-voice/qb-radio et les maps de la recette. Sinon, laisse-les de côté.
server-data/resources/
├── [system]  [managers]  [gameplay]  [gamemodes]  [local]  [test]     (base FiveM, déjà là)
├── [standalone]/
│   ├── oxmysql/  PolyZone/  progressbar/  interact-sound/  menuv/  connectqueue/
├── [qb]/
│   ├── qb-core/
│   ├── qb-multicharacter/  qb-spawn/  qb-apartments/  qb-interior/  qb-clothing/
│   ├── qb-inventory/  qb-weapons/  qb-garages/  qb-vehiclekeys/  …
│   └── qb-adminmenu/
├── [voice]/        (optionnel)
└── [defaultmaps]/  (optionnel)

Deux règles :

  • Jamais de fichier de sauvegarde dans un dossier de ressource (config.lua.bak, server.lua.old). Les manifestes qb-* chargent des motifs comme config/*.lua ou locales/*.lua : la copie serait chargée comme un vrai fichier. Range tes sauvegardes dans server-data/sauvegardes/, hors resources/.
  • Un seul inventaire, un seul système de cibles, un seul HUD. Deux ressources qui font la même chose = comportements aléatoires.

✅ À retenir : resources/[qb]/qb-core/fxmanifest.lua doit exister. Si tu vois [qb]/qb-core-main/, renomme.

3. Importer la base de données #

Le dépôt qb-core contient un qbcore.sql minimal (players, bans, player_contacts). Il ne suffit pas : garages, appartements, banque, inventaire et téléphone ont besoin de leurs tables. Le qbcore.sql de la recette les regroupe toutes : players, bans, player_vehicles, apartments, bank_accounts, bank_statements, inventories, playerskins, player_outfits, player_houses, phone_*, player_mails, player_warns, crypto, occasion_vehicles

  1. Ouvre le tableau de bord teamkit.fr → ton serveur → base de données → interface web.
  2. Connecte-toi avec l'utilisateur et le mot de passe affichés (mot de passe = ton compte AMP).
  3. Sélectionne ta base (vide) dans la colonne de gauche.
  4. Onglet Importer → choisis qbcore.sql du dossier txAdminRecipe → lance.
  5. Vérifie que players, player_vehicles, apartments et inventories apparaissent.
-- Vérification rapide (onglet SQL)
SHOW TABLES;
DESCRIBE players;

Si tu ajoutes plus tard une ressource qui a son propre fichier SQL (qb-houses/qb-houses.sql, qb-crypto/qb-crypto.sql, qb-phone/qb-phone.sql…), importe-le de la même façon. Ces fichiers utilisent CREATE TABLE IF NOT EXISTS : réimporter sur une table existante ne casse rien.

✅ À retenir : le bon fichier est txAdminRecipe/qbcore.sql, pas qb-core/qbcore.sql.

4. Renseigner la chaîne de connexion #

qb-core déclare oxmysql comme dépendance et lit la ConVar mysql_connection_string. Sur AMP TeamKit, server.cfg est regénéré à chaque démarrage : ne l'édite pas, passe par Configuration → FiveM → Additional Server Settings (une ligne par réglage).

  1. Ouvre Configuration → FiveM → Additional Server Settings.
  2. Ajoute, 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.

Les caractères ; , / ? : @ & = + $ # dans le mot de passe sont mal lus dans cette forme (avertissement de la documentation oxmysql : https://overextended.dev/oxmysql). Si le tien en contient, utilise la forme à points-virgules user=…;password=…;host=…;port=…;database=… décrite au chapitre 06.

✅ À retenir : 1045 = identifiants ou hôte faux. ECONNREFUSED = hôte ou port faux.

5. Écrire le bloc Starting Resources #

Configuration → FiveM → Starting Resources accepte n'importe quelle ligne de server.cfg. Piège d'AMP : Additional Server Settings est écrit APRÈS les ressources dans le fichier généré. Une ressource qui lit une ConVar à son démarrage ne la verrait pas. qb_locale (langue de tous les qb-*) et UseTarget (lu par qb-inventory et d'autres) sont dans ce cas. Donc : ConVars en tête, avant le premier ensure.

  1. Ouvre Configuration → FiveM → Starting Resources.
  2. Remplace le contenu par le bloc ci-dessous.
  3. Supprime les lignes des ressources que tu n'as pas déposées (connectqueue, qb-target, qb-fuel, qb-doorlock…).
  4. Enregistre.
# ===== 1. ConVars : TOUJOURS avant le premier ensure =====
setr qb_locale "fr"
setr UseTarget false
set resources_useSystemChat true

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

# ===== 3. Dépendances =====
ensure oxmysql
ensure PolyZone
ensure progressbar
ensure interact-sound
ensure menuv
ensure connectqueue

# ===== 4. Cœur et interface =====
ensure qb-core
ensure qb-menu
ensure qb-input
ensure qb-target
ensure qb-smallresources
ensure qb-weathersync

# ===== 5. Personnage (dépendances avant dépendants) =====
ensure qb-interior
ensure qb-clothing
ensure qb-spawn
ensure qb-apartments
ensure qb-multicharacter

# ===== 6. Inventaire, HUD, véhicules =====
ensure qb-weapons
ensure qb-inventory
ensure qb-hud
ensure qb-radialmenu
ensure qb-scoreboard
ensure qb-vehiclekeys
ensure qb-fuel
ensure qb-garages
ensure qb-vehicleshop

# ===== 7. Économie et métiers =====
ensure qb-banking
ensure qb-management
ensure qb-shops
ensure qb-phone
ensure qb-cityhall
ensure qb-doorlock
ensure qb-policejob
ensure qb-ambulancejob
ensure qb-mechanicjob

# ===== 8. Administration =====
ensure qb-adminmenu

Pourquoi cet ordre (dépendances lues dans les fxmanifest.lua) :

  • oxmysql avant qb-core : qb-core charge @oxmysql/lib/MySQL.lua et déclare dependency 'oxmysql'.
  • PolyZone avant qb-target et qb-garages : ils chargent @PolyZone/client.lua.
  • menuv avant qb-adminmenu : dépendance déclarée.
  • qb-core, qb-interior, qb-clothing, qb-weathersync avant qb-apartments ; qb-core et qb-spawn avant qb-multicharacter : dépendances déclarées.
  • qb-weapons avant qb-inventory : dépendance déclarée.

La recette officielle fait plus court : ensure qb-core puis ensure [qb], ensure [standalone], ensure [voice], ensure [defaultmaps]. Ça marche aussi. La liste explicite te montre ce qui tourne et te laisse retirer une ressource en supprimant une ligne.

UseTarget : false = interaction par touche et menus qb-menu ; true = interaction par visée avec qb-target (déposé et démarré). Choisis maintenant et n'en change plus.

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

  • Enforce Game Build : la recette QBCore utilise 3095. Le défaut AMP 1604 est trop ancien. Choisis 3095 ou plus, puis n'en change plus.
  • OneSync Mode : On.
  • Player Limit : 32 pour commencer.

✅ À retenir : ConVars en haut, oxmysql avant qb-core, qb-core avant tous les qb-*. Redémarre l'instance après chaque changement de Configuration.

6. Créer le premier admin #

QBCore utilise trois niveaux : god, admin, mod (QBCore.Config.Server.Permissions dans qb-core/config.lua). Ils sont des principals ACE nommés qbcore.god, qbcore.admin, qbcore.mod, et QBCore vérifie les droits avec IsPlayerAceAllowed. Guide officiel : https://qbcore.org/docs/guides/setting-permissions. Sur AMP, ces lignes 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 et copie la valeur license: (40 caractères hexadécimaux).
  3. Ouvre Configuration → FiveM → Access Control Commands et colle ce bloc, en remplaçant XXXX :
add_ace group.admin command allow
add_ace resource.qb-core command allow
add_ace qbcore.god command allow
add_principal qbcore.god group.admin
add_principal qbcore.god qbcore.admin
add_principal qbcore.admin qbcore.mod
add_principal identifier.license:XXXX qbcore.god

Ligne par ligne : resource.qb-core command allow autorise qb-core à exécuter des commandes ; qbcore.god hérite de group.admin et de qbcore.admin ; qbcore.admin hérite de qbcore.mod ; ta licence devient god.

  1. Enregistre, puis Restart sur Status. La Configuration n'est relue qu'au démarrage.
  2. Reconnecte-toi. Tape /admin : le menu de qb-adminmenu s'ouvre. Il est ouvert aux niveaux admin et god.

Pour promouvoir quelqu'un d'autre : /addpermission <id> admin (réservé à god), ou l'onglet Permissions de /admin. Pour un admin permanent, ajoute sa licence dans Access Control Commands avec qbcore.admin ou qbcore.mod.

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

7. Redémarrer et vérifier #

  1. Restart sur Status, attends « Running ».
  2. Console : oxmysql annonce sa connexion, qb-core démarre sans ligne rouge, puis chaque qb-*.
  3. Tape status : liste vide, pas d'erreur.
  4. Connecte-toi. Tu dois voir l'écran de qb-multicharacter (5 emplacements par défaut), puis la création du personnage, puis le choix d'un appartement (qb-apartments) et le spawn.
  5. En jeu, teste les commandes de qb-core : /car adder, /dv (supprime le véhicule), /setjob <id> police 0, /setmoney <id> cash 500, /tpm, /admin. Liste complète : https://qbcore.org/docs/qb-core/commands.
  6. F8 côté client : aucune erreur rouge.

Lignes rouges fréquentes à ce stade :

  • Couldn't find resource qb-core → dossier qb-core-main pas renommé, ou déposé un niveau trop bas.
  • 1045 / ECONNREFUSED → chaîne de connexion.
  • Table 'xxx.player_vehicles' doesn't exist → mauvais qbcore.sql importé (voir étape 3).
  • /admin muet → menuv absent ou démarré après qb-adminmenu, ou licence fausse.

✅ À retenir : console propre + écran multi-personnage = QBCore est installé.

8. Ajouter les premiers scripts essentiels #

Inventaire #

Sur QBCore, garde qb-inventory (déjà dans ton bloc) : l'inventaire officiel, à jour (v2), qui lit UseTarget et se règle dans config/config.lua. Il dépend de qb-weapons. Sa table inventories vient du qbcore.sql de la recette.

ox_inventory n'annonce pas QBCore parmi ses frameworks supportés (sa liste : ox_core, esx, qbox, nd_corehttps://github.com/overextended/ox_inventory). Si tu veux l'écosystème ox, le bon chemin est Qbox, chapitre 05, pas un QBCore bricolé.

Garage #

qb-garages (déjà dans ton bloc) : garages publics, de métier, de gang et fourrière. Il charge @PolyZone/client.lua (donc PolyZone avant lui) et écrit dans player_vehicles. Emplacements dans son config.lua (takeVehicle, spawnPoint, putVehicle). Il travaille avec qb-vehicleshop (achat) et qb-vehiclekeys (clés).

Métiers #

Métier Ressource S'appuie sur (lu dans son code)
Police qb-policejob qb-core, qb-menu, qb-target (si UseTarget true), qb-inventory
Ambulance qb-ambulancejob qb-core, qb-menu, qb-target, qb-inventory
Mécano qb-mechanicjob qb-core, qb-menu, qb-target, qb-inventory

Les métiers, grades et salaires sont définis dans qb-core/shared/jobs.lua, les objets dans shared/items.lua, les véhicules dans shared/vehicles.lua. Après une modification : refresh puis restart qb-core en console.

Pour continuer, dans la recette : qb-taxijob, qb-busjob, qb-garbagejob, qb-truckerjob, qb-towjob (jobs sans whitelist), qb-houses (import qb-houses.sql), qb-prison (avec prison_map). La recette ajoute aussi pma-voice et qb-radio dans [voice] : pma-voice est un projet tiers, lis sa page GitHub et mets ses setr voice_* en tête de Starting Resources.

✅ À retenir : un script à la fois, dépendances d'abord, Restart entre chaque.

✅ Checklist du chapitre #

❓ Si ça ne marche pas #

*Couldn't find resource qb-core (ou un autre `qb-).** Le dossier s'appelle encoreqb-core-main, ou il est dans[qb]/qb-core-main/qb-core/. Renomme et remonte par SFTP, puisrefreshetensure qb-core` 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.

Le jeu est en anglais alors que j'ai mis qb_locale "fr". La ligne est dans Additional Server Settings (écrit trop tard) au lieu de Starting Resources, ou tu n'as pas redémarré l'instance. Il faut setr, pas set : la ConVar est lue côté client.

/admin ne fait rien, ou « pas la permission ». Licence fausse (recopie-la depuis la console à ta connexion), instance pas redémarrée après l'ajout, ou menuv absent. Vérifie les trois.

Erreur SQL doesn't exist sur player_vehicles, apartments ou inventories. Tu as importé le qbcore.sql de qb-core (3 tables) au lieu de celui de txAdminRecipe. Importe le bon par-dessus : ses CREATE TABLE IF NOT EXISTS ne touchent pas aux tables existantes.

*Une ressource `qb-plante côté client (F8 rouge) après une modification.** Cherche une chaîne Lua'...'coupée par un retour à la ligne dans le fichier modifié, ou un.bakoublié dansconfig/oulocales/que le manifeste charge en*.lua`.

Pour le reste (No such export, streaming, MLO, serveur invisible dans la liste), 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.