RAGE:MP: установка сервера и чем она отличается от FiveM
Если до этого ты поднимал только 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 |
bind | IP для прослушки, 0.0.0.0 — слушать на всех интерфейсах VPS |
announce | true — сервер виден в браузере лаунчера 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) | TCP | HTTP-запросы клиента (список ресурсов, 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-разработчики.