- Поддерживаемые версии
- 1.7
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- 1.14
- 1.15
- 1.16
- 1.17
- 1.18
- 1.19
- 1.20
- 1.21
Требования
ОС: Использую Ubuntu / Debian
Java: Мин. 22 для Nightly
Системные требования:
На фото одно из возможных схем. Понятное дело, что вы можете, например, на узле2 разместить только сервера и подключить их к прокси на узле1. Все зависит от вашей реализации проекта. CloudNet может похвастаться очень гибкими настройками автоматизации и сервисов. Функций и тонкостей тут настолько много, что одним гайдом не описать все возможности, по этому в этом гайде я расскажу как поднять свою первую ноду и использовать стандартный функционал. Технология раскрывается во всех красках, если вы разработчик и можете дополнить своим контентом.
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). Хотя в любом случае я настоятельно рекомендую сразу же подключать базу данных.
Команды
config.json - Основные настройки. Давайте разберем пару моментов.
Lobby и Proxy принято создавать временными. Ниже я приведу пример настройки этих серверов и разберу конфигурацию.
Global/Global-Server - Сюда я загружаю jar файлы Server-Network, Server-Core, ViaVersion, Spark и LuckPerms в папку plugins, ведь они мне нужны на всех серверах самой последней версии.
Global/Global-Proxy - Аналогично, но с другими плагинами.
Lobby - Все настройки, карта и требуемые плагины/конфиги.
Proxy - Аналогично.
Build - Это статический билд-сервер, но все же я залил некоторые файлы т.к у меня не один сервер, хоть это необязательно, ведь для статичных сервисов создается отдельная папка.
MapService - Это отдельный самописный сервис карт. Вы также можете разворачивать свои jar файлы/сервисы помимо обычного маинкрафта, но это требует некоторых знаний программирования.
SyncProxy - Управляйте Proxy, TabList, Motd и настраивайте режим обслуживания с белым списком.
Bridge - Это мост, через который CloudNet общается с серверами. Но там тоже есть полезные настройки, например команды для хаба.
CloudFlare - Через него можно сделать мультипрокси, хоть и есть варианты получше.
Dockerized-Services - Запускайте ваши сервера, используя контейнер Docker.
NPCs - Вы можете на сервере создать и настроить npc, которые могут быть использованы для перемещения по серверам. Есть поддержка GUI. NPC обновляются на всех нужных серверах в реальном времени.
Smart - Позволяет более гибко настроить задачи. Например автоматически запускать дополнительные лобби, если все остальные переполнены.
SFTP/S3 - Добавьте поддержку внешних хранилищ, чтобы хранить шаблоны где угодно.
Rest - Поддержка REST API.
(Важно) Это только основные модули. Есть много других, в том чисое от сообщества.
Пожалуйста, постарайтесь хорошо обезопасить ваш сервер на стороне Linux. Не запускайте никогда ноду из-под root, настройте безопасность системы, используйте selinux / apparmor для более жесткого контроля, допускайте на продакшн-кластер только безопасный проверенный код и используйте грамотный CI/CD. Для Dev/Test серверов используйте отдельный кластер, чтобы ещё сильнее ограничить по правам разработчиков.
ОС: Использую Ubuntu / Debian
Java: Мин. 22 для Nightly
Системные требования:
- Минимум: 128MB RAM для работы одного кластера CloudNet, 2GB RAM / 2 Ядра процессора для работы серверов в кластере
- Рекомендуется: 512MB RAM для CloudNet и 8GB+ RAM / 4+ Ядра процессора
Что это и кому нужно?
CloudNet позволяет вам связать сервера в Ноды (Узлы), которые могут общаться и работать с другими нодами, размещенные даже на другом хостинге. Со всеми нодами можно работать через единую консоль, либо команду /cloud прямо в игре. Одно из преимуществ CloudNet - это возможность создания системы приближенной к децентрализованной. Если упадет ваша Head Node (Главная нода), запасная может принять на себя удар и поднять нужные сервера через настройки.На фото одно из возможных схем. Понятное дело, что вы можете, например, на узле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.
3. Скачайте CloudNet командой wget https://github.com/CloudNetService/CloudNet/releases/download/4.0.0-RC10/CloudNet.zip
4. Распакуйте скачанный архив командой unzip CloudNet.zip
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. Здесь вы сможете легко управлять всеми серверами и возможностями облачной технологии. Я постараюсь описать и объяснить каждую команду.Команды
Управляет версиями сервисов в шаблонах или на статических сервисах.
Подкоманды:
[*] installstatic <serviceName> <versionType> <version> [—force | —no-cache | —executable [executable]] - Устанавливает версию для статического сервиса.
[*] installtemplate <template> <versionType> <version> [—force | —no-cache | —executable [executable]] - Устанавливает версию для шаблона.
[*] list [versionType] - Выводит список доступных версий.
Подкоманды:
[*] 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 - Синхронизирует состояние кластера.
Подкоманды:
[*] 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] - Выводит список шаблонов.
Подкоманды:
[*] 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 - Выводит список групп.
Подкоманды:
[*] 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, задаче или группе.
Подкоманды:
[*] <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> - Переименовывает задачу.
Подкоманды:
[*] create <name> <environment> - Создаёт новую задачу.
[*] delete <name> - Удаляет задачу.
[*] list - Выводит список задач.
[*] rename <oldName> <newName> - Переименовывает задачу.
Создаёт одну или несколько новых служб на основе задачи или полностью независимых.
Подкоманды:
[*] by <task> <amount> [—start | —id [id] | —javaCommand [javaCommand] | —node [node] | —memory [memory]] - Создаёт сервисы по заданной задаче.
Подкоманды:
[*] by <task> <amount> [—start | —id [id] | —javaCommand [javaCommand] | —node [node] | —memory [memory]] - Создаёт сервисы по заданной задаче.
Позволяет мигрировать данные, известные CloudNet, между различными базами данных.
Подкоманды:
[*] database <database-from> <database-to> [—chunk-size [chunk-size]] - Мигрирует данные из одной базы в другую.
Подкоманды:
[*] 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 - Перезагружает конфигурацию.
Подкоманды:
[*] 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> - Удаляет имя из белого списка целевой группы.
Подкоманды:
[*] 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 - Выводит список зарегистрированных игроков.
Подкоманды:
[*] 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> - Устанавливает необходимые разрешения для задачи.
Подкоманды:
[*] 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> - Устанавливает установщик шаблонов для задачи.
Подкоманды:
[*] 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> - Удаляет том из задачи.
Подкоманды:
[*] 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.
Подкоманды:
[*] 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).
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.
По умолчанию у вас уже будут созданы некоторые группы, например 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 - Загружает файлы из-вне перед загрузкой сервиса.
deployments - После остановки сервера копирует файлы/папки в указанный шаблон, дабы их сохранить.
requiredPermission - Требуемые права для подключение к сервису. Полезно, если хотите сделать Premium сервера или сервера для персонала.
smartConfig - Настройки для умного модуля. Кстати, очень полезная вещь, в следующем гайде разберу все модули и фишки в реальных условиях.
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”: [
{
“template”: {
“prefix”: “Lobby”,
“name”: “default”,
“storage”: “local”,
“alwaysCopyToStaticServices”: false
},
“excludes”: [
“whitelist.yml”,
“log.txt”
],
“properties”: {}
}
],
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
Код:
lang
plugins
forwarding.secret
velocity.jar
velocity.toml
Код:
config
emotes
plugins
bukkit.yml
pufferfish.yml
purpur.jar
purpur.yml
server.properties
spigot.yml
Код:
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 серверов используйте отдельный кластер, чтобы ещё сильнее ограничить по правам разработчиков.