Як запустити FiveM-сервер на VPS з Ubuntu
Встановіть FXServer на Ubuntu, зафіксуйте artifact, додайте licence key Cfx.re та відкрийте порт 30120 для TCP і UDP. Не публікуйте txAdmin в інтернеті.
Що потрібно FiveM-серверу на VPS
FiveM-сервер на VPS потребує одного непривілейованого користувача Linux, однієї збірки artifact із Cfx.re, одного licence key і відкритого порту для TCP та UDP. Установлення займає приблизно десять хвилин. Решта цього посібника присвячена параметрам, від яких залежить можливість гри на сервері: швидкості одного ядра CPU, обсягу пам’яті, потрібного вашим ресурсам, і панелі керування, яку не можна залишати відкритою за публічною адресою.
Є три обов’язкові передумови. Бінарні файли сервера, які називають artifacts, надходять з офіційного списку збірок Cfx.re. Licence key отримують на порталі Cfx.re за адресою portal.cfx.re, який у старіших посібниках називають keymaster. Ключ прив’язаний до адреси машини, яка його використовує. Кожен гравець, який підключається, повинен мати власну легальну копію GTA V (Grand Theft Auto V) у Steam, Rockstar Games Launcher або Epic Games, а також безкоштовний обліковий запис Cfx.re. Клієнт перевіряє право власності на гру під час запуску. Тому сервер, побудований на будь-чому іншому, не працює. Цей посібник не охоплює жодних обхідних способів.
Розміщення сервера — це окреме завдання, не пов’язане із запуском гри на цій машині. Окреме питання полягає в тому, чи можна запустити саму гру на VPS, і відповідь на нього буде іншою.
Чому швидкість одного ядра визначає роботу сервера FiveM
FXServer, бінарний файл сервера FiveM, виконує ігрову логіку в одному головному потоці. Усі скрипти ресурсів, обробники подій і оновлення стану проходять через цей цикл. Додаткові ядра допомагають kernel, базі даних і мережевому стеку. Вони не розподіляють ігровий цикл між ядрами. Тому сервер із 4 vCPU на повільному ядрі може працювати ривками під навантаженням, тоді як сервер із 2 vCPU на швидкому ядрі працює плавно.
Це змінює звичний підхід до вибору VPS, де кількість ядер є головним показником. Перед оплатою перевірте швидкість одного ядра. Почніть із моделі CPU:
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 — частку часу, коли ваш віртуальний CPU був готовий виконувати роботу, але hypervisor змусив його чекати. Стабільне значення понад 1 або 2 означає, що ви ділите фізичне ядро з іншими завантаженими сусідами. Ігровий цикл одразу реагує на це ривками та rubber banding. У матеріалі Steal time через завантаженого сусіда описано, як читати цей стовпець і що з цим робити.
Обсяг пам’яті залежить від ресурсів, які ви запускаєте, а не лише від кількості слотів. Базові дані сервера від Cfx.re займають кілька сотень мегабайтів. Roleplay framework із сорока або п’ятдесятьма ресурсами та базою даних 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У серпні 2026 року збірка 25770 була позначена як рекомендована, коли я переглядав список. Відкрийте той самий каталог у браузері, щоб побачити поточну рекомендовану збірку. Потім вставте назву цієї папки в 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 означає редагування ключа на порталі, а не створення другого ключа. Зміни застосовуються одразу, але 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.adminsv_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 200JSON із назвами змінних сервера та ресурсів означає, що 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 (протокол керування передаванням) і UDP (протокол дейтаграм користувача). 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, поки вмикаєте будь-який firewall. У матеріалі Основи ufw для VPS пояснено політику заборони за замовчуванням, завдяки якій наведених вище правил достатньо.
Більшість провайдерів також використовує мережевий firewall поза гостьовою системою. Ним керують із панелі, а не з shell. Правило ufw нічого не доводить щодо цього рівня. Якщо ззовні надходять відповіді TCP, але гравці все одно не можуть підключитися, перевірте мережевий трафік під час чиєїсь спроби підключення:
sudo tcpdump -ni any udp port 30120Якщо пакети надходять, зовнішній firewall працює правильно, а проблема всередині сервера. Якщо трафік відсутній, щось перед сервером відкидає пакети. Тоді перевірте панель провайдера.
Керуйте сервером через txAdmin без відкриття доступу до нього ззовні
txAdmin входить до складу artifact, який ви вже завантажили. Запустіть run.sh без аргументу +exec. Після цього txAdmin відкриє вебпанель на TCP-порті 40120 і виведе в консоль URL панелі та короткочасний PIN-код. Використайте цей PIN один раз, щоб прив’язати обліковий запис Cfx.re. Після цього входьте за допомогою облікового запису адміністратора, який створить txAdmin.
У txAdmin немає пароля за замовчуванням, тому ризик пов’язаний не з обліковими даними, які ви забули змінити. Ризик полягає в призначенні самої панелі: це віддалена консоль. Вона перезапускає сервер, редагує server.cfg, розгортає дані сервера та виконує команди від імені користувача сервера. Якщо залишити 40120 доступним з інтернету, на публічній адресі з’явиться сторінка входу до всіх цих функцій. Сканери знаходять відкриті порти панелей протягом кількох годин. Не відкривайте 40120 у firewall. Підключайтеся до панелі через 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. Тоді гравці не зможуть підключитися до сервера. Закривайте порт панелі за допомогою firewall, а не цією змінною. Щоб перенести панель на інший порт, встановіть TXHOST_TXA_PORT. Для нього можна використовувати будь-яке значення, крім 30120. Старіший convar +set txAdminPort згадується в багатьох посібниках. У власній документації txAdmin його позначено як deprecated і зазначено, що в майбутньому release він перестане працювати.
Залишайте сервер запущеним після виходу із системи
bash run.sh завершує роботу разом із вашим SSH-сеансом. tmux зручно використовувати під час тестування: виконайте tmux new -s fivem, запустіть сервер, натисніть Ctrl-b, потім d, щоб від’єднатися, і використайте tmux attach -t fivem, щоб повернутися. Сеанс tmux не зберігається після перезавантаження, тому все важливе потрібно оформити як unit 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.targetsudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -fenable --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, якщо її використовує ваш framework. Персонажі, гроші, транспортні засоби та інвентар зберігаються саме там і більше ніде, тому резервна копія ресурсів без дампа бази даних відновить порожній ігровий світ.
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sqlДамп, що зберігається на тому самому диску, що й сервер, не є резервною копією, оскільки саме диск може вийти з ладу. Регулярно передавайте його за межі сервера. Саме для цього призначені резервні копії restic із VPS.
Типові причини збоїв і повідомлення, які ви побачите
Немає дозволу на виконання loader. Сервер одразу завершує роботу та виводить повідомлення на кшталт цього:
run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission deniedЦе відбувається тому, що архів розпакували за допомогою sudo. Тому все всередині alpine/ належить root, а користувач fivem не може виконати loader у цій директорії. Виправте власника за допомогою 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. Встановіть пакет і повторіть розпакування. Якщо завантаження завершується надто швидко, найімовірніше, у fx.tar.xz збережено HTML-сторінку з помилкою. tar повідомляє про це як про пошкоджений архів.
Сервер працює, але ніхто не може підключитися. Спочатку перевірте порти в такому порядку: правило ufw для TCP і UDP на порту 30120, потім власний мережевий firewall провайдера, а далі IP-адресу, зареєстровану для licence key. Перевірка curl щодо info.json із зовнішньої системи дає змогу однією командою відрізнити мережеву проблему від проблеми сервера.
Tick time зростає, коли підключаються гравці. Панель продуктивності txAdmin показує tick time сервера. Якщо цей показник зростає разом із кількістю гравців, а загальне використання CPU залишається низьким, один resource перевантажує main thread. Пам’ятайте про розрахунок: на сервері з 4 vCPU одне повністю завантажене ядро відображається приблизно як 25 відсотків загального CPU у top. Це може виглядати як низьке навантаження, але таким не є. Зупиняйте resources по одному та стежте за tick time, щоб визначити, який із них створює навантаження.
Порівняння конфігурації з іншими ігровими серверами
Для ігрового FiveM-сервера потрібні швидке одне ядро та достатній обсяг пам’яті для фактичного списку ресурсів. Кількість слотів визначається цими двома параметрами, і жодна кількість vCPU не компенсує повільне ядро. Вибір VPS для ігрових серверів допомагає оцінити цей компроміс для змішаного парку серверів, а запуск Minecraft-сервера на VPS має ту саму базову структуру: один основний цикл обробки тактів, тому граничну продуктивність також визначає швидкість одного ядра.
FAQ
Скільки CPU та RAM потрібно серверу FiveM?
Одне швидке ядро важливіше за кілька повільних, оскільки FXServer виконує ігрову логіку в одному головному потоці. Порівняйте опублікований показник продуктивності одного потоку для моделі CPU, а потім перевірте його на сервері за допомогою sysbench cpu --threads=1 run і переконайтеся, що vmstat показує майже нульовий steal time. Базові дані сервера Cfx.re займають кілька сотень мегабайт, а для roleplay-фреймворку із сорока або п’ятдесятьма ресурсами та локальною базою даних комфортним обсягом є 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 endpoints, зокрема info.json, і завантаження ресурсів використовують TCP, а ігровий трафік клієнта — UDP. Якщо відкрити лише TCP, виникає заплутана ситуація: сервер відповідає у браузері, але гравці бачать Failed to get info from server. Для txAdmin потрібен TCP-порт 40120, і він має залишатися закритим для Інтернету.
Чи безпечно залишати txAdmin доступним через порт 40120?
Ні. txAdmin — це віддалена консоль, яка перезапускає сервер, редагує конфігурацію та виконує команди, тому відкриту панель слід розглядати як відкритий control plane всього ігрового сервера. Пароль за замовчуванням не встановлено, але публічна сторінка входу створює умови для атак на облікові дані, яких ви не побачите. Залиште 40120 закритим у firewall і підключайтеся до панелі через 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, і жоден гравець не зможе підключитися.
Чи потрібно фіксувати build artifact або завжди використовувати останній рекомендований?
Зафіксуйте пронумеровану папку build. Мітка recommended регулярно переходить до нової збірки, тому скрипт, який завантажує recommended build, може надати інший бінарний файл під час кожної повторної збірки. Через це сервер, який працював учора, може зламатися під час повторного розгортання з причин, не пов’язаних із вашими змінами. Запишіть номер build і commit hash, які ви перевірили, оновлюйте сервер лише навмисно та залиште попередню папку на диску, щоб можна було повернутися до неї, змінивши один шлях у systemd unit.