Разработка бэкенда
Бэкенд Pano — это сердце платформы. Он обрабатывает API-запросы, управляет базой данных, контролирует жизненные циклы интерфейса и взаимодействует с серверами Minecraft.
В документации проект может упоминаться как Pano Platform, Pano Core Platform или Pano Web Platform.
📱 Приложения в репозитории
Основной репозиторий Pano Core на самом деле содержит два отдельных приложения:
- Pano Core: Основная платформа, которая обрабатывает всю логику веб-интерфейса и управления сервером.
- Updater: Вторичное приложение, отвечающее за обновление основной платформы. Оно компилируется вместе с Pano и встраивается в итоговый
.jarфайл. Оно запускается только во время процесса обновления.
🛠️ Технологический стек
- Язык: Kotlin
- Фреймворк: Vert.x (Событийно-ориентированный, неблокирующий)
- Внедрение зависимостей: Spring DI
- База данных: MySQL 5.5+ / MariaDB
🏗️ Архитектура
Бэкенд спроектирован как модульная и отказоустойчивая система. Он поддерживает систему плагинов, позволяющую динамически добавлять или удалять функции.
Управление UI и интерфейсами
UI Manager координирует работу интерфейсов. При запуске он сканирует установленные темы и консультируется с Setup Manager. В зависимости от статуса установки запускается либо setup-ui, либо основной веб-интерфейс.
Командная система
Pano включает в себя надежную систему командной строки, которая инициализируется при запуске. Её особенности:
- История команд: Позволяет перемещаться по ранее введенным командам.
- Определения по умолчанию: Основные команды предопределены, чтобы платформой можно было управлять сразу после запуска.
Графический интерфейс (GUI)
По умолчанию Pano запускается с графическим пользовательским интерфейсом. Для запуска в безголовом режиме (например, на сервере) используйте аргумент -nogui:
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:
- Запуск: Как только ядро Pano готово,
PluginManagerинициализирует все плагины. Если плагин не отключен и соответствует всем требованиям, автоматически вызывается его методstart(). - Завершение: При выключении платформы
PluginManagerобеспечивает чистый выход, вызывая методstop()для каждого активного плагина.
Каждый бэкенд-плагин расширяет класс PanoPlugin (который реализует интерфейс PF4J Plugin).
Управление контекстом
applicationContext: Основной контекст хоста.pluginBeanContext: Контекст, специфичный для одного плагина.pluginGlobalBeanContext: Общий контекст для всех плагинов.
🚦 Процесс разработки
КОНФИГУРАЦИЯ ПРИ ПЕРВОМ ЗАПУСКЕ
После первого запуска Pano мы настоятельно рекомендуем закрыть приложение до завершения установки. Откройте созданный файл config.conf и измените порт на 8088, чтобы избежать конфликтов и обеспечить стабильную работу в процессе разработки.
- Клонируйте Core:
https://github.com/PanoMC/Pano - Настройте окружение: Убедитесь, что у вас установлена JDK 11+ и запущен MySQL/MariaDB.
- Сборка: Используйте
./gradlew buildдля компиляции проекта. - Запуск: Запустите созданный JAR или используйте
./gradlew run -Pnoguiдля разработки (запуск через Gradle без создания JAR-файла).
Режим разработки (-Pdev)
Использование параметра --dev (или -Pdev через Gradle) подключает платформу к нашим внутренним серверам разработки. Обратите внимание:
- Это актуально только в том случае, если установка еще не была выполнена.
- Доступ ограничен только авторизованным участникам.
- Если вам нужен доступ для тестирования или основной разработки, свяжитесь с нами через Discord.
- Доступ предоставляется в индивидуальном порядке и не гарантируется всем желающим.
Логи активности и разрешения
Все административные эндпоинты API должны определять Логи активности (Activity Logs) и использовать систему Разрешений, расширяя PanelPermission.
Нужна помощь? Присоединяйтесь к нашему Discord или создайте тикет на GitHub.