Cómo instalar la base ESX en un servidor FiveM desde cero
Guía técnica para instalar la base ESX en servidor FiveM: dependencias, base MySQL, orden de ensure en server.cfg y verificación.
ESX es el framework de roleplay dominante en FiveM hispanohablante. A pesar de que existen alternativas (QBCore, Ox Core, vRP), la mayoría de los scripts comerciales y gratuitos del mercado presuponen ESX instalado — entonces saber montar la base limpia, sin deuda técnica acumulada de tutoriales antiguos, es el punto de partida para cualquier servidor que pretenda crecer.
Esta guía cubre la instalación de es_extended 1.10+ con oxmysql como driver de base de datos, ox_lib como biblioteca base y ox_inventory como inventario. Es el stack moderno mantenido activamente en 2026 — distinto de los tutoriales de 2020-2022 que aún recomiendan mysql-async y esx_inventoryhud.
Tiempo estimado de ejecución: 30 a 45 minutos para quien ya tiene el servidor FiveM en funcionamiento. Si todavía necesitas instalar txAdmin y levantar el artifact de FXServer, reserva una hora extra.
Prerrequisitos
Servidor FiveM ya en funcionamiento (txAdmin recomendado), MySQL 8.0+ o MariaDB 10.6+ instalado y accesible, acceso SSH al servidor (o panel de gestión), licencia gratuita de FiveM (cfx.re/keymaster) y aproximadamente 200 MB libres para los recursos.
Antes de descargar cualquier cosa, confirma que el servidor base arranca limpio — sin ESX todavía, solo el FXServer puro. Conecta vía cliente FiveM a la IP del servidor y verifica que entras al mapa por defecto sin error de conexión. Si ya hay problemas en este punto, resuélvelos primero: ESX amplificará cualquier inestabilidad de la capa inferior.
Ten a mano los datos de conexión de la base:
127.0.0.1 3306 utf8mb4 esx_server Preparar la base de datos
ESX usa MySQL para persistir jugadores, inventario, vehículos, empleos y todo lo que necesita sobrevivir a un reinicio. La primera acción es crear la base con el charset correcto — utf8mb4 no es negociable, los scripts modernos esperan soporte completo a 4 bytes (emojis, caracteres asiáticos, símbolos especiales usados en RP).
Conéctate a MySQL como usuario con privilegio para crear database:
mysql -u root -pCrea la base y un usuario dedicado para el servidor (no uses root en producción):
CREATE DATABASE esx_server CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'esx_user'@'localhost' IDENTIFIED BY 'ContrasenaFuerteAqui123!';
GRANT ALL PRIVILEGES ON esx_server.* TO 'esx_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;Anota la contraseña — entrará en el server.cfg a continuación.
Descarga oxmysql del repositorio oficial de Overextended. Entra al directorio de recursos de tu servidor FiveM (generalmente server-data/resources/):
cd server-data/resources/
git clone https://github.com/overextended/oxmysql.git [standalone]/oxmysqlEl wrap [standalone] es una convención de FiveM para agrupar recursos sin dependencia entre sí. Crea la carpeta antes si no existe.
Agrega la cadena de conexión a tu server.cfg, antes de cualquier ensure de recurso que use base de datos:
set mysql_connection_string "mysql://esx_user:ContrasenaFuerteAqui123!@localhost/esx_server?charset=utf8mb4"
ensure oxmysqlReinicia el servidor y verifica en la consola si aparece [oxmysql] Database server connection established!. Si aparece error de autenticación, revisa usuario/contraseña; error de host, confirma que MySQL está escuchando en 127.0.0.1.
Instalar ox_lib y es_extended
Con la base respondiendo, sigue la base del framework. ox_lib es una biblioteca de utilidades (UI, callbacks, locale, cache) que el ESX moderno y la mayoría de los scripts actuales requieren como dependencia declarada en el manifest.
Descarga ox_lib (build más reciente del release oficial):
cd server-data/resources/[standalone]/
git clone https://github.com/overextended/ox_lib.gitA diferencia de scripts simples, ox_lib tiene un build de UI compilado — siempre descarga desde el release etiquetado, no desde la rama main, para evitar un build roto.
Crea la carpeta [esx] para agrupar todos los recursos del framework. Esto facilita la ordenación en server.cfg vía ensure [esx] en algunos setups:
mkdir -p server-data/resources/\[esx\]
cd server-data/resources/\[esx\]
git clone https://github.com/esx-framework/esx_core.gitesx_core es el monorepo oficial — contiene es_extended, esx_menu_default, esx_menu_dialog, esx_menu_list y otros recursos auxiliares en una estructura única.
Importa el schema SQL de es_extended a la base. Dentro de esx_core/es_extended/, existe el archivo es_extended.sql (o a veces está en esx_core/setup.sql dependiendo de la versión):
mysql -u esx_user -p esx_server < server-data/resources/\[esx\]/esx_core/\[core\]/es_extended/install.sqlEste script crea las tablas users, user_accounts, user_inventory, jobs, job_grades, addon_account, items y seeders básicos. Sin él, el servidor arranca pero cualquier llamada a la base se rompe.
La estructura interna de esx_core cambió entre versiones. En algunos releases el SQL está en [core]/es_extended/install.sql, en otros directamente en es_extended/install.sql. Busca con find . -name "*.sql" dentro de esx_core antes de ejecutar.
Configurar el server.cfg
El orden de ensure define qué se inicia primero. ESX es sensible a esto — recursos que llaman a ESX.GetPlayerFromId() antes de que el framework termine de inicializar retornan nil silenciosamente y el jugador se vuelve un fantasma. La regla es simple: drivers de bajo nivel primero, biblioteca después, framework a continuación, recursos consumidores al final.
Edita server.cfg y agrega el bloque ESX en el orden correcto, después del oxmysql que ya está configurado:
# Base (ya configurada anteriormente)
set mysql_connection_string "mysql://esx_user:ContrasenaFuerteAqui123!@localhost/esx_server?charset=utf8mb4"
ensure oxmysql
# Biblioteca base
ensure ox_lib
# Framework ESX (el orden importa)
ensure es_extended
ensure esx_menu_default
ensure esx_menu_dialog
ensure esx_menu_list
ensure esx_notify
ensure esx_textui
ensure esx_progressbars
# Inventario (después del framework)
ensure ox_inventoryGuarda el archivo y reinicia el servidor por completo (restart en la consola del FXServer no es suficiente — detén y vuelve a iniciar).
Instala ox_inventory, que reemplaza el inventario por defecto de ESX:
cd server-data/resources/[standalone]/
git clone https://github.com/overextended/ox_inventory.gitox_inventory trae integración nativa con es_extended vía bridge automático — no necesitas configurar Config.Framework en versiones recientes, detecta ESX en ejecución y se conecta solo. Solo asegúrate de que ensure ox_inventory esté después de ensure es_extended en el cfg.
Si ejecutas más de un framework en el mismo servidor (raro, pero ocurre en setups híbridos), fuerza el bridge editando ox_inventory/data/init.lua y definiendo framework = 'esx' explícitamente. En servidor ESX puro, déjalo automático.
Verificar la instalación
Arrancar sin error en la consola es la mitad del trabajo — el otro lado es confirmar que el framework realmente funciona en runtime, con un jugador conectado.
Inicia el servidor y observa la consola. Debes ver, en este orden aproximado:
[oxmysql] Database server connection established!
Started resource ox_lib
Started resource es_extended
[es_extended] ESX has started successfully!
Started resource ox_inventorySi alguno de estos falta, el recurso anterior se trabó. Busca líneas en rojo o amarillo en la consola — generalmente traen el motivo (sql syntax error en install, dependency missing en manifest, etc).
Conéctate al servidor con tu cliente FiveM. Abre la consola F8 in-game y escribe:
/setjob mecanico bossEste comando viene con es_extended por defecto y asigna el job mecanico (grade boss) al jugador. Si ESX está vivo, recibes notificación visual de cambio de empleo. Si no pasa nada y la consola F8 muestra error de comando inexistente, es_extended no cargó — vuelve y revisa el orden de ensure.
Resolución de problemas comunes
Error attempt to index a nil value (global 'ESX')
Significa que un script intentó usar ESX = exports['es_extended']:getSharedObject() antes de que el framework terminara de cargar. Ocurre en client scripts mal escritos. Solución: envuelve la inicialización del client en un loop de espera:
ESX = nil
CreateThread(function()
while ESX == nil do
ESX = exports['es_extended']:getSharedObject()
Wait(0)
end
end)
Este patrón es el oficial recomendado por el equipo de ESX desde la versión 1.10.
El jugador entra pero el inventario queda vacío
Verifica si la tabla users tiene registro para el identificador Steam/license del jugador. Si no lo tiene, ox_inventory no puede cargar slots. Solución: asegúrate de que ensure es_extended esté antes de ensure ox_inventory y que la base esté respondiendo (sin error de conexión en la consola).
La consola muestra oxmysql was unable to establish a connection
La cadena de conexión está mal. Causas comunes: contraseña con carácter especial sin escape (usa contraseña alfanumérica simple o escapa con %XX), MySQL escuchando solo en socket Unix y no en TCP 127.0.0.1 (edita bind-address en my.cnf), firewall bloqueando 3306 localmente (raro pero ocurre en servidor con UFW configurado agresivo).
Si estás probando en VPS, jamás abras el puerto 3306 en el firewall externo. ESX y oxmysql conectan en 127.0.0.1 (localhost) — la base no necesita estar accesible desde afuera. Una base MySQL expuesta en internet es un vector garantizado de intrusión.
Próximos pasos
Con la base ESX en funcionamiento, el servidor está listo para recibir la capa de gameplay. Sugerencias para continuar:
- Empleos y bandas: agrega
esx_jobs,esx_society,esx_billingpara completar la economía base. Edita el seederjobsen la base para crear empleos custom de tu RP. - MDT y sistema policial: integra
mdt-fivemo similar — depende deoxmysqlyes_extendedya en ejecución, por eso la base que acabas de montar es prerrequisito. - Loadouts y armas: configura
Config.EnablePVPenes_extended/config.luay usaox_inventorypara controlar permisos de armas por job. - Persistencia de vehículos: instala
esx_vehicleshoppara concesionaria y activa el spawn de garaje conesx_garageoqb-garages-esx-bridge. - Rendimiento: usa el profiler del FXServer (
profiler record 1000, luegoprofiler view) para medir el tick de cada recurso. Por encima de 1ms por resource en loop, refactoriza o reemplaza.
Si estás poniendo el servidor en producción con más de 32 slots, una máquina dedicada al FiveM vale la inversión — el tick rate cae sensiblemente cuando el servidor compite con web, base y otras cargas en el mismo host. Los planes de hospedaje de juegos de Hostini ya vienen con CPU aislada y NVMe local, que es exactamente el perfil que ESX prefiere bajo carga real.
Preguntas frecuentes
¿Qué versión de ESX debo instalar en 2026?
Usa es_extended 1.10.x o superior — es la línea mantenida por ESX Framework Org en GitHub. Las versiones 1.2 y anteriores (ESX Legacy original) están obsoletas y dependen de mysql-async, que fue descontinuado en favor de oxmysql. No descargues forks aleatorios de creadores desconocidos para la base.
¿Necesito usar oxmysql o puedo continuar con mysql-async?
Usa oxmysql. mysql-async no recibe actualizaciones desde hace más de dos años y tiene una fuga de conexiones conocida bajo carga. oxmysql utiliza el driver oficial de MySQL con prepared statements, lo mantiene Overextended y es lo que el es_extended moderno espera en el manifest. Migrar después cuesta más que comenzar bien.
¿Por qué el servidor arranca pero ESX:GetPlayerFromId retorna nil?
Casi siempre es el orden de ensure en server.cfg. oxmysql debe iniciarse antes que es_extended, y es_extended debe iniciarse antes de cualquier recurso que llame a ESX. Si un script intenta acceder al jugador antes de que el framework termine de cargar, retorna nil. Revisa el orden de los ensure y agrega una verificación while ESX == nil do Wait(0) end en el client.
¿ox_inventory o esx_inventoryhud — cuál usar?
ox_inventory. Es más ligero, tiene soporte activo, se integra nativamente con el es_extended moderno y cubre slots, hotbar, drops y crafting. El antiguo esx_inventoryhud depende de recursos legacy y tiene inconsistencias en el conteo de slots entre client y server. Comienza con ox_inventory aunque la curva inicial sea mayor.
¿Puedo usar MariaDB en lugar de MySQL?
Sí. MariaDB 10.6+ es compatible con el driver de oxmysql y en muchos casos rinde mejor bajo la carga concurrente típica de RP. El schema de es_extended (es_extended.sql) se importa sin ajustes. La única atención es mantener el charset utf8mb4 y collation utf8mb4_unicode_ci en la base — algunos scripts de creadores guardan emojis en campos de chat y se rompen con un charset menor.
¿Cuántos jugadores soporta un servidor con la base ESX?
La base ESX consume muy poco — alrededor de 0.05ms de tick en el server thread con 64 jugadores. El verdadero cuello de botella viene de los recursos adicionales (jobs, MDT, inventario, scripts de creadores mal optimizados). Un servidor con 8 vCPUs dedicadas y SSD NVMe sostiene 64-128 jugadores sin problemas si el resto del conjunto está bien escrito.