MAATRIX GAMES / Блог / RAGE:MP: установка сервера и чем она отличается от FiveM

RAGE:MP: установка сервера и чем она отличается от FiveM

MAATRIX GAMES

Если до этого ты поднимал только FiveM, а теперь решил попробовать RAGE:MP — приготовься, что интуиция от знакомого пайплайна сработает процентов на шестьдесят, а на остальных сорока будешь искать глазами то, чего просто нет: лицензионного ключа, resources/ с директивой ensure, привычного Lua. RAGE:MP — не форк FiveM и не его клон, это отдельная платформа со своим клиентом, своим сетевым движком и другой архитектурой скриптинга. Ниже — установка сервера с нуля и по ходу дела прямое сравнение с FiveM в каждой точке, где платформы расходятся.

Скачивание server-files и что внутри

Первое отличие — уже на этапе загрузки. У FiveM серверный рантайм публикуется артефактами на fivem.net/builds отдельно от базового набора ресурсов cfx-server-data, который качается через git. У RAGE:MP всё в одном архиве — заходишь на rage.mp в раздел загрузок и берёшь Linux-сборку сервера одним файлом:

mkdir -p ~/ragemp-srv && cd ~/ragemp-srv
wget https://cdn.rage.mp/updater/prerelease/server-files/linux_x64.tar.gz
tar -xzf linux_x64.tar.gz
chmod +x ragemp-server

Ссылка на CDN у RAGE:MP периодически меняется вместе с версией сборки — если wget вернул 403 или битый архив, бери актуальную ссылку прямо со страницы rage.mp в момент установки, она обновляется вместе с билдом.

После распаковки в папке лежит бинарник ragemp-server, конфиг conf.json (в некоторых сборках появляется только после первого запуска) и две пустые папки — packages/ и client_packages/. У FiveM аналог этой пары — единая папка resources/, где серверный и клиентский код обычно живут вперемешку внутри одного ресурса с манифестом fxmanifest.lua. RAGE:MP развёл серверную и клиентскую логику по разным директориям физически, и никакого манифест-файла на каждый пакет писать не нужно.

conf.json: порт, bind, лимиты

Если у FiveM это server.cfg — набор консольных команд, которые выполняются построчно, то у RAGE:MP это обычный JSON, который сервер парсит целиком при старте. Если файла нет — запусти сервер один раз (./ragemp-server) и сразу останови Ctrl+C, он создаст conf.json с дефолтами.

Минимальный рабочий набор полей:

{
  "maxplayers": 100,
  "name": "Мой RAGE:MP сервер",
  "gamemode": "freeroam",
  "stream-distance": 500.0,
  "announce": true,
  "bind": "0.0.0.0",
  "port": 22005,
  "csharp": false,
  "language": "ru",
  "sync-rate": 40
}

Ключевые поля:

ПолеНазначение
portОсновной порт (UDP), по умолчанию 22005 — у FiveM это 30120
bindIP для прослушки, 0.0.0.0 — слушать на всех интерфейсах VPS
announcetrue — сервер виден в браузере лаунчера RAGE:MP
csharpВключает загрузку C#-модуля через CLR-бридж вместо/вместе с JS
sync-rateЧастота синхронизации сущностей в мс, трогать только при явных лагах синка

Частая грабля — оставленный дефолтный bind: 127.0.0.1: сервер поднимется и в логах будет всё чисто, но снаружи VPS окажется недоступен. У FiveM похожей ловушки в чистом виде нет — там endpoint_add_tcp/endpoint_add_udp явно требуют указать адрес, и разработчики обычно сразу пишут 0.0.0.0.

Поднять сервер RAGE:MP за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

packages/ и client_packages/: где живёт логика гейммода

Тут расхождение с FiveM самое принципиальное. В FiveM ресурс — это папка с файлом fxmanifest.lua, где явно перечислены серверные и клиентские скрипты, а подключение идёт директивой ensure имя_ресурса в server.cfg. В RAGE:MP никакого реестра ресурсов вести не нужно: сервер сам сканирует packages/ и подхватывает каждую подпапку, у которой есть точка входа index.js (или C#-сборка, если включён csharp в конфиге).

packages/
  freeroam/
    index.js
client_packages/
  freeroam/
    index.js

packages/ — серверная логика: спавн, команды, работа с БД. client_packages/ — то, что выполняется на стороне клиента: UI, CEF-браузеры, визуальные эффекты. Это два разных дерева файлов, и при переносе чужого гейммода их легко перепутать местами — в FiveM такой путаницы обычно нет, потому что server- и client-скрипты одного ресурса объявлены рядом в одном манифесте с явными секциями server_scripts/client_scripts.

Минимальный packages/freeroam/index.js для проверки, что всё грузится:

mp.events.add('playerJoin', (player) => {
  player.outputChatBox('Добро пожаловать на сервер!');
  player.spawn(new mp.Vector3(0, 0, 72));
});

RAGE:MP без гейммода в packages/ запустится, но играть будет не во что — пустой мир без спавна и команд. Заготовку под RP проще не писать с нуля, а взять открытый фрирум-гейммод с GitHub от сообщества RAGE:MP и адаптировать под себя.

Первый запуск, порты и проверка

Запуск — из папки сервера, чтобы сразу видеть ошибки в консоли:

cd ~/ragemp-srv
./ragemp-server

RAGE:MP слушает два порта с разными протоколами — оба нужно открыть снаружи:

ПортПротоколНазначение
22005 (port из conf.json)UDPОсновной игровой трафик
22006 (port + 1)TCPHTTP-запросы клиента (список ресурсов, CEF-контент)
sudo ufw allow 22005/udp
sudo ufw allow 22006/tcp
sudo ufw enable

У FiveM оба протокола висят на одном номере (30120 TCP+UDP), плюс отдельно порт 40120 под веб-панель txAdmin. У RAGE:MP порт хоть и один заявлен в конфиге, но фактически занимает два номера подряд под разные протоколы — если пробросишь только 22005/udp и забудешь про 22006/tcp, игроки увидят сервер в списке, но не смогут законнектиться: не подгрузится HTTP-часть.

Подключение со стороны игрока — через официальный лаунчер RAGE:MP (устанавливается поверх уже купленной GTA V, покупать её отдельно для сервера не нужно ни в RAGE:MP, ни в FiveM).

Node.js вместо Lua: в чём разница на практике

Главное архитектурное отличие RAGE:MP от FiveM — язык и модель скриптинга по умолчанию. FiveM исторически построен вокруг Lua (плюс поддержка C# и JS через Cfx-рантайм), у RAGE:MP же родной язык сервера — Node.js, то есть обычный современный JavaScript с доступом к npm-пакетам, async/await и всей экосистеме веб-разработки. C# доступен как альтернатива через встроенный CLR-бридж (флаг "csharp": true), но большинство гейммодов и туториалов в комьюнити всё-таки на JS.

Для разработчика с бэкграундом в вебе (Node.js, Express, работа с БД через pg/mysql2) порог входа в RAGE:MP может оказаться ниже, чем в Lua-скриптинг FiveM — не нужно привыкать к особенностям встраиваемого языка, событийная модель mp.events.add(...) концептуально похожа на обработчики в Express или Socket.io. Обратная сторона: специфичных под RAGE:MP туториалов и Stack Overflow-ответов на порядок меньше, чем под FiveM, — многие решения придётся выводить логически из документации API, а не гуглить готовый рецепт.

Ещё одно следствие разницы в архитектуре — горячая перезагрузка. В FiveM после правки ресурса можно выполнить refresh + ensure имя_ресурса в консоли и не дропать игроков с сервера. В RAGE:MP такого штатного механизма нет — после правки файлов в packages/ сервер обычно нужно перезапускать полностью, что на живом проекте с онлайном ощутимо болезненнее.

Чего не хватает по сравнению с FiveM

Если оценивать RAGE:MP не по отдельным техническим деталям, а по совокупной готовности к продакшену — разрыв с FiveM в первую очередь не в производительности, а в экосистеме вокруг платформы:

  • Фреймворки. У FiveM есть ESX и QBCore — готовые решения на 80% типовой RP-логики (экономика, инвентарь, работы, фракции) с огромной библиотекой совместимых плагинов. У RAGE:MP аналогов сопоставимого охвата и зрелости нет — часть логики придётся собирать самостоятельно или адаптировать чужие наработки под свой API.
  • Готовый контент. MLO-интерьеры, карты, скрипты — под FiveM их продают и раздают тысячами, под RAGE:MP выбор заметно уже.
  • Комьюнити и кадры. Найти опытного JS/Node.js-разработчика в целом не проблема, а вот найти именно того, кто уже писал под API RAGE:MP — сложнее, чем найти Lua-скриптера под FiveM: рынок труда под платформу меньше.
  • Инструменты администрирования. У FiveM в комплекте идёт txAdmin — веб-панель с рестартами, бэкапами и мониторингом из коробки. У RAGE:MP штатной панели такого уровня нет, управление сервером в основном ручное или через сторонние наработки комьюнити.

При этом у меньшего масштаба есть обратная сторона: конкуренция среди RAGE:MP-серверов ниже, а требования к железу для старта обычно чуть скромнее, чем у тяжёлого ESX/QBCore-проекта на FiveM — если, конечно, не нагружать собственный гейммод так же плотно кастомным контентом. Подробный разбор, когда нишевость RAGE:MP оправдана, а когда лучше сразу идти в FiveM, — в статье SA-MP, FiveM или RAGE:MP — что выбрать для RP-сервера; там же сравнение ESX и QBCore, если решишь всё-таки пойти по пути FiveM — ESX и QBCore — сравнение фреймворков.

Поднять сервер RAGE:MP за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Нужен ли лицензионный ключ, как sv_licenseKey у FiveM (Keymaster)?

Нет, RAGE:MP не требует регистрации сервера и привязки ключа к IP — в этом плане запустить сервер проще: скачал, настроил conf.json, стартовал.

Можно ли писать гейммод на Lua, если я привык к FiveM?

Нет, родной серверный язык RAGE:MP — Node.js (JavaScript), альтернатива — C# через CLR-бридж. Lua-скрипты с FiveM напрямую не портируются, логику придётся переписывать под другой API.

Почему сервер запускается, но в игре пусто, а команды не работают?

Почти всегда пустой или неправильно собранный packages/ — без гейммода с index.js сервер поднимает мир, но не даёт игроку ни спавна, ни интерфейса.

Игроки видят сервер в списке, но подключение обрывается — в чём дело?

Чаще всего пробросили только UDP 22005 и забыли про TCP 22006, из-за которого не грузится HTTP-часть (список ресурсов, CEF-контент клиента).

Стоит ли переносить готовый RP-проект с FiveM на RAGE:MP?

Обычно нет — прямого переноса скриптов и контента не будет из-за разных языков и API, а библиотека готовых решений под RAGE:MP беднее. Имеет смысл, только если цель — осознанно уйти в нишу с меньшей конкуренцией и в команде уже есть Node.js-разработчики.