Cómo crear un servidor FiveM RP con QBCore en Ubuntu 24.04
Guía técnica paso a paso para instalar un servidor FiveM RP con QBCore en VPS Ubuntu 24.04: artifacts, MariaDB, txAdmin y configuración inicial del framework.
Requisitos previos
Antes de comenzar, confirma que tienes el entorno mínimo necesario. FiveM consume bastante RAM (cada jugador ocupa en promedio 60–80 MB en el proceso del servidor), así que no intentes ejecutarlo con menos de 4 GB.
VPS Ubuntu 24.04 LTS con mínimo 4 GB de RAM, 2 vCPUs y 30 GB de disco. Acceso SSH con usuario sudo, puerto 30120 (TCP+UDP) abierto en el firewall y una clave de licencia gratuita generada en keymaster.fivem.net.
30120 TCP+UDP 40120 TCP 4 GB MariaDB 10.11+ Preparando el sistema base
El servidor FiveM headless se distribuye como binario Linux estático, pero depende de algunas bibliotecas del sistema. Comienza actualizando los paquetes e instalando las dependencias.
Actualiza el índice de paquetes e instala las dependencias básicas:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget xz-utils git screen tmux ufw build-essentialscreen y tmux sirven para mantener el proceso del servidor activo después de desconectarte de la sesión SSH — FiveM no tiene daemon nativo.
Crea un usuario dedicado para el servidor. Ejecutar FiveM como root es mala práctica y txAdmin lo advierte explícitamente:
sudo adduser --disabled-password --gecos "" fivem
sudo usermod -aG sudo fivem
sudo su - fivemA partir de aquí, todos los comandos se ejecutan como el usuario fivem, salvo cuando se indica con sudo.
Configura el firewall abriendo SSH, FiveM y txAdmin:
sudo ufw allow 22/tcp
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw allow 40120/tcp
sudo ufw --force enableEl puerto UDP 30120 es el crítico — es por donde pasa el tráfico real del juego. TCP 30120 se usa para el handshake inicial y la lista de servidores.
Instalando MariaDB y creando la base de datos
QBCore depende intensamente de una base SQL — prácticamente todo recurso (inventario, trabajos, vehículos, propiedades) persiste mediante oxmysql. MariaDB es la opción estándar de la comunidad por compatibilidad y rendimiento con cargas de muchas escrituras cortas.
Instala MariaDB y ejecuta el asistente de seguridad:
sudo apt install -y mariadb-server mariadb-client
sudo systemctl enable --now mariadb
sudo mariadb-secure-installationResponde Y a todas las preguntas excepto la primera (switch to unix_socket) — deja N para mantener compatibilidad con autenticación por contraseña, que es lo que oxmysql espera.
Crea la base de datos y el usuario de QBCore:
sudo mariadb -u root -pDentro del prompt SQL:
CREATE DATABASE qbcore CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'qbuser'@'localhost' IDENTIFIED BY 'cambiaEstaContraseñaFuerte123!';
GRANT ALL PRIVILEGES ON qbcore.* TO 'qbuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;Usa una contraseña real (genera con openssl rand -base64 24) — esta cadena irá en el server.cfg en texto plano.
El QBCore moderno usa emojis en el chat y en algunos nombres de ítems. Si creas la base con utf8 o latin1, los recursos fallarán con errores de “Incorrect string value” en cuanto se inserte un carácter de 4 bytes.
Descargando los artifacts de FiveM
Los artifacts son el binario del servidor FiveM. CFX Re publica builds recommended y optional regularmente — usa siempre la recommended salvo que necesites una función específica.
Crea la estructura de directorios y descarga la versión recommended actual:
mkdir -p ~/server ~/server-data
cd ~/server
wget https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/15295-de1d8a35434f0f2b5b8bcae93e9eb8f6e4a7df14/fx.tar.xz
tar xf fx.tar.xz
rm fx.tar.xzLa URL cambia con cada build. Obtén la actual en runtime.fivem.net/artifacts/fivem/build_proot_linux/master/ y copia el enlace de la última carpeta marcada como LATEST RECOMMENDED.
Clona el template inicial de server-data (recursos cfx por defecto):
cd ~/server-data
git clone https://github.com/citizenfx/cfx-server-data.git .Este repositorio solo trae la estructura mínima — reemplazaremos los recursos por QBCore en la siguiente sección.
Instalando el framework QBCore
QBCore no es un único repositorio — es una colección de recursos (qb-core, qb-multicharacter, qb-spawn, qb-inventory, etc.) que residen en carpetas separadas dentro de resources/. El equipo mantenedor consolidó todo en la organización qbcore-framework en GitHub.
Crea la estructura de carpetas y clona el paquete principal:
cd ~/server-data/resources
mkdir -p [qb]
cd [qb]
git clone https://github.com/qbcore-framework/qb-core.git
git clone https://github.com/qbcore-framework/qb-multicharacter.git
git clone https://github.com/qbcore-framework/qb-spawn.git
git clone https://github.com/qbcore-framework/qb-inventory.git
git clone https://github.com/qbcore-framework/qb-target.git
git clone https://github.com/qbcore-framework/qb-menu.git
git clone https://github.com/qbcore-framework/qb-input.gitLos corchetes en [qb] no son un error — es una convención de FiveM para agrupar recursos. El servidor carga todos los recursos dentro de carpetas entre corchetes de forma recursiva.
Instala oxmysql, que reemplaza al antiguo mysql-async:
cd ~/server-data/resources
mkdir -p [standalone]
cd [standalone]
git clone https://github.com/overextended/oxmysql.gitQBCore depende de oxmysql declarado en fxmanifest.lua — sin él, ningún recurso arranca.
Importa el schema SQL de QBCore en la base de datos. El archivo de schema viene dentro de qb-core:
mariadb -u qbuser -p qbcore < ~/server-data/resources/[qb]/qb-core/qb-core.sqlEscribe la contraseña que definiste en el Step 05. Esta importación crea las tablas players, bans, permissions, player_vehicles, entre otras — unas 25 tablas en total.
Configurando el server.cfg
El server.cfg es el punto de entrada del servidor: define el hostname, los recursos a cargar, la conexión con la base de datos y la licencia CFX.
Edita el archivo principal de configuración:
nano ~/server-data/server.cfgSustituye el contenido por esta plantilla:
# Endpoints
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"
# Conexión con la base de datos (oxmysql)
set mysql_connection_string "mysql://qbuser:cambiaEstaContraseñaFuerte123!@localhost/qbcore?charset=utf8mb4"
# Recursos base
ensure oxmysql
ensure qb-core
ensure qb-multicharacter
ensure qb-spawn
ensure qb-inventory
ensure qb-target
ensure qb-menu
ensure qb-input
# Configuración del servidor
sv_hostname "Mi Servidor RP | QBCore"
sv_maxclients 48
sv_licenseKey "PEGA_TU_CLAVE_DEL_KEYMASTER_AQUÍ"
sv_endpointprivacy true
# Admin inicial (reemplaza por tu identifier tras la primera conexión)
add_ace group.admin command allow
add_principal identifier.license:TU_LICENSE_IDENTIFIER group.adminLa license key es gratuita en keymaster.fivem.net — necesitas registrar la IP de la VPS allí para generarla.
La license key y la contraseña de la base de datos están en texto plano. Si versionas este archivo en GitHub, cualquier persona puede secuestrar tu servidor y vaciar tu base de datos en minutos.
Iniciando el servidor con txAdmin
txAdmin ya viene integrado en los artifacts modernos de FiveM — no es necesario instalarlo por separado. Ofrece interfaz web para logs, consola remota, gestión de jugadores y base de datos.
Inicia el servidor en una sesión screen para que continúe ejecutándose tras desconectarte:
screen -S fivem
cd ~/server-data
bash ~/server/run.sh +set serverProfile defaultEn la primera ejecución, txAdmin imprime una URL en la consola con el formato http://TU_IP:40120/addMaster/pin?pin=XXXX. Ábrela en el navegador, define la contraseña de admin y apunta la ruta de server-data a /home/fivem/server-data.
Para desconectarte del screen sin matar el proceso: Ctrl+A seguido de D.
Desde el panel web de txAdmin, haz clic en “Start Server”. Sigue la pestaña Console — deberías ver líneas como:
[script:oxmysql] Database server connection established!
[script:qb-core] QBCore Started Successfully
Resource oxmysql started
Resource qb-core startedSi aparece error de conexión con la base de datos, revisa la mysql_connection_string en server.cfg. Si el error indica license key inválida, regenera en keymaster con la IP correcta.
Verificación
Conéctate desde el cliente FiveM usando F8 en el juego:
connect TU_IP_DE_VPS:30120
Deberías llegar a la pantalla de selección de personajes de qb-multicharacter. Crea un personaje de prueba — si la creación persiste y apareces en el centro de Los Santos, todo el stack funciona correctamente: artifacts, base de datos, oxmysql y QBCore.
En el servidor, confirma las conexiones activas:
ss -tunlp | grep -E '30120|40120'
Debe listar dos líneas: una TCP 30120 y una UDP 30120, ambas en estado LISTEN.
Resolución de problemas
Error “Couldn’t load resource qb-core”
Casi siempre es un problema de dependencia. Confirma que oxmysql está clonado en resources/[standalone]/oxmysql y que aparece antes que qb-core en el orden de ensure del server.cfg.
El servidor no aparece en la lista pública
Revisa sv_endpointprivacy — si está en true, el servidor es invisible en la lista pero acepta conexiones directas. Para listarlo públicamente, cámbialo a false y añade sv_projectName y sv_projectDesc.
Los jugadores se desconectan con “Failed handshake to server”
Casi siempre es el puerto UDP 30120 bloqueado. Confirma con sudo ufw status que la regla UDP existe. Si estás detrás de NAT, asegúrate de que el reenvío UDP también esté configurado en el router o proveedor.
txAdmin guarda los logs en ~/.fxserver/. Para un debug más profundo, ejecuta el servidor sin txAdmin mediante run.sh +exec server.cfg y lee la consola en tiempo real — algunos errores de Lua solo aparecen en ese modo.
Próximos pasos
Con el servidor básico en marcha, vale la pena evolucionar en estas direcciones:
- Añadir recursos opcionales de QBCore:
qb-policejob,qb-ambulancejob,qb-houses,qb-vehicleshop— todos en el mismo GitHubqbcore-framework. - Configurar backup automatizado de la base de datos con
mariadb-dumpen cron diario, guardando en almacenamiento externo. - Migrar del qb-inventory antiguo a
ox_inventory, que tiene un rendimiento significativamente mejor con 30+ jugadores en línea. - Estudiar el sistema de trabajos y bandas de qb-core para personalizar la economía y los roles de tu RP.
Si estás planificando abrir el servidor al público, una VPS Hostini ofrece baja latencia en PoPs latinoamericanos y el ancho de banda necesario para los picos de UDP de FiveM — factor crítico cuando superas los 32 jugadores simultáneos.
Preguntas frecuentes
¿Cuánta RAM necesito para ejecutar un servidor FiveM QBCore?
Para hasta 32 jugadores con QBCore base, 4 GB de RAM son suficientes. Con más de 32 jugadores o con recursos pesados como ox_inventory, qb-houses y múltiples trabajos activos, se recomiendan 8 GB. Cada jugador consume entre 60 y 80 MB en el proceso del servidor, y MariaDB requiere al menos 512 MB dedicados bajo carga.
¿QBCore es mejor que ESX en 2025?
QBCore tiene un desarrollo más activo, mejor estructura de exports y un ecosistema de recursos más moderno — incluyendo integración nativa con ox_lib y ox_inventory. ESX aún tiene más contenido legado disponible, pero la mayoría de los proyectos nuevos optan por QBCore o por el fork Qbox, que es una evolución optimizada de QBCore.
¿Puedo ejecutar FiveM QBCore en Windows en lugar de Linux?
Sí, los artifacts de FiveM tienen versión Windows y la mayoría de los tutoriales antiguos usan Windows Server. Sin embargo, Linux consume menos RAM en reposo, soporta mejor las cargas de UDP de alta frecuencia y tiene coste de licenciamiento cero. Para producción, Linux es la opción estándar de la comunidad competitiva.
¿Por qué mi servidor FiveM se cuelga después de unas horas?
Las tres causas más comunes son: memory leak en algún recurso de terceros (identificable en la consola con aviso de high resmon), conexiones zombie en MariaDB (resuélvelo con un pool_size adecuado en oxmysql) y falta de swap en Linux. Configura al menos 2 GB de swap aunque te sobre RAM — el kernel Linux lo usa para caché de I/O.
¿Necesito comprar la clave de licencia de FiveM?
No. La license key del servidor (sv_licenseKey) es completamente gratuita y se genera en keymaster.fivem.net. Lo que es de pago es el Element Club, una suscripción opcional que aumenta el límite máximo de jugadores (de 48 por defecto hasta 2048) y desbloquea funcionalidades cosméticas adicionales.
¿Cómo hago backup automático de la base de datos QBCore?
Usa mariadb-dump en cron diario: `mariadb-dump -u qbuser -pCONTRASEÑA qbcore | gzip > /backup/qbcore-$(date +%F).sql.gz`. Idealmente, copia el archivo a almacenamiento externo mediante rsync o rclone — un backup en el mismo disco del servidor no protege contra fallo de hardware ni contra comprometimiento de la VPS.