Установка LaunchServer

Выбор хостинга

Для работы лаунчсервера необходим виртуальный (VDS/VPS) или выделенный (Dedicated) сервер на дистрибутиве Linux (Для Windows) , а так же:

  • Один из актуальных дистрибутивов: Ubuntu 22.04, Debian 11, CentOS 8, ArchLinux и другие
  • Веб-сервер Nginx для раздачи статического контента
  • Минимум 300Мб свободной оперативной памяти для работы лаунчсервера
  • При сборке лаунчсервера из исходников прямо на машине может потребоваться до 1 Гб свободной оперативной памяти для работы Gradle

Опционально:

  • Веб-сайт, CMS или личный кабинет с поддерживаемым алгоритмом хеширования
  • База данных MySQL/MariaDB или PostgreSQL

Рекомендации:

  • Не размещайте сайт на shared хостинге, так как это может привести к проблемам с подключением к базе данных, производительностью и стабильностью работы
  • Хостинги, предоставляющие VDS/VPS на основе виртуализации OpenVZ не позволяют использовать некоторые программы и нагружать процессор выше определенного уровня длительное время
  • Старые версии дистрибутивов могут содержать уязвимости или слишком старые версии ПО с большим количеством багов. В таком случае рекомендуется обновиться до последней версии или сменить хостинг провайдера

Если вы хотите установить лаунчсервер на Windows для локального тестирования следуйте этой инструкции.

Настройка хостинга

Первым шагом необходимо подготовить окружение - создать пользователя, установить firewall, Java

Для запуска LaunchServer необходима Java 17. Она так же подходит для запуска майнкрафт сервера 1.18+ Для запуска майнкрафт сервера 1.17.x необходима - Java 16. Для запуска майнкрафт сервера 1.16.5 и ниже - Java 8. Необходимо установить их все, если вы собираетесь держать лаунчсервер и сервера на одной машине.

sudo apt-get update ; sudo apt-get install gnupg2 wget apt-transport-https -y
wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | sudo apt-key add - 
echo "deb [arch=amd64] https://apt.bell-sw.com/ stable main" | sudo tee /etc/apt/sources.list.d/bellsoft.list
sudo apt-get update ; sudo apt-get install -y bellsoft-java17-full
sudo update-alternatives --config java
Целевые архитектуры процессоров: Важно

Описание:

  • amd64 является более распространённой архитектурой на текущее время
  • Если amd64 не является целевой архитектурой, замените его в скрипте выше в поле [arch=amd64]

Список возможных архитектур:

amd64, i386, arm64, armhf
  • Сопоставление:
    • amd64 - x86 (64 бит)
    • i386 - x86 (32 бит)
    • arm64 - aarch64

Примечание:

  • Такие архитектуры как arm64 и armhf не поддерживают сборку EXE - бинарного файла лаунчера, через launch4j

  • Если ваша архитектура amd64 или i386, включите сборку EXE в конфигурации LaunchServer.json:
    • launch4j:
      • enabled: true

Узнать архитектуру ядра:

uname -m | awk '{print(substr($0,0,3))}'

Узнать битность ядра:

getconf LONG_BIT

Удалить из sources.list

  • Необходимо, если ошибочно добавили неправильную архитектуру
    • Ошибка в консоли: E: Unable to locate package bellsoft-java17-full
rm -f /etc/apt/sources.list.d/bellsoft.list
  • Измените архитектуру в скрипте и повторите добавление и установку
Команда одной строкой:
sudo apt-get update ; sudo apt-get install gnupg2 wget apt-transport-https -y ; wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | sudo apt-key add - ; echo "deb [arch=amd64] https://apt.bell-sw.com/ stable main" | sudo tee /etc/apt/sources.list.d/bellsoft.list ; sudo apt-get update ; sudo apt-get install -y bellsoft-java17-full ; sudo update-alternatives --config java
Смена Java по умолчанию:
sudo update-alternatives --config java
echo | tee /etc/yum.repos.d/bellsoft.repo > /dev/null << EOF
[BellSoft]
name=BellSoft Repository
baseurl=https://yum.bell-sw.com
enabled=1
gpgcheck=1
gpgkey=https://download.bell-sw.com/pki/GPG-KEY-bellsoft
priority=1
EOF
yum update
yum install bellsoft-java17-full
alternatives --config java
Смена Java по умолчанию:
sudo alternatives --config java

Создание пользователя launcher

Создание пользователя launcher: (Актуально для Ubuntu, Debian, CentOS, ArchLinux)

sudo useradd -m -s /bin/bash launcher
Инструкции по работе с su:

Выполнение команд от имени пользователя launcher и переход в домашнюю папку:

su - launcher

Выполнение команд от имени пользователя launcher без смены каталога:

su launcher

Выход обратно в root:

exit

Установка LaunchServer

Перейдите в пользователя launcher:

su - launcher

Выполнить установку LaunchServer'a скриптом:

wget -O - https://mirror.gravitlauncher.com/scripts/setup-master.sh | bash <(cat) </dev/tty

После завершения установки запустите лаунчсервер для начальной настройки:

./start.sh
  • Укажите ваш ДОМЕН или IP, на котором будет работать лаунчсервер
  • Укажите название вашего проекта, которое будет отображаться в лаунчере и в папке AppData
  • После первого запуска закройте лаунчсервер командой stop
stop
Описание папок и файлов установленных скриптом

Список папок SRC и git:

  • src/ - исходный код лаунчсервера, API, модулей, лаунчера
  • srcRuntime/ - исходный код графической части лаунчера (рантайм)
  • compat/ - дополнительные важные файлы: библиотека авторизации, ServerWrapper, модули для лаунчера и лаунчсервера и т.д.

Установщик так же собирает все модули, готовые модули можно найти по путям:

  • src/modules/<НазваниеМодуля>_module/build/libs/<НазваниеМодуля>_module.jar - собранный модуль для лаунчсервера.
  • src/modules/<НазваниеМодуля>_lmodule/build/libs/<НазваниеМодуля>_lmodule.jar - собранный модуль для лаунчера.

Готовые скрипты, созданные установщиком:

  • ./start.sh - запуск лаунчсервера для тестирования и начальной настройки
  • ./startscreen.sh - запуск лаунчсервера на постоянной основе с помощью утилиты screen. Не запускайте два лаунчсервера одновременно!
  • ./update.sh - обновляет лаунчсервер, лаунчер и рантайм до последней релизной версии

Список папок лаунчсервера:

  • libraries/ - библиотеки для лаунчсервера
  • modules/ - модули для лаунчсервера (оканчивающиеся на _module.jar)
  • profiles/ - папка профилей для запуска MineCraft
  • updates/ - папка обновлений
  • logs/ - папка с логами (журналом) лаунчсервера
  • runtime/ - папка с дизайном лаунчера
  • launcher-modules/ - модули для лаунчера (оканчивающиеся на _lmodule.jar)
  • launcher-libraries/ - библиотеки для лаунчера
  • launcher-compile-libraries/ - вспомогательные библиотеки для лаунчера
  • launcher-pack - файлы, которые будут включены в jar лаунчера без изменений
  • config/ - настройка конфигурации модулей
  • proguard/ - настройки Proguard (обфускация кода)
  • guard/ - нативная защита (по умолчанию отсутствует)

Настройка Nginx

Для достижения оптимальной производительности отдачи файлов нужно настроить Nginx

  • Посетите сайт [NGINX]открыть в новом окне и установите Nginx в соответствии с вашей системой

  • Создайте в пространстве имён своего домена A запись, вида launcher.ДОМЕН.ru, с вашим IP машины с лаунчсервером

Путь к конфигурации Nginx:

Предпочтительно создавать отдельный файл конфигурации для каждого домена отдельно: (Воспользуйтесь SFTP клиентом)

/etc/nginx/conf.d/launcher.ДОМЕН.ru.conf

Если у вас на машине будет только одна настройка, можете отредактировать конфигурацию по умолчанию:

nano /etc/nginx/conf.d/default.conf
upstream gravitlauncher {
    server 127.0.0.1:9274;
}
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
server {
    listen 80;
    server_name launcher.ВАШДОМЕН.ru;
    charset utf-8;
    #access_log  /var/log/nginx/launcher.ВАШДОМЕН.ru.access.log main;
    #error_log  /var/log/nginx/launcher.ВАШДОМЕН.ru.error.log notice;
    
    root /путь/до/updates;
    
    location / {
    }
    location /api {
        proxy_pass http://gravitlauncher;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /webapi/ {
        proxy_pass http://127.0.0.1:9274/webapi/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
upstream gravitlauncher {
    server 127.0.0.1:9274;
}
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
server {
    listen 80;

    charset utf-8;
    #access_log  /var/log/nginx/launcher.access.log main;
    #error_log  /var/log/nginx/launcher.error.log notice;
    
    root /путь/до/updates;
    
    location / {
    }
    location /api {
        proxy_pass http://gravitlauncher;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /webapi/ {
        proxy_pass http://127.0.0.1:9274/webapi/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Проверить конфигурацию и перезагрузить Nginx:

nginx -t

Должны увидеть:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Включить Nginx как службу Systemd:

systemctl enable nginx

Перезагрузка сервиса:

systemctl restart nginx
service nginx restart

WARNING

  • Без доменного имени перенос лаунчера на другую машину привёдёт к отказу самообновления.
  • Так же SSL сертификат невозможно выдать на IP. В последствии соединение будет незащищённым и может быть скомпрометировано.
Заметки по правам: Важно

Если у nginx нет прав для чтения директорий, выдайте:

chmod +x /home/launcher &&
find /home/launcher/updates -type d -exec chmod 755 {} \; &&
find /home/launcher/updates -type f -exec chmod 644 {} \;

Изменить группу и пользователя на всё содержимое домашней директории launcher:

chown -R launcher:launcher /home/launcher

Настройка безопасного подключения

Для обеспечения безопасности передаваемых паролей, защиты от внедрения в процесс обмена данными нужно подключить к своему домену SSL сертификат. На данный момент его можно купить или получить бесплатно (Let's Encrypt/Cloudflare). Вы должны будете установить его на домен с лаунчсервером ВАШДОМЕН.ru и немного изменить настройки лаунчсервера:

  • Откройте файл LaunchServer.json и найдите там секцию netty
  • Измените ссылки формата http://ДОМЕН ИЛИ IP:9274/ЧТО-ТО на https://ВАШДОМЕН.ru/ЧТО-ТО
  • Измените ссылку на websocket лаунчера с ws://ДОМЕН ИЛИ IP:9274/api на wss://ВАШДОМЕН.ru/api
  • Соберите лаунчер командой build и проверьте работоспособность
  • Закройте порт 9274 (если он был открыт), так как теперь лаунчсервер будет получать и передавать данные через nginx по портам 80 и 443

В качестве дополнительных мер безопасности можно настроить сертификат подписи кода (CodeSign), который помогает уменьшить ложноположительные срабатывания антивирусов на Launch4J обертку (для .exe файла). Установите модуль OSSLCodeSignModuleоткрыть в новом окне для подписи. Получить сертификат подписи кода можно несколькими способами:

  • Сгенерировать самоподписанный сертификат с помощью модуля GenerateCertificateModuleоткрыть в новом окне
  • Создать себе самоподписанные сертификаты с помощью утилиты XCAоткрыть в новом окне
  • Купить полноценный сертификат подписи кода (дорого)
  • Отдать сборки лаунчера другому человеку, который подпишет .exe файлы за денежное вознаграждение

Для большинства проектов (кроме достаточно крупных) рекомендуется первый вариант. По ссылке вы можете найти инструкцию по установке модуля и генерации сертификата.

Если вы не крупный проект, то скорее всего столкнетесь с защитником SmartScreenоткрыть в новом окне, который ведет статистику скачиваний и на файлы с низким числом скачиваний выдает предупреждение. Чтобы его не было, вам необходимо отправить файл на проверку:

При достижении определенного числа скачиваний проблема уйдет "сама собой", а некоторые пользователи могут её вовсе не заметить.

Установка на Windows (ТОЛЬКО ДЛЯ ТЕСТИРОВАНИЯ)

Настройте окружение:

Далее вам необходимо установить лаунчсервер ВРУЧНУЮ, без использования скрипта установки

  • На странице Launcher releasesоткрыть в новом окне найдите последний релиз и скачайте его

  • Распакуйте библиотеки и LaunchServer.jar из архива

  • Создайте start.bat с таким содержимым:

    @ECHO OFF
    "ПУТЬ_ДО_JDK_17/bin/java.exe" -javaagent:LaunchServer.jar -jar LaunchServer.jar
    PAUSE
    
  • Запустите start.bat и при первом запуске укажите свой projectName и localhost в качестве адреса

  • Скачайте рантайм для вашей версии лаунчера: LauncherRuntime releasesоткрыть в новом окне

  • Скопируйте папку runtime в папку с установленным лаунчсервером, а .jar файл модуля в папку launcher-modules

  • Запустите лаунчсервер и выполните команду build для запуска сборки. После окончания готовый лаунчер появится в папке updates

Установка dev версий лаунчсервера

DEV версии лаунчсервера содержат самый новый функционал и исправления, которые ещё не попали в релиз. Они могут быть нестабильны( вызывать проблемы), иметь расхождение с официальной вики. Настоятельно рекомендуется проверять работоспособность dev версий в тестовом окружении, прежде чем давать игрокам.