SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor

Как запустить сервер FiveM на VPS: пошаговое руководство

Узнайте, как установить FXServer на Ubuntu, зафиксировать сборку артефактов и настроить лицензионный ключ Cfx.re. Откройте порты 30120 TCP/UDP и защитите панель txAdmin.

Что необходимо для сервера FiveM на VPS

Сервер FiveM на VPS — это один непривилегированный пользователь Linux, одна сборка артефактов от Cfx.re, один лицензионный ключ и один порт, открытый как по TCP, так и по UDP. Установка занимает около 10 минут. Остальная часть этого руководства охватывает аспекты, от которых зависит играбельность сервера: скорость одного ядра CPU, объем оперативной памяти, необходимый для ресурсов, и панель управления, которая никогда не должна быть доступна по публичному адресу.

Три предварительных условия являются обязательными. Бинарные файлы сервера, называемые артефактами, берутся из официального списка сборок Cfx.re. Лицензионный ключ получается на портале Cfx.re по адресу portal.cfx.re (в старых руководствах этот сервис называют keymaster), и ключ привязывается к IP-адресу машины, на которой он используется. Каждому игроку, который подключается к серверу, необходима собственная лицензионная копия GTA V (Grand Theft Auto V) в Steam, Rockstar Games Launcher или Epic Games, а также бесплатная учетная запись Cfx.re. Клиент проверяет наличие игры при запуске, поэтому сервер, построенный на чем-либо ином, работать не будет; никакие обходные пути в данном руководстве не рассматриваются.

Хостинг сервера — это задача, отличная от запуска игры на той же машине, что относится к вопросу можно ли запустить саму игру на VPS, и это отдельный вопрос, требующий иного ответа.

Почему скорость одного ядра определяет производительность сервера FiveM

FXServer, бинарный файл сервера FiveM, выполняет игровую логику в одном основном потоке. Каждый скрипт ресурса, каждый обработчик событий и каждое обновление состояния проходят через этот единственный цикл. Дополнительные ядра помогают ядру ОС, базе данных и сетевому стеку, но они не разделяют игровой цикл. Поэтому сервер с 4 vCPU на медленных ядрах будет «фризить» под нагрузкой, в то время как сервер с 2 vCPU на быстрых ядрах будет работать плавно.

Это противоречит привычке при выборе VPS, где количество ядер является главным показателем. Проверяйте скорость одного ядра перед оплатой. Начните с модели процессора:

lscpu | grep -E 'Model name|MHz'

Затем найдите опубликованный показатель производительности одного потока для этой модели. Рейтинг PassMark single thread и оценка Geekbench single-core находятся в открытом доступе; оба они измеряют работу одного ядра, что и является ключевым показателем в данном случае. После этого измерьте производительность предоставленного вам сервера:

sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 run

Изучите строку events per second. Выполните эту же команду у двух разных провайдеров, чтобы провести честное сравнение, так как рабочая нагрузка идентична и ограничена одним ядром. Повторяемый тест производительности VPS показывает, как обеспечить сопоставимость этих чисел на разных серверах.

Затем убедитесь, что ядро действительно выделено вам:

vmstat 1 5

Последний столбец, st, — это steal time: доля времени, в течение которого ваш виртуальный процессор был готов к работе, но гипервизор заставил его ждать. Постоянное значение выше 1 или 2 означает, что вы делите физическое ядро с нагруженными «соседями», и игровой цикл мгновенно отреагирует на это «резиновым эффектом» (rubber banding). Steal time от шумного соседа описывает, как читать этот столбец и что с этим делать.

Объем оперативной памяти зависит от запускаемых ресурсов, а не только от количества слотов. Базовые данные сервера от Cfx.re занимают несколько сотен мегабайт. Roleplay-фреймворк с сорока или пятьюдесятью ресурсами и базой данных MariaDB на том же сервере — это уже другая конфигурация: 4 GB является разумным минимумом, а 8 GB обеспечивают комфортную работу при 32–64 слотах. Это типичные показатели, используемые сообществом, поэтому рассматривайте их как отправную точку и следите за free -m при реальной нагрузке игроками.

Создание пользователя и установка зависимостей

Запускайте сервер от имени обычного пользователя, никогда не используйте root. Для этого есть две причины. Использование root — плохая практика для любого сервиса, доступного из Интернета. Кроме того, артефакт Linux запускается внутри упакованной корневой файловой системы Alpine Linux, поэтому файлы, распакованные от имени root, не могут быть выполнены никем другим. Это самая частая причина, по которой свежая установка отказывается запускаться.

sudo adduser --disabled-password --gecos "" fivem
sudo apt update
sudo apt install -y git xz-utils curl tcpdump
sudo -iu fivem

Все действия ниже выполняются от имени пользователя fivem. Пакет xz-utils необходим, так как загружаемый файл является архивом .tar.xz, а git используется для клонирования базовых данных сервера.

Загрузка зафиксированной сборки артефакта

Сборка для Linux находится в канале build_proot_linux на сервере артефактов Cfx.re. В списке одна из сборок помечена как рекомендуемая, и эта метка перемещается на новую версию каждые несколько недель. Вместо этого зафиксируйте нумерованную папку. Тогда при пересборке сервера в следующем месяце вы получите тот же бинарный файл, который тестировали в этом, а обновление станет осознанным решением.

mkdir -p ~/FXServer/server
cd ~/FXServer/server
curl -fLO https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/25770-8ddccd4e4dfd6a760ce18651656463f961cc4761/fx.tar.xz
tar xf fx.tar.xz
ls

Сборка 25770 имела метку рекомендуемой, когда я просматривал список в августе 2026 года. Откройте ту же директорию в браузере, чтобы увидеть текущую, а затем вставьте имя этой папки, состоящее из номера сборки и хеша коммита, в URL.

ls теперь должен отображать run.sh и директорию alpine. Эта директория — главный секрет: артефакт для Linux поставляется с собственной небольшой корневой файловой системой Alpine и запускает сервер внутри неё с помощью proot, инструмента пользовательского пространства, который эмулирует chroot без прав root. Именно поэтому один и тот же загруженный файл работает на Ubuntu, Debian и Rocky без необходимости в специфических для дистрибутива пакетах.

Теперь клонируйте базовые данные сервера, которые содержат ресурсы по умолчанию, запускаемые вашим server.cfg:

git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-data

Получение лицензионного ключа и создание server.cfg

Войдите на портал portal.cfx.re, используя свою учетную запись Cfx.re, и создайте ключ сервера. Портал запросит IP-адрес машины, которая будет использовать этот ключ; ключ привязывается к данному адресу. При переезде на новый VPS необходимо изменить IP в настройках ключа на портале, а не создавать второй ключ. Изменения вступают в силу немедленно, но FXServer проверяет их только при перезапуске.

Создайте файл ~/FXServer/server-data/server.cfg:

endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

sv_hostname "My FiveM server"
sv_maxclients 48
set onesync on
sv_scriptHookAllowed false

sv_licenseKey ChangeMe

add_ace group.admin command allow
add_principal identifier.fivem:1 group.admin

sv_maxclients принимает значение от 1 до 2048. Для значения 32 и выше необходимо установить onesync в on или legacy, а для значений выше 64 требуется on. OneSync — это режим синхронизации состояния сервера, который позволяет увеличить количество слотов сверх стандартного лимита базовой игры. Установка 128 слотов при выключенном OneSync не даст вам 128 слотов, а приведет к конфигурации, которую сервер отклонит.

sv_licenseKey содержит ключ без кавычек и без пробелов в конце строки. FXServer разделяет эту строку по пробельным символам, поэтому любой лишний символ нарушит проверку, и сервер откажется запускаться.

rcon_password намеренно отсутствует в этом файле. RCON (удаленная консоль) включается только при установке этой переменной и начинает прослушивать тот же UDP-порт, что и игра. Пароль RCON на публичном порту — это канал для удаленного выполнения команд на вашем сервере. Оставьте его не заданным, если у вас нет специфической необходимости, а если она есть — используйте длинный случайный пароль.

sv_scriptHookAllowed остается false. Официальная документация не рекомендует этот параметр, так как разрешение клиентам использовать Script Hook V делает сервер уязвимым для злоупотреблений со стороны клиентов.

add_principal identifier.fivem:1 предоставляет права администратора учетной записи Cfx.re с ID 1. Замените 1 на свой собственный числовой ID, иначе вы предоставите права администратора чужой учетной записи, оставив себя без прав.

Запустите сервер вручную:

cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfg

Из второй SSH-сессии запросите информацию о сервере:

curl -s http://127.0.0.1:30120/info.json | head -c 200

JSON-ответ с переменными сервера и ресурсами означает, что FXServer успешно привязался к порту и отвечает. Connection refused означает, что сервер не смог занять порт; в этом случае изучите вывод консоли вместо догадок.

Сервер без ключа выводит следующее сообщение и останавливается:

This server does not have a license key specified. Please set the sv_licenseKey console variable to a key from https://keymaster.fivem.net/.

Сообщение все еще содержит старый адрес keymaster. Этот адрес ведет на тот же портал Cfx.re. Если ключ задан, но сервер все равно отказывается работать, наиболее вероятная причина заключается в том, что IP-адрес, зарегистрированный для ключа, больше не совпадает с IP этой машины.

Какие порты должны быть открыты для сервера FiveM?

Порт 30120, по протоколам TCP (transmission control protocol) и UDP (user datagram protocol). FiveM использует один номер порта для двух протоколов, и необходимы оба. Если открыть только TCP, возникнет неоднозначная ситуация: http://your.ip:30120/info.json отвечает в браузере, поэтому сервер кажется исправным, в то время как игровой клиент зависает на Failed to get info from server и не может подключиться, так как запрос клиента и игровой трафик передаются по UDP.

sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verbose

Держите вторую SSH-сессию открытой во время настройки любого межсетевого экрана. Основы ufw для VPS описывает политику запрета по умолчанию, благодаря которой приведенных выше правил достаточно.

Большинство провайдеров также используют сетевой межсетевой экран вне гостевой системы, управление которым осуществляется через панель управления, а не через командную оболочку. Правило ufw ничего не говорит об этом уровне. Если TCP отвечает извне, а игроки всё равно не могут подключиться, проанализируйте трафик в момент попытки подключения:

sudo tcpdump -ni any udp port 30120

Если пакеты приходят, значит, внешний межсетевой экран настроен верно, а проблема находится внутри сервера. Отсутствие трафика означает, что что-то перед сервером отбрасывает пакеты, поэтому в таком случае проверьте панель управления провайдера.

Управление сервером через txAdmin без открытия доступа извне

txAdmin поставляется в составе артефакта, который вы уже загрузили. Запустите run.sh без аргумента +exec, и панель управления откроется на TCP-порту 40120, после чего в консоль будут выведены URL панели и временный PIN-код. Используйте этот PIN-код один раз для привязки вашей учетной записи Cfx.re, после чего вход будет осуществляться через созданную учетную запись администратора.

У txAdmin нет пароля по умолчанию, поэтому риск заключается не в забытых учетных данных. Риск связан с самой панелью: это удаленная консоль. Она позволяет перезагружать сервер, редактировать server.cfg, развертывать данные сервера и выполнять команды от имени пользователя, под которым запущен сервер. Если оставить порт 40120 доступным из Интернета, страница входа в панель окажется в публичном доступе, а сканеры находят открытые порты панелей управления в течение нескольких часов. Не открывайте порт 40120 в брандмауэре. Получайте доступ к нему через SSH-туннель с вашего локального компьютера:

ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IP

Затем откройте http://127.0.0.1:40120 в браузере. Трафик панели будет передаваться внутри SSH-соединения, а порт останется закрытым для всех остальных.

Перед тем как пытаться решить эту задачу иным способом, стоит учесть один нюанс. txAdmin считывает TXHOST_INTERFACE (по умолчанию 0.0.0.0), чтобы определить интерфейс для привязки, и документация прямо указывает, что это же значение принудительно применяется к FXServer. Если установить его в 127.0.0.1, чтобы скрыть панель, вы также привяжете игровой сервер к loopback-интерфейсу, и игроки не смогут подключиться к серверу. Закрывайте порт панели с помощью брандмауэра, а не этой переменной. Чтобы перенести панель на другой порт, используйте TXHOST_TXA_PORT, который принимает любые значения, кроме 30120. Устаревшая переменная +set txAdminPort встречается во многих руководствах; документация самого txAdmin помечает её как устаревшую и предупреждает, что она перестанет работать в будущих релизах.

Поддержание работы сервера после выхода из системы

bash run.sh завершается вместе с вашей SSH-сессией. tmux подходит для тестирования: запустите tmux new -s fivem, запустите сервер, нажмите Ctrl-b, затем d для отсоединения, и используйте tmux attach -t fivem для возврата. Сессия tmux не переживет перезагрузку, поэтому все важные процессы должны быть оформлены в виде systemd-юнита.

Создайте /etc/systemd/system/fivem.service:

[Unit]
Description=FiveM FXServer
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=fivem
Environment=HOME=/home/fivem
WorkingDirectory=/home/fivem/FXServer/server-data
ExecStart=/bin/bash /home/fivem/FXServer/server/run.sh +exec server.cfg
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -f

enable --now выполняет две задачи: немедленно запускает сервис и обеспечивает его автозапуск после перезагрузки. Сервер, запущенный вручную, будет остановлен после следующего обновления ядра. journalctl -u fivem -f теперь является вашей консолью, так как у systemd-сервиса нет терминала, в который можно вводить команды. Если вы управляете сервером через txAdmin, удалите +exec server.cfg из ExecStart и укажите WorkingDirectory на /home/fivem/FXServer/server, так как txAdmin сам запускает игровой сервер и хранит его папку с данными рядом с run.sh.

Что нужно резервировать и где это находится

Артефакты резервировать не имеет смысла, так как вы можете заново загрузить зафиксированную сборку за минуту. Четыре компонента принадлежат только вам.

  • ~/FXServer/server-data/resources: все ресурсы, которые вы установили, приобрели или написали.
  • server.cfg, где бы он ни находился: вся конфигурация сервера, включая ваших администраторов.
  • ~/FXServer/server/txData: конфигурация txAdmin, список администраторов и логи. В Linux-артефактах эта папка создается рядом с run.sh.
  • База данных MariaDB или MySQL, если ваш фреймворк её использует. Персонажи, деньги, транспорт и инвентарь хранятся только там, поэтому резервная копия ресурсов без дампа базы данных восстановит пустой мир.
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sql

Дамп, хранящийся на том же диске, что и сервер, не является резервной копией, так как именно диск может выйти из строя. Выгружайте данные с сервера по расписанию, для чего предназначено руководство резервное копирование с VPS через restic.

Типичные ошибки и сообщения в логах

Permission denied при запуске загрузчика. Сервер немедленно завершает работу, выводя строку вида:

run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission denied

Это происходит, если архив был распакован с помощью sudo, из-за чего все файлы в alpine/ принадлежат пользователю root, и пользователь fivem не может запустить загрузчик. Исправьте владельца файлов с помощью sudo chown -R fivem:fivem /home/fivem/FXServer или удалите папку и распакуйте архив повторно от имени пользователя fivem.

tar отказывается открывать загруженный файл. Ошибка tar (child): xz: Cannot exec: No such file or directory означает, что отсутствует пакет xz-utils, поэтому tar не может распаковать архив .tar.xz. Установите пакет и повторите распаковку. Если загрузка завершается подозрительно быстро, скорее всего, вместо архива была сохранена HTML-страница ошибки под именем fx.tar.xz, и tar сообщает об этом как о поврежденном архиве.

Сервер запущен, но никто не может подключиться. Сначала проверьте порты в следующем порядке: правило ufw для TCP и UDP на порту 30120, затем сетевой брандмауэр провайдера, а после — IP-адрес, привязанный к лицензионному ключу. Команда curl против info.json, выполненная с внешнего хоста, позволяет одной командой определить, является ли проблема сетевой или связана с самим сервером.

Время тика (tick time) растет по мере подключения игроков. Панель производительности txAdmin отображает время тика сервера. Если этот показатель растет вместе с количеством игроков, а общая загрузка CPU остается низкой, значит, какой-то ресурс перегружает основной поток. Помните: на сервере с 4 vCPU полная загрузка одного ядра отображается в top как примерно 25 процентов общего использования CPU, что выглядит как простой, но таковым не является. Останавливайте ресурсы по одному и следите за временем тика, чтобы найти тот, который потребляет больше всего ресурсов.

Сравнение с другими игровыми серверами

Для комфортной работы сервера FiveM требуется высокая производительность одного ядра и достаточный объем оперативной памяти для запускаемых ресурсов. Количество слотов зависит от этих двух параметров, и увеличение числа vCPU не компенсирует низкую частоту ядра. В статье Выбор VPS для игровых серверов подробно описан этот баланс для различных задач, а запуск сервера Minecraft на VPS имеет схожую архитектуру: основной цикл обработки тиков один, поэтому предел производительности также определяется скоростью одного ядра.

FAQ

Сколько CPU и RAM нужно для сервера FiveM?

Одно быстрое ядро важнее нескольких медленных, так как FXServer выполняет игровую логику в одном основном потоке. Сравните опубликованный показатель производительности на одно ядро для вашей модели CPU, затем проверьте сервер с помощью sysbench cpu --threads=1 run и убедитесь, что vmstat показывает время кражи (steal time), близкое к нулю. Что касается памяти, базовые данные сервера Cfx.re занимаются несколько сотен мегабайт, в то время как ролевой фреймворк с сорока или пятьюдесятью ресурсами и локальной базой данных комфортно работает на 8 GB и испытывает нехватку при объеме менее 4 GB. Это типичные показатели сообщества, поэтому следите за free -m в часы пиковой нагрузки, вместо того чтобы полагаться на эти цифры.

Нужно ли игрокам владеть GTA V, чтобы подключиться к моему серверу FiveM?

Да. Каждому подключающемуся игроку необходима легальная лицензионная копия GTA V в Steam, Rockstar Games Launcher или Epic Games, а также бесплатная учетная запись Cfx.re. Клиент FiveM проверяет наличие игры перед подключением. Поддерживаемых способов обойти это нет, а запуск сервера, который пытается это сделать, выходит за рамки правил Cfx.re.

Какие порты должны быть открыты для сервера FiveM?

Порт 30120 по протоколам TCP и UDP. HTTP-эндпоинты, такие как info.json, и загрузка ресурсов используют TCP, а игровой трафик клиента — UDP. Открытие только TCP приводит к запутанной ситуации, когда сервер отвечает в браузере, но игроки видят Failed to get info from server. Для txAdmin требуется TCP 40120, и этот порт должен оставаться закрытым для доступа из Интернета.

Безопасно ли оставлять txAdmin доступным на порту 40120?

Нет. txAdmin — это удаленная консоль, которая перезапускает сервер, редактирует конфигурацию и выполняет команды, поэтому открытая панель означает открытую панель управления всем игровым сервером. Пароль по умолчанию отсутствует, но публичная страница входа провоцирует атаки на учетные данные, которые вы не сможете отследить. Оставьте порт 40120 закрытым в брандмауэре и обращайтесь к панели через SSH-туннель с помощью ssh -N -L 40120:127.0.0.1:40120 user@server, затем перейдите по адресу http://127.0.0.1:40120. Не привязывайте txAdmin к 127.0.0.1 с помощью TXHOST_INTERFACE, так как эта настройка также принудительно переводит игровой сервер на loopback, и ни один игрок не сможет подключиться.

Стоит ли фиксировать версию артефактов или всегда использовать последнюю рекомендуемую?

Фиксируйте пронумерованную папку сборки. Метка «рекомендуемая» регулярно переходит на новую сборку, поэтому скрипт, который загружает рекомендуемую версию, может выдать вам другой бинарный файл при каждой пересборке. В результате сервер, который работал вчера, может сломаться при повторном развертывании по причинам, не связанным с вашими изменениями. Записывайте номер сборки и хеш коммита, которые вы протестировали, обновляйтесь осознанно и сохраняйте предыдущую папку на диске, чтобы иметь возможность вернуться к ней, изменив один путь в вашем systemd-юните.

#fivem#game-server#txadmin#single-thread#vps