Skip to content

Разработка бэкенда

Бэкенд Pano — это сердце платформы. Он обрабатывает API-запросы, управляет базой данных, контролирует жизненные циклы интерфейса и взаимодействует с серверами Minecraft.

В документации проект может упоминаться как Pano Platform, Pano Core Platform или Pano Web Platform.

📱 Приложения в репозитории

Основной репозиторий Pano Core на самом деле содержит два отдельных приложения:

  1. Pano Core: Основная платформа, которая обрабатывает всю логику веб-интерфейса и управления сервером.
  2. Updater: Вторичное приложение, отвечающее за обновление основной платформы. Оно компилируется вместе с Pano и встраивается в итоговый .jar файл. Оно запускается только во время процесса обновления.

🛠️ Технологический стек

  • Язык: Kotlin
  • Фреймворк: Vert.x (Событийно-ориентированный, неблокирующий)
  • Внедрение зависимостей: Spring DI
  • База данных: MySQL 5.5+ / MariaDB

🏗️ Архитектура

Бэкенд спроектирован как модульная и отказоустойчивая система. Он поддерживает систему плагинов, позволяющую динамически добавлять или удалять функции.

Управление UI и интерфейсами

UI Manager координирует работу интерфейсов. При запуске он сканирует установленные темы и консультируется с Setup Manager. В зависимости от статуса установки запускается либо setup-ui, либо основной веб-интерфейс.

Командная система

Pano включает в себя надежную систему командной строки, которая инициализируется при запуске. Её особенности:

  • История команд: Позволяет перемещаться по ранее введенным командам.
  • Определения по умолчанию: Основные команды предопределены, чтобы платформой можно было управлять сразу после запуска.

Графический интерфейс (GUI)

По умолчанию Pano запускается с графическим пользовательским интерфейсом. Для запуска в безголовом режиме (например, на сервере) используйте аргумент -nogui:

bash
java -jar Pano.jar -nogui

Внедрение зависимостей (Spring DI)

Мы используем Spring DI для управления компонентами. Все бины определяются в SpringConfig в соответствии с требованиями к их использованию. Мы используем ленивую загрузку (@Lazy) там, где это уместно, чтобы ускорить время запуска.

🔌 Инициализация интерфейса (init-ui)

Если в конфигурации init-ui явно не установлено значение false, Pano автоматически попытается запустить интерфейсы по умолчанию, включенные в репозиторий.

  • Проксирование: Обратный прокси Pano будет направлять трафик только на эти внутренне управляемые экземпляры, даже если другие экземпляры интерфейса запущены извне.
  • Примечание для среды разработки: Если init-ui включен и Pano завершает работу некорректно (например, при сбое или принудительном завершении), базовые службы Bun для интерфейсов могут продолжать работать в фоновом режиме.

Жизненный цикл плагинов и PF4J

Pano использует PF4J (Plugin Framework for Java) для своей надежной системы плагинов. Жизненный цикл плагинов управляется PluginManager:

  1. Запуск: Как только ядро Pano готово, PluginManager инициализирует все плагины. Если плагин не отключен и соответствует всем требованиям, автоматически вызывается его метод start().
  2. Завершение: При выключении платформы PluginManager обеспечивает чистый выход, вызывая метод stop() для каждого активного плагина.

Каждый бэкенд-плагин расширяет класс PanoPlugin (который реализует интерфейс PF4J Plugin).

Управление контекстом

  • applicationContext: Основной контекст хоста.
  • pluginBeanContext: Контекст, специфичный для одного плагина.
  • pluginGlobalBeanContext: Общий контекст для всех плагинов.

🚦 Процесс разработки

КОНФИГУРАЦИЯ ПРИ ПЕРВОМ ЗАПУСКЕ

После первого запуска Pano мы настоятельно рекомендуем закрыть приложение до завершения установки. Откройте созданный файл config.conf и измените порт на 8088, чтобы избежать конфликтов и обеспечить стабильную работу в процессе разработки.

  1. Клонируйте Core: https://github.com/PanoMC/Pano
  2. Настройте окружение: Убедитесь, что у вас установлена JDK 11+ и запущен MySQL/MariaDB.
  3. Сборка: Используйте ./gradlew build для компиляции проекта.
  4. Запуск: Запустите созданный JAR или используйте ./gradlew run -Pnogui для разработки (запуск через Gradle без создания JAR-файла).

Режим разработки (-Pdev)

Использование параметра --dev (или -Pdev через Gradle) подключает платформу к нашим внутренним серверам разработки. Обратите внимание:

  • Это актуально только в том случае, если установка еще не была выполнена.
  • Доступ ограничен только авторизованным участникам.
  • Если вам нужен доступ для тестирования или основной разработки, свяжитесь с нами через Discord.
  • Доступ предоставляется в индивидуальном порядке и не гарантируется всем желающим.

Логи активности и разрешения

Все административные эндпоинты API должны определять Логи активности (Activity Logs) и использовать систему Разрешений, расширяя PanelPermission.


Нужна помощь? Присоединяйтесь к нашему Discord или создайте тикет на GitHub.