☁ CloudNet 4.0 - Удобства, Мульти-прокси, Масштабирование и Автомтизация.

Руководство ☁ CloudNet 4.0 - Удобства, Мульти-прокси, Масштабирование и Автомтизация.

Поддерживаемые версии
  1. 1.7
  2. 1.8
  3. 1.9
  4. 1.10
  5. 1.11
  6. 1.12
  7. 1.13
  8. 1.14
  9. 1.15
  10. 1.16
  11. 1.17
  12. 1.18
  13. 1.19
  14. 1.20
  15. 1.21
Требования
ОС: Использую Ubuntu / Debian
Java: Мин. 22 для Nightly
Системные требования:
  • Минимум: 128MB RAM для работы одного кластера CloudNet, 2GB RAM / 2 Ядра процессора для работы серверов в кластере
  • Рекомендуется: 512MB RAM для CloudNet и 8GB+ RAM / 4+ Ядра процессора
Что это и кому нужно?
CloudNet позволяет вам связать сервера в Ноды (Узлы), которые могут общаться и работать с другими нодами, размещенные даже на другом хостинге. Со всеми нодами можно работать через единую консоль, либо команду /cloud прямо в игре. Одно из преимуществ CloudNet - это возможность создания системы приближенной к децентрализованной. Если упадет ваша Head Node (Главная нода), запасная может принять на себя удар и поднять нужные сервера через настройки.
{5DD4A86C-2E5A-44E1-9E0F-CF1CE055D74D}.png

На фото одно из возможных схем. Понятное дело, что вы можете, например, на узле2 разместить только сервера и подключить их к прокси на узле1. Все зависит от вашей реализации проекта. CloudNet может похвастаться очень гибкими настройками автоматизации и сервисов. Функций и тонкостей тут настолько много, что одним гайдом не описать все возможности, по этому в этом гайде я расскажу как поднять свою первую ноду и использовать стандартный функционал. Технология раскрывается во всех красках, если вы разработчик и можете дополнить своим контентом.

Установка
1. Скачайте последнею версию из GitHub (Клик) (Гайд написан, используя 4.0.0-RC10 и Nightly) и распакуйте в нужное место через SFTP. В моем случае это “/home/nodes/node-1/”
1. Создайте папку для CloudNet с помощью команды mkdir.
2. Перейдите в только что созданную папку командой cd.
3. Скачайте CloudNet командой wget https://github.com/CloudNetService/CloudNet/releases/download/4.0.0-RC10/CloudNet.zip
4. Распакуйте скачанный архив командой unzip CloudNet.zip
2. Зайдите в папку командой cd /home/nodes/node-1, выполните команду chmod +x start.sh и запустите установку командой sh start.sh
3. Чтобы зайти в консоль управление CloudNet и серверами, вам нужна утилита screen или tmux(Рекомендуется).
Выбор версии CloudNet
Если хотите получить самые последние обновления, то вам следует выбрать var cloudnet.updateBranch nightly в файле launcher.cnl. Важно понимать, что вы будете получать сразу же все обновления с основной ветки GitHub, в том числе возможные нестабильные.

Первый запуск
Сразу же после запуска установки система попросит пройти опрос, на основе которых будет создана первая нода. Опрос включает в себя:
1. Согласны ли вы с Mojang EULA (https://account.mojang.com/documents/minecraft_eula)? ответьте “Да”.
2. Выберите IP-адрес и порт вашего сервера для CloudNet Node (например, 0.0.0.0:1410). Указанный порт будет использоваться CloudNet Node и не может быть использован другими приложениями.
3. Выберите IP-адрес и порт вашего сервера для веб-сервера CloudNet (например, 0.0.0.0:2812).
4. Укажите доступную память (RAM) в МБ, которую может использовать весь узел CloudNet. (например, 8192).
5. Ответьте на вопрос является ли этот узел частью кластера? Ответьте “нет”, если это ваш первый узел. В следящем гайде расскажу как связать несколько нод.
6. Выберите ядро для прокси (например, VELOCITY).
7. Выберите версию прокси (например, velocity-latest).
8. Выберите ядро для серверов (например, MINECRAFT_SERVER).
9. Выберите версию ядра (например, paperpigot-latest).
10. Ответьте на вопрос “Нужно ли создавать прокси по умолчанию?” словами “да” или “нет” (рекомендуется: “да”).
11. Ответьте на вопрос Нужно ли создавать лобби по умолчанию? с помощью “да” или “нет” (рекомендуется: “да”).
(Обязательно) Также вас попросит выбрать модули, которые можно сразу же установить. Рекомендую выбирать минимум Bridge, SyncProxy, NPCs, CloudFire, Dockerized-Services и удобную для вас базу данных.
(Необязательно) Если хотите настроить несколько узлов, то вам нужна хоть 1 запущенная нода и подключенная база данных (MySql, MarianDB или MongoDB). Хотя в любом случае я настоятельно рекомендую сразу же подключать базу данных.

Консоль и команды
На фото вы видите, как выглядит консоль CloudNet. Здесь вы сможете легко управлять всеми серверами и возможностями облачной технологии. Я постараюсь описать и объяснить каждую команду.
{ACB8CBF9-B1CD-42A8-9583-B9AB5722A5B8}.png

Команды
Управляет версиями сервисов в шаблонах или на статических сервисах.
Подкоманды:
[*] installstatic <serviceName> <versionType> <version> [—force | —no-cache | —executable [executable]] - Устанавливает версию для статического сервиса.
[*] installtemplate <template> <versionType> <version> [—force | —no-cache | —executable [executable]] - Устанавливает версию для шаблона.
[*] list [versionType] - Выводит список доступных версий.
Управляет кластером и предоставляет информацию о нём.
Подкоманды:
[*] add <nodeId> <host> - Добавляет новый узел в кластер.
[*] node <nodeId> - Показывает информацию о конкретном узле.
[*] node <nodeId> set drain <enabled> - Устанавливает режим дренажа для узла.
[*] nodes - Выводит список всех узлов в кластере.
[*] push staticServices [service] [—overwrite] - Обновляет статические сервисы на узлах.
[*] push templates [template] - Обновляет шаблоны на узлах.
[*] remove <nodeId> - Удаляет узел из кластера.
[*] shutdown - Останавливает кластер.
[*] sync - Синхронизирует состояние кластера.
Управляет локальными и удалёнными шаблонами.
Подкоманды:
[*] copy <sourceTemplate> <targetTemplate> - Копирует шаблон.
[*] create <template> <environment> - Создаёт новый шаблон.
[*] delete <template> - Удаляет шаблон.
[*] list [storage] - Выводит список шаблонов.
Очищает консоль узла для лучшего обзора.
Управляет конфигурациями всех постоянных групп.
Подкоманды:
[*] create <name> - Создаёт новую группу.
[*] delete <name> - Удаляет группу.
[*] group <name> - Управляет конкретной группой.
[*] group <name> add deployment <deployment> [—excludes [excludes] | —includes [includes] | —case-sensitive] - Добавляет развертывание в группу.
[*] group <name> add environment <environment> - Добавляет окружение в группу.
[*] group <name> clear inclusions - Очищает инклюзии группы.
[*] list - Выводит список групп.
Управляет всеми сервисами в кластере.
Подкоманды:
[*] <name> [—full] - Показывает полную информацию о сервисе.
[*] <name> add deployment <deployment> [—excludes [excludes] | —includes [includes] | —case-sensitive] - Добавляет развертывание к сервису с возможностью указания исключений или включений.
[*] <name> add inclusion <url> <path> - Добавляет инклюзию для сервиса.
[*] <name> add template <template> - Добавляет шаблон к сервису.
[*] <name> command <command> - Отправляет команду в косноль сервиса.
[*] <name> copy [—template [template] | —excludes [excludes] | —includes [includes] | —case-sensitive] - Копирует сервис с возможностью указания шаблона и исключений.
[*] <name> delete - Удаляет сервис.
[*] <name> deployResources - Разворачивает ресурсы для сервиса.
[*] <name> includeInclusions - Обновляет инклюзию для сервиса. Список файлов, которые нужно загружать в сервис перед его загрузкой. Может загружать данные из сети.
[*] <name> includeTemplates - Обновляет шаблоны для сервиса. Если вам нужно быстро загрузить файлы из шаблона на сервера, то используйте эту команду.
[*] <name> restart - Перезапускает сервис.
[*] <name> screen - Открывает/закрывает КОНСОЛЬ сервиса/сервера.
[*] <name> start - Запускает сервис.
[*] <name> stop - Останавливает сервис.
[*] list [—id [id] | —task [task] | —group [group] | —names] - Выводит список всех сервисов с возможностью фильтрации по ID, задаче или группе.
Управляет конфигурациями всех постоянных задач.
Подкоманды:
[*] create <name> <environment> - Создаёт новую задачу.
[*] delete <name> - Удаляет задачу.
[*] list - Выводит список задач.
[*] rename <oldName> <newName> - Переименовывает задачу.
Создаёт одну или несколько новых служб на основе задачи или полностью независимых.
Подкоманды:
[*] by <task> <amount> [—start | —id [id] | —javaCommand [javaCommand] | —node [node] | —memory [memory]] - Создаёт сервисы по заданной задаче.
Позволяет мигрировать данные, известные CloudNet, между различными базами данных.
Подкоманды:
[*] database <database-from> <database-to> [—chunk-size [chunk-size]] - Мигрирует данные из одной базы в другую.
Управляет конфигурацией узла.
Подкоманды:
[*] node add ip <ip> - Добавляет IP-адрес к узлу.
[*] node add ipalias <name> <hostAddress> - Добавляет псевдоним IP-адреса.
[*] node reload - Перезагружает конфигурацию узла.
[*] node remove ip <ip> - Удаляет IP-адрес из конфигурации узла.
[*] node remove ipalias <name> - Удаляет псевдоним IP-адреса.
[*] node set javaCommand <executable> - Устанавливает команду для Java.
[*] node set maxMemory <maxMemory> - Устанавливает максимальный объем памяти.
[*] reload - Перезагружает конфигурацию.
Управляет синхронизацией прокси-сервисов.
Подкоманды:
[*] create entry <targetGroup> - Создает новую запись для целевой группы.
[*] list - Выводит список всех целевых групп.
[*] target <targetGroup> - Указывает целевую группу для дальнейших операций.
[*] target <targetGroup> set maintenance <enabled> - Устанавливает режим обслуживания для целевой группы.
[*] target <targetGroup> set maxPlayers <amount> - Устанавливает максимальное количество игроков для целевой группы.
[*] target <targetGroup> whitelist add <name> - Добавляет имя в белый список целевой группы.
[*] target <targetGroup> whitelist remove <name> - Удаляет имя из белого списка целевой группы.
Управляет игроками на серверах.
Подкоманды:
[*] online - Показывает список игроков, находящихся в сети.
[*] online <player> connect <server> - Подключает игрока к указанному серверу.
[*] online <player> kick [reason] [—force] - Выгоняет игрока с сервера с возможным указанием причины.
[*] online <player> message <message> - Отправляет сообщение игроку.
[*] player <player> - Показывает информацию о конкретном игроке.
[*] player <player> delete - Удаляет игрока из системы.
[*] registered - Выводит список зарегистрированных игроков.
Управляет конфигурацией модуля моста.
Подкоманды:
[*] create entry <targetGroup> - Создаёт запись в мосту.
[*] task <task> set requiredPermission <permission> - Устанавливает необходимые разрешения для задачи.
Управляет интеллектуальными задачами в системе.
Подкоманды:
[*] task <task> autoStopTimeByUnusedServiceInSeconds <seconds> - Устанавливает время автоматической остановки неиспользуемых сервисов.
[*] task <task> directTemplatesAndInclusionsSetup <enabled> - Включает или отключает настройку прямых шаблонов и инклюзий.
[*] task <task> enabled <enabled> - Включает или отключает задачу.
[*] task <task> forAnewInstanceDelayTimeInSeconds <seconds> - Устанавливает задержку для создания нового экземпляра.
[*] task <task> maxServices <amount> - Устанавливает максимальное количество сервисов.
[*] task <task> percentOfPlayersForANewServiceByInstance <percent> - Устанавливает процент игроков для нового сервиса по экземпляру.
[*] task <task> percentOfPlayersToCheckShouldStopTheService <percent> - Устанавливает процент игроков для проверки остановки сервиса.
[*] task <task> preparedServices <amount> - Устанавливает количество подготовленных сервисов.
[*] task <task> priority <priority> - Устанавливает приоритет задачи.
[*] task <task> smartMinServiceCount <amount> - Устанавливает минимальное количество интеллектуальных сервисов.
[*] task <task> splitLogicallyOverNodes <enabled> - Включает или отключает логическое распределение по узлам.
[*] task <task> templateInstaller <installer> - Устанавливает установщик шаблонов для задачи.
Управляет конфигурацией Docker.
Подкоманды:
[*] config add bind <bind> - Добавляет новый привязанный адрес.
[*] config add port <port> [protocol] - Добавляет новый порт с возможным указанием протокола.
[*] config add volume <volume> - Добавляет новый том.
[*] config clear binds - Очищает все привязанные адреса.
[*] config clear ports - Очищает все порты.
[*] config clear volumes - Очищает все тома.
[*] config image <repository> [tag] [—registry [registry] | —platform [platform]] - Устанавливает образ из указанного репозитория.
[*] config network <network> - Устанавливает сеть.
[*] config registry <registry> [—user [user] | —email | —password [password]] - Устанавливает параметры для реестра.
[*] config remove bind <bind> - Удаляет привязанный адрес.
[*] config remove port <port> [protocol] - Удаляет указанный порт.
[*] config remove registry - Удаляет настройки реестра.
[*] config remove user - Удаляет пользователя.
[*] config remove volume <volume> - Удаляет указанный том.
[*] config user <user> - Устанавливает пользователя.
[*] task <task> add bind <bind> - Добавляет привязанный адрес к задаче.
[*] task <task> add port <port> [protocol] - Добавляет порт к задаче.
[*] task <task> add volume <volume> - Добавляет том к задаче.
[*] task <task> clear binds - Очищает привязанные адреса в задаче.
[*] task <task> clear ports - Очищает порты в задаче.
[*] task <task> clear volumes - Очищает тома в задаче.
[*] task <task> image <repository> [tag] [—registry [registry] | —platform [platform]] - Устанавливает образ для задачи.
[*] task <task> remove bind <bind> - Удаляет привязанный адрес из задачи.
[*] task <task> remove image - Удаляет образ из задачи.
[*] task <task> remove port <port> [protocol] - Удаляет порт из задачи.
[*] task <task> remove volume <volume> - Удаляет том из задачи.
Управляет конфигурацией NPC.
Подкоманды:
[*] create entry <targetGroup> - Создаёт запись для работы с NPC.
[*] list - Выводит список всех NPC.

Общие настройки
launcher.cnl - Настройки лаунчера. Например тут я меняю структуру папок и переименовываю тэг ноды.
config.json - Основные настройки. Давайте разберем пару моментов.
Код:
{
  “language”: “en_US”,
  “identity”: {
    “uniqueId”: “Node-1”,
    “listeners”: [
      {
        “host”: “11.228.30.228”,
        “port”: 1410
      }
    ],
    “properties”: {}
  },
  “clusterConfig”: {
    “clusterId”: “29rkk1f-gfn4-9ng-e2f2-1lol9blya8b03”,
    “nodes”: [
      {
        “uniqueId”: “Node-2”,
        “listeners”: [
          {
            “host”: “11.228.30.228”,
            “port”: 4010
          }
        ],
        “properties”: {}
      }
    ]
  },
  “ipWhitelist”: [
    “0:0:0:0:0:0:0:1”,
    “127.0.1.1”,
    “127.0.0.1”
  ],
  “maxCPUUsageToStartServices”: 90.0,
  “maxMemory”: 32768,
  “maxServiceConsoleLogCacheSize”: 64,
  “processTerminationTimeoutSeconds”: 5,
  “forceInitialClusterDataSync”: false,
  “printErrorStreamLinesFromServices”: true,
  “runBlockedServiceStartTryLaterAutomatic”: true,
  “jvmCommand”: “java”,
  “hostAddress”: “11.228.30.228”,
  “ipAliases”: {},
  “restConfiguration”: {
    “corsPolicy”: “*”,
    “allowedHeaders”: “*”,
    “exposedHeaders”: “Content-Encoding”,
    “accessControlMaxAge”: 3600,
    “jwtValidTimeMinutes”: 60
  },
  “httpListeners”: [
    {
      “host”: “11.228.30.228”,
      “port”: 2812
    }
  ],
  “clientSslConfig”: {
    “enabled”: false,
    “clientAuth”: false,
    “trustCertificatePath”: null,
    “certificatePath”: “cert.pem”,
    “privateKeyPath”: “private.pem”
  },
  “serverSslConfig”: {
    “enabled”: false,
    “clientAuth”: false,
    “trustCertificatePath”: null,
    “certificatePath”: “cert.pem”,
    “privateKeyPath”: “private.pem”
  },
  “webSslConfig”: {
    “enabled”: false,
    “clientAuth”: false,
    “trustCertificatePath”: null,
    “certificatePath”: “cert.pem”,
    “privateKeyPath”: “private.pem”
  },
  “properties”: {
    “database_provider”: “mysql”
  }
}
uniqueId - Под каким именем будет текущая нода. Не должно повторятся другими нодами.
listeners - На каком хосте и порте запущена текущая нода.
clusterConfig - Настройки текущего кластера.
clusterId - Уникальный ИД кластера. НЕЛЬЗЯ его распространять. По нему подключаются другие ноды к вашей сети.
nodes - Подключенные ноды (необязательно). Настройки под несколько нод разберу в другом гайде.
ipWhitelist - Список Ip, которые могут подключатся к вашему кластеру.
maxMemory - Количество выделенной оперативной памяти под ноду. Если ваши сервера по какой-то причине не запускаются, то возможно вы превысили порог памяти ноды.
database_provider - Какая база данных будет использована. Сначала вам нужно установить модуль базы данных командой modules install, вписать данные в настройки модуля, затем тут указывать базу данных (mysql/mongodb).

Настройка задач и групп
Каждый сервер в cloudnet принято называть сервисом, и каждый из сервисов запускается исходя из настроек задачи и шаблона файлов. Все эти настройки находя /local/groups, /local/tasks и /local/templates. Обычно все сервера загружаются временно (то есть удаляются после остановки сервера), но разуметься тут можно создать статичный сервер, чтобы все ваши данные сохранялись после перезагрузки.
Lobby и Proxy принято создавать временными. Ниже я приведу пример настройки этих серверов и разберу конфигурацию.
Код:
{
  “name”: “Lobby”,
  “jvmOptions”: [],
  “processParameters”: [],
  “environmentVariables”: {},
  “targetEnvironments”: [],
  “templates”: [],
  “deployments”: [],
  “includes”: [],
  “properties”: {}
}
Перед созданием задачи для сервиса желательно создать группу, к которой мы потом определим задачу. Параметры групп имеют почти такие же параметры, как и в tasks. Вы можете один раз указать их тут, чтобы не писать их по несколько раз.
По умолчанию у вас уже будут созданы некоторые группы, например Global-Server для обычных серверов и Global-Proxy для Velocity/Bungee.
Код:
{
  “name”: “Lobby”,
  “runtime”: “jvm”,
  “hostAddress”: “null”,
  “javaCommand”: “java”,
  “nameSplitter”: “-”,
  “disableIpRewrite”: false,
  “maintenance”: false,
  “autoDeleteOnStop”: false,
  “staticServices”: false,
  “groups”: [
    “Lobby”
  ],
  “associatedNodes”: [],
  “deletedFilesAfterStop”: [],
  “processConfiguration”: {
    “environment”: “MINECRAFT_SERVER”,
    “maxHeapMemorySize”: 2500,
    “jvmOptions”: [],
    “processParameters”: [],
    “environmentVariables”: {}
  },
  “startPort”: 30011,
  “minServiceCount”: 1,
  “templates”: [
    {
      “prefix”: “Global”,
      “name”: “Global-Server”,
      “storage”: “local”,
      “priority”: 0,
      “alwaysCopyToStaticServices”: false
    },
    {
      “prefix”: “Lobby”,
      “name”: “default”,
      “storage”: “local”,
      “priority”: 0,
      “alwaysCopyToStaticServices”: false
    }
  ],
  “deployments”: [],
  “includes”: [],
  “properties”: {
    “requiredPermission”: null,
    “smartConfig”: {
      “enabled”: false,
      “priority”: 10,
      “maxServices”: -1,
      “preparedServices”: 0,
      “splitLogicallyOverNodes”: true,
      “directTemplatesAndInclusionsSetup”: true,
      “templateInstaller”: “INSTALL_ALL”,
      “autoStopTimeByUnusedServiceInSeconds”: 180,
      “percentOfPlayersToCheckShouldStopTheService”: 0,
      “forAnewInstanceDelayTimeInSeconds”: 300,
      “percentOfPlayersForANewServiceByInstance”: 100
    }
  }
}
hostAddress - Адрес хоста сервиса.
runtime - Среда выполнения кода.
javaCommand - Команда для запуска исполняемого код файла.
nameSplitter - Какой символ используется после имени и перед числом сервисом.
maintenance - Режим технического обслуживания для сервиса.
autoDeleteOnStop - После обычной перезагрузке сервера не удаляются, но если написать ser lobby-1 stop (Не restart) удалится. Если включен этот параметр, то сервер будет удалятся всегда.
staticServices - Является ли этот сервис статичным? Данные никогда не будут удалятся, а сам сервер поместится в специальную папку статичных сервисов.
groups - Список групп, к которым определена эта задача.
associatedNodes - Белый список нод, на которых может запустится задача.
deletedFilesAfterStop - Список файлов, которые будут удалятся после остановки сервера. Полезно, если не хотите хранить на статичном сервисе какой-то шлак.
processConfiguration - Среда выполнения задачи и настройка памяти. Напоминаю, что количество памяти не должно превышать то число, которое вы выделили в config.json.
jvmOptions - Флаги Jvm. По умолчанию Akair флаги уже есть в Global-Server.
startPort - Миниальный порт, на котором будет запускаться сервис. Убедитесь, что все порты кроме proxy закрыты.
minServiceCount - Минимальное количество сервисов, которые всегда должны быть запущены.
templates - Какие шаблоны использует сервис.
includes - Загружает файлы из-вне перед загрузкой сервиса.
Код:
  “includes”: [
    {
      “url”: “https://ip.net/download/ViaVersion-Lasted.jar”,
      “destination”: “plugins/ViaVersion-Lasted.jar”,
      “properties”: {}
    }
  ],
deployments - После остановки сервера копирует файлы/папки в указанный шаблон, дабы их сохранить.
Код:
  “deployments”: [
    {
      “template”: {
        “prefix”: “Lobby”,
        “name”: “default”,
        “storage”: “local”,
        “alwaysCopyToStaticServices”: false
      },
      “excludes”: [
        “whitelist.yml”,
        “log.txt”
      ],
      “properties”: {}
    }
  ],
requiredPermission - Требуемые права для подключение к сервису. Полезно, если хотите сделать Premium сервера или сервера для персонала.
smartConfig - Настройки для умного модуля. Кстати, очень полезная вещь, в следующем гайде разберу все модули и фишки в реальных условиях.
Код:
{
  “name”: “Proxy”,
  “runtime”: “jvm”,
  “hostAddress”: “null”,
  “javaCommand”: “java”,
  “nameSplitter”: “-”,
  “disableIpRewrite”: false,
  “maintenance”: false,
  “autoDeleteOnStop”: true,
  “staticServices”: false,
  “groups”: [
    “Proxy”
  ],
  “associatedNodes”: [],
  “deletedFilesAfterStop”: [],
  “processConfiguration”: {
    “environment”: “VELOCITY”,
    “maxHeapMemorySize”: 512,
    “jvmOptions”: [],
    “processParameters”: [],
    “environmentVariables”: {}
  },
  “startPort”: 25565,
  “minServiceCount”: 1,
  “templates”: [
    {
      “prefix”: “Global”,
      “name”: “Global-Proxy”,
      “storage”: “local”,
      “priority”: 1,
      “alwaysCopyToStaticServices”: false
    },
    {
      “prefix”: “Proxy”,
      “name”: “default”,
      “storage”: “local”,
      “priority”: 0,
      “alwaysCopyToStaticServices”: false
    }
  ],
  “deployments”: [],
  “includes”: [],
  “properties”: {
    “requiredPermission”: null,
    “smartConfig”: {
      “enabled”: false,
      “priority”: 10,
      “maxServices”: -1,
      “preparedServices”: 0,
      “smartMinServiceCount”: 0,
      “splitLogicallyOverNodes”: true,
      “directTemplatesAndInclusionsSetup”: true,
      “templateInstaller”: “INSTALL_ALL”,
      “autoStopTimeByUnusedServiceInSeconds”: 180,
      “percentOfPlayersToCheckShouldStopTheService”: 0,
      “forAnewInstanceDelayTimeInSeconds”: 300,
      “percentOfPlayersForANewServiceByInstance”: 100
    }
  }
}

Настройка шаблонов
В папке /local/templates хранятся все файлы, которые нужно загрузить/обновить на сервисах. Вот например структура моего тестового сервера.
Global/Global-Server - Сюда я загружаю jar файлы Server-Network, Server-Core, ViaVersion, Spark и LuckPerms в папку plugins, ведь они мне нужны на всех серверах самой последней версии.
Global/Global-Proxy - Аналогично, но с другими плагинами.
Lobby - Все настройки, карта и требуемые плагины/конфиги.
Код:
config
libraries
lobby
plugins
worlds
bukkit.yml
commands.yml
ops.json
paper.jar
server.properties
spigot.yml
version_history.json
Proxy - Аналогично.
Код:
lang
plugins
forwarding.secret
velocity.jar
velocity.toml
Build - Это статический билд-сервер, но все же я залил некоторые файлы т.к у меня не один сервер, хоть это необязательно, ведь для статичных сервисов создается отдельная папка.
Код:
config
emotes
plugins
bukkit.yml
pufferfish.yml
purpur.jar
purpur.yml
server.properties
spigot.yml
MapService - Это отдельный самописный сервис карт. Вы также можете разворачивать свои jar файлы/сервисы помимо обычного маинкрафта, но это требует некоторых знаний программирования.
Код:
settings
logs
map-service.jar

Модули
Плагины для CloudNet на стеройдах. Разработчики поддерживают ряд модулей, которые могут быть очень полезны. Я могу выделить следующие, полный список можете глянуть на их GitHub.
SyncProxy - Управляйте Proxy, TabList, Motd и настраивайте режим обслуживания с белым списком.
Bridge - Это мост, через который CloudNet общается с серверами. Но там тоже есть полезные настройки, например команды для хаба.
CloudFlare - Через него можно сделать мультипрокси, хоть и есть варианты получше.
Dockerized-Services - Запускайте ваши сервера, используя контейнер Docker.
NPCs - Вы можете на сервере создать и настроить npc, которые могут быть использованы для перемещения по серверам. Есть поддержка GUI. NPC обновляются на всех нужных серверах в реальном времени.
Smart - Позволяет более гибко настроить задачи. Например автоматически запускать дополнительные лобби, если все остальные переполнены.
SFTP/S3 - Добавьте поддержку внешних хранилищ, чтобы хранить шаблоны где угодно.
Rest - Поддержка REST API.
(Важно) Это только основные модули. Есть много других, в том чисое от сообщества.

Безопастность
На мой взгляд безопасность CloudNet оставляет желать лучшего. Да, тут очень мощный Driver-Api и в целом среда для разработки. Но из-за того что любая нода имеет полный доступ к другой ноде в кластере через API, то вполне возможно через вредоносный код делать что угодно со всеми серверами и тачками. Хотя любой сервер так или иначе пострадает от такого кода, независимо запущен там CloudNet или нет :)

Пожалуйста, постарайтесь хорошо обезопасить ваш сервер на стороне Linux. Не запускайте никогда ноду из-под root, настройте безопасность системы, используйте selinux / apparmor для более жесткого контроля, допускайте на продакшн-кластер только безопасный проверенный код и используйте грамотный CI/CD. Для Dev/Test серверов используйте отдельный кластер, чтобы ещё сильнее ограничить по правам разработчиков.
Автор
Mioji
Просмотры
1 740
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Поделиться ресурсом

Последние обновления

  1. Больше информации и исправление недочетов

    Обновление 1.1 Добавлен раздел про команды и консоль Добавлены фотографии Обновлена информация...

Последние рецензии

Очень подробно рассказано. Понятно для чего и как использовать этот сервис. Мне всё понравилось, спасибо большое автору!! Жалко что в румайне такое мало практикуется
Назад
Сверху Снизу