Lista de verificación rápida para la configuración de Docker de FiveM
Una configuración útil de Docker mantiene los datos de txAdmin persistentes, expone los puertos correctos y hace que las actualizaciones sean reversibles.
- Usa Docker Compose v2 y monta por bind-mount txData o el directorio de datos de tu servidor.
- Expón 30120 TCP/UDP para FiveM y 40120 solo donde se requiera acceso a txAdmin.
- Haz una copia de seguridad de server.cfg, resources, txData y los datos de la base de datos antes de cambiar artifacts o imágenes.
Rutas de tienda relacionadas: Paquetes de servidor | Scripts FiveM | Herramientas de administración
Ejecuta un servidor FiveM (FXServer) en Docker con esta guía de copia y pega: una imagen mínima, compose.yaml usando la spritsail/fivem mapeo de puertos correcto para 30120 (TCP+UDP) y 40120 (txAdmin), montajes persistentes para server.cfg, recursos y datos de txAdmin, manejo de la clave de licencia y pasos seguros de actualización y retroceso.
Resumen
- Instala Docker Engine + Docker Compose v2 en Ubuntu. (Documentación de Docker)
- Crea una carpeta de proyecto, agrega
.env(setLICENSE_KEY,SERVER_NAME, puertos) y uncompose.yaml. - Comienza con
docker compose up -d; monitorea los registros condocker compose logs -f. - Editar
data/server.cfg(hostname, endpoints, resources); reinicia el contenedor. - Abre el firewall para 30120/TCP+UDP y 40120/TCP (txAdmin). El puerto predeterminado de txAdmin es 40120. (Documentación de Cfx.re)
- Siempre ejecuta el contenedor con stdin/tty habilitado para evitar bloqueos. (GitHub)
Prerrequisitos
- Sistema operativo: Linux Ubuntu 22.04+ (notas para macOS/Windows abajo).
- Hardware: 2+ vCPU, 4–8 GB de RAM (más para recursos pesados), Unidad de estado sólido recomendado.
- Docker: Instalar Docker Engine y Compose v2 desde la documentación oficial. (Documentación de Docker)
- Clave de licencia FiveM: Generar en el portal Cfx.re (Keymaster). Mantenerla en secreto. (soporte.cfx.re)
- Firewall/NAT: Capacidad de abrir/reenviar puertos 30120 (TCP+UDP) y opcionalmente 40120 (TCP). (Documentación de Cfx.re)
- (Opcional) Un dominio/subdominio para txAdmin.
Descripción general de la arquitectura
Un contenedor ejecuta Servidor FX usando la spritsail/fivem Los datos están montados por enlace persistir server.cfg, recursos y registros. Los puertos 30120/TCP+UDP están expuestos a los jugadores; 40120/TCP expone txAdmin cuando está habilitado. Una comprobación de estado puede sondear http://127.0.0.1:30120/info.json. (GitHub)
+-------------------- Docker Host (Ubuntu) --------------------+ | /home/fivem/data --> /config (in container) | | /home/fivem/txData --> /txData (txAdmin data) | | | | Exposed: 30120/tcp+udp [FXServer] | 40120/tcp [txAdmin] | | Healthcheck: GET 127.0.0.1:30120/info.json | +-------------------------------------------------------------+
Inicio rápido (copiar y pegar)
1) Crear una carpeta de proyecto
# Optional: dedicated system user and directories
sudo useradd -r -m -d /home/fivem -s /usr/sbin/nologin fivem || true
sudo mkdir -p /home/fivem/{data,txData}
sudo chown -R "$USER":"$USER" /home/fivem
cd /home/fivem
2) Crear .env
cat > .env <<'EOF' # === REQUIRED === LICENSE_KEY=REPLACE_WITH_YOUR_CFX_KEY # Convenience (used by ports mapping below) FXSERVER_PORT=30120 TXADMIN_PORT=40120 # Not read by the image directly; use it when editing server.cfg SERVER_NAME="My Docker FiveM" # Optional: if omitted, default config generation sets a random RCON password RCON_PASSWORD= EOF
3) Mínimo compose.yaml (fijar una etiqueta)
Configuración funcional más pequeña usando la imagen upstream. Usa tty+stdin para evitar el bloqueo. (GitHub)
# compose.yaml
services:
fivem:
image: spritsail/fivem:stable
container_name: fivem
environment:
- LICENSE_KEY=${LICENSE_KEY}
# Optional toggles (see table below):
# - NO_DEFAULT_CONFIG=1 # required if you want to use txAdmin
# - NO_LICENSE_KEY=1 # if you put the key in server.cfg instead
# - NO_ONESYNC=1 # disable OneSync in default config
# - RCON_PASSWORD=${RCON_PASSWORD}
volumes:
- ./data:/config # server.cfg, resources, logs
ports:
- "${FXSERVER_PORT}:30120/tcp"
- "${FXSERVER_PORT}:30120/udp"
tty: true # prevent startup crash (equiv. to -t)
stdin_open: true # prevent startup crash (equiv. to -i)
restart: unless-stopped
Iniciarlo:
docker compose up -d docker compose logs -f
4) Variante extendida (txAdmin, healthcheck, límites)
# compose.extended.yaml
services:
fivem:
image: spritsail/fivem:stable
container_name: fivem
environment:
- LICENSE_KEY=${LICENSE_KEY}
- NO_DEFAULT_CONFIG=1 # enable txAdmin (no default +exec)
# - NO_LICENSE_KEY=1 # if storing key in server.cfg
# - RCON_PASSWORD=${RCON_PASSWORD}
volumes:
- ./data:/config
- ./txData:/txData # persist txAdmin data
ports:
- "${FXSERVER_PORT}:30120/tcp"
- "${FXSERVER_PORT}:30120/udp"
- "${TXADMIN_PORT}:40120/tcp" # txAdmin Web UI (default 40120)
tty: true
stdin_open: true
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:30120/info.json >/dev/null 2>&1"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
# Basic resource knobs for standalone Compose (not Swarm 'deploy')
cpus: 2
mem_limit: "6g"
ulimits:
nofile:
soft: 1048576
hard: 1048576
restart: unless-stopped
Si
wgetno está disponible en la imagen, elimina el healthcheck o reemplázalo con una sonda TCP. txAdmin persiste bajo/txData, el puerto 40120 es su valor predeterminado. (GitHub)
Configuración y Persistencia
- En la primera ejecución, los valores predeterminados se escriben en el montaje bind
./data(ruta del contenedor/config). Edita./data/server.cfgy reinicia el contenedor. (GitHub)
Típico server.cfg bits:
# data/server.cfg # Network endpoints (leave 0.0.0.0 to listen on all interfaces) endpoint_add_tcp "0.0.0.0:30120" endpoint_add_udp "0.0.0.0:30120" # Server name set sv_hostname "My Docker FiveM" # License key (use this only if NOT using LICENSE_KEY env) # sv_licenseKey "REPLACE_WITH_YOUR_CFX_KEY" # Example: ensure a basic resource # ensure chat
Estructura de directorios (anfitrión):
/home/fivem ├─ data/ -> /config (server.cfg, resources/, logs/) └─ txData/ -> /txData (txAdmin profiles & DB)
Copias de seguridad
- Copia de seguridad bind-mount:
tar -C /home/fivem -czf fivem-backup_$(date +%F).tgz data txData
- Si cambias a volúmenes con nombre, haz la copia de seguridad así:
docker run --rm -v fivem_data:/data -v "$PWD":/backup busybox sh -c 'tar -czf /backup/fivem_data_$(date +%F).tgz -C / data'
Variables de entorno (desde spritsail/fivem)
| Nombre | Objetivo | Ejemplo |
|---|---|---|
LICENSE_KEY | Requerido Clave de licencia del servidor FiveM para iniciar FXServer | LICENSE_KEY=xxxxx |
RCON_PASSWORD | Contraseña RCON utilizada al crear configuraciones predeterminadas; 16 caracteres aleatorios si no se establece | RCON_PASSWORD=strongpass |
NO_DEFAULT_CONFIG | Deshabilitar la configuración predeterminada +exec para que txAdmin pueda gestionar el servidor | 1 |
NO_LICENSE_KEY | No leer la clave del entorno; mantenerla en server.cfg | 1 |
NO_ONESYNC | Deshabilitar OneSync en configuraciones predeterminadas | 1 |
Estas variables de entorno y rutas /config, /txData, más la necesidad de -ti están definidas por la imagen upstream. (GitHub)
Secreto manejo: Prefiere
NO_LICENSE_KEY=1y colocasv_licenseKeyenserver.cfgcon permisos de archivo correctos si no deseas la clave en el entorno del contenedor. (GitHub)
Redes y Seguridad
Puertos requeridos
| Objetivo | Puerto | Proto |
|---|---|---|
| Conexiones de jugadores / API | 30120 | TCP+UDP |
| txAdmin Web UI (opcional) | 40120 | TCP |
| Maestro heredado (rara vez necesario) | 30110 | UDP |
FiveM por defecto usa 30120; el de txAdmin por defecto es 40120. (GitHub)
Ejemplos de UFW (Ubuntu)
sudo ufw allow 30120/tcp sudo ufw allow 30120/udp sudo ufw allow 40120/tcp # only if you enable txAdmin sudo ufw reload
nftables (extracto de conjunto de reglas de ejemplo)
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input tcp dport {30120,40120} accept
sudo nft add rule inet filter input udp dport 30120 accept
Mínimo privilegio y secretos
- Ejecutar en un host endurecido; evitar mapear capacidades extra; no ejecutar Docker como
rootusuario en el host. - Mantener RCON habilitado solo si es necesario; proteger txAdmin con credenciales sólidas y restringir el acceso en el firewall.
- Si usas distribuciones basadas en SELinux (no Ubuntu), agrega
:Z/:za los montajes bind para solucionar problemas de contexto.
Actualizaciones y reversiones
Actualizar a la última etiqueta fijada
docker compose pull docker compose up -d
Fijar por digest (inmutable)
# Pull and discover the digest of the current tag
docker pull spritsail/fivem:stable
docker inspect --format='{{index .RepoDigests 0}}' spritsail/fivem:stable
# Use the printed value in compose, e.g.:
# image: spritsail/fivem@sha256:abcdef...
Reversión
- Cambia la referencia de la imagen de nuevo al tag/digest anterior y
docker compose up -d. - Mantén los digests de imágenes recientes con
docker image ls --digests.
La imagen proporciona stable y latest tags; prefiere stable para menos sorpresas. (GitHub)
Monitoreo y Mantenimiento
- Estado:
docker ps,docker compose ps - Registros:
docker compose logs -f - Estadísticas:
docker stats fivem - Healthcheck: Sondas
info.json; eliminar/ajustar si falta la herramienta. (Documentación de Cfx.re) - Disco:
docker system df, limpiar imágenes antiguas si es necesario. - Copias de seguridad: Programar el comando tar en “Configuración y Persistencia”.
Solución de problemas
- Clave de licencia no válida: Verificar en el portal Cfx.re y asegurar que solo un servidor está usando la clave. (soporte.cfx.re)
- Puertos ya en uso:
sudo ss -lntup | grep 30120; detener servicio conflictivo o cambiarFXSERVER_PORT. - No se puede alcanzar txAdmin: Abierto 40120/TCP o cambiar puerto; confirmar
NO_DEFAULT_CONFIG=1. (Documentación de Cfx.re) - El contenedor se cierra al iniciar: Asegurar
tty: trueystdin_open: trueestán configurados. (GitHub) - Problemas de hora/DNS: Asegurar sincronización de hora del host (systemd-timesyncd/chrony) y DNS funcional (
/etc/resolv.conf). - Denegaciones de SELinux (no Ubuntu): Usar
:Z/:zen montajes bind o ajustar contextos. - info.json/players.json bloqueado: Algunas convars o proxies pueden afectar estos endpoints; confirma que el servidor responde en
GET /info.json. (Documentación de Cfx.re)
Consejos de rendimiento
- CPU/Memoria: Asigna CPUs y establece límites de memoria (ver compose extendido).
- Almacenamiento: Usa SSD/NVMe; mantén los resource packs optimizados; evita assets grandes y sin comprimir.
- Redes: Mantén baja latencia; asegúrate de que el host no tenga limitación de CPU; prioriza UDP 30120.
- Kernel del host: Los valores predeterminados razonables funcionan; sysctls avanzados (
net.core.*mem_max) se pueden ajustar si conoces tu carga de trabajo. - Registros: Usa rotación de logs (como en el ejemplo extendido).
Notas sobre macOS / Windows
- macOS (Docker Desktop): La E/S de archivos montados con bind es más lenta que en Linux nativo; considera las Sincronizaciones de archivos compartidos de Docker Desktop para mejor rendimiento y asegura que la carpeta esté compartida en la configuración. (Documentación de Docker)
- Windows (WSL2): Los puertos publicados son accesibles a través de host local en Windows; exponer a la LAN puede requerir configuración adicional según el modo. Prefiere alojar en Linux para servidores públicos. (Documentación de Docker)
Desinstalación limpia
# Stop and remove the container (keep data) docker compose down # Remove container + anonymous networks + images (keeps bind-mounted data) docker compose down --rmi local --remove-orphans # If you used named volumes (not in this guide), list and remove explicitly: # docker volume ls # docker volume rm <volume_name>
Para eliminar todo datos, elimine los directorios montados por bind:
sudo rm -rf /home/fivem/data /home/fivem/txData
Preguntas frecuentes
¿Puedo alojar múltiples servidores en un solo host?
Sí. Use directorios de proyecto separados, diferentes FXSERVER_PORT/TXADMIN_PORT, y montajes bind distintos. txAdmin admite datos por perfil en /txData. (Documentación de Cfx.re)
¿Cómo cambio el nombre/IP del servidor que se muestra en la lista?
Editar sv_hostname en data/server.cfg. La IP/puerto proviene de sus puertos publicados y la configuración NAT.
¿Puedo reiniciar automáticamente si falla?
Sí. restart: unless-stopped en Compose; también considere temporizadores systemd para watchdogs.
¿Dónde se encuentran las copias de seguridad?
Donde las crees, por ejemplo, fivem-backup_YYYY-MM-DD.tgz en tu directorio de trabajo. Consulta los comandos de copia de seguridad anteriores.
¿Cómo habilito txAdmin?
Colocar NO_DEFAULT_CONFIG=1, montaje bind /txData, y abrir 40120/TCP. (GitHub)
¿Necesito abrir el puerto 30110?
Raramente. Se usaba para listados heredados; las configuraciones modernas normalmente solo necesitan 30120 y el 40120 de txAdmin si se usa. (Comunidad Cfx.re)
¿Cómo muevo el servidor a otra máquina?
Copiar data/ y txData/ al nuevo host, recrea el mismo archivo Compose e inicia.
Enlaces y Créditos
- Imagen upstream:
spritsail/fivem(variables de entorno, rutas, uso, notas de txAdmin,-tirequisito). (GitHub) - Docker:
- Instalar Docker Engine en Ubuntu. (Documentación de Docker)
- Instalar Docker Compose v2 (plugin de Linux). (Documentación de Docker)
- Compartir archivos locales con contenedores (volúmenes vs montajes bind). (Documentación de Docker)
- Cfx.re / FiveM:
- Crear una clave de registro (licencia) del servidor. (soporte.cfx.re)
- Documentación de txAdmin (puerto predeterminado 40120; ruta de datos). (Documentación de Cfx.re)
- Flujo de proxy/conexión (
/info.json). (Documentación de Cfx.re)
Revisión editorial y política de fuentes
La guía de Docker distingue la política de reinicio de contenedores de la recuperación de aplicaciones. Fije las imágenes, persista los datos del servidor fuera de la capa de contenedor grabable, proteja los secretos y valide la copia de seguridad/restauración en la definición de composición exacta.
Esta página fue revisada técnicamente el 9 de agosto de 2026. Los comandos y la configuración deben verificarse con la documentación principal vinculada y la versión exacta del recurso instalada en el servidor. Pruebe los cambios en el entorno de prueba, registre la línea de base y conserve una copia de reversión antes de cambiar la producción.
