Backend Geliştirme
Pano backend'i platformun kalbidir. API isteklerini yönetir, veritabanını idare eder, UI yaşam döngülerini kontrol eder ve Minecraft sunucularıyla iletişim kurar.
Dokümantasyon genelinde proje; Pano Platform, Pano Core Platform veya Pano Web Platform olarak anılabilir.
📱 Depo Uygulamaları
Ana Pano Core deposu aslında iki ayrı uygulama barındırır:
- Pano Core: Tüm web ve sunucu yönetimi mantığını yürüten ana platform.
- Updater: Ana platformu güncellemekten sorumlu ikincil uygulama. Pano ile birlikte derlenir ve nihai
.jardosyası içine eklenir. Sadece güncelleme işlemi sırasında çalışır.
🛠️ Teknoloji Yığını
- Dil: Kotlin
- Framework: Vert.x (Olay tabanlı, engellemesiz)
- Bağımlılık Enjeksiyonu: Spring DI
- Veritabanı: MySQL 5.5+ / MariaDB
🏗️ Mimari
Backend, modüler ve esnek bir yapıda tasarlanmıştır. Özelliklerin dinamik olarak eklenebileceği veya kaldırılabileceği bir eklenti (plugin) sistemini destekler.
UI ve Arayüz Yönetimi
UI Manager, arayüzlerin nasıl sunulduğunu yönetir. Başlangıçta kurulu temaları tarar ve Setup Manager'a danışır. Kurulum durumuna göre ya setup-ui'ı ya da ana web arayüzünü ayağa kaldırır.
Komut Sistemi
Pano, başlatma sırasında aktive olan güçlü bir komut satırı sistemine sahiptir:
- Komut Geçmişi (Command History): Önceki komutlar arasında gezinmeye olanak tanır.
- Varsayılan Tanımlamalar: Platformun başlatıldığı andan itibaren yönetilebilir olması için çekirdek komutlar önceden tanımlanmıştır.
Grafik Arayüzü (GUI)
Pano varsayılan olarak bir grafik kullanıcı arayüzü ile başlar. Sunucu ortamlarında terminal üzerinden (headless) çalıştırmak için -nogui argümanını kullanın:
java -jar Pano.jar -noguiBağımlılık Enjeksiyonu (Spring DI)
Bileşen yönetimi için Spring DI kullanıyoruz. Tüm bean'ler, kullanım gereksinimlerine göre SpringConfig içinde tanımlanır. Başlangıç süresini optimize etmek için uygun yerlerde Lazy Loading (@Lazy) kullanılır.
🔌 Arayüz İlklendirme (init-ui)
init-ui yapılandırması açıkça false yapılmadığı sürece, Pano depoda bulunan varsayılan arayüzleri otomatik olarak ayağa kaldırır.
- Proxy İşlemi: Pano'nun ters proxy'si, dışarıda açık başka arayüzler olsa dahi sadece bu yönetilen örneklere trafik yönlendirir.
- Geliştirme Ortamı Notu: Eğer
init-uiaktifse ve Pano düzgün kapatılmazsa (çökme veya zorla kapatma gibi), arayüzlerin arkasındaki Bun servisleri arkaplanda açık kalmaya devam edebilir.
Eklenti Yaşam Döngüsü ve PF4J
Pano, güçlü eklenti sistemi için PF4J (Plugin Framework for Java) kullanır. Eklenti yaşam döngüsü PluginManager tarafından yönetilir:
- Başlatma: Pano Core hazır olduktan sonra
PluginManagertüm eklentileri ilklendirir. Eğer bir eklenti devre dışı (disabled) değilse ve gerekli gereksinimleri (requirements) karşılıyorsa,start()metodu otomatik olarak çağrılır. - Kapatma: Platform kapatılırken,
PluginManagerher aktif eklenti içinstop()metodunu çağırarak güvenli bir çıkış sağlar.
Her backend eklentisi PanoPlugin sınıfını genişletir (bu sınıf PF4J Plugin arayüzünü uygular).
Bağlam (Context) Yönetimi
applicationContext: Ana ana bilgisayar bağlamı.pluginBeanContext: Tek bir eklentiye özgü bağlam.pluginGlobalBeanContext: Tüm eklentiler arasında paylaşılan bağlam.
🚦 Geliştirme Akışı
İLK ÇALIŞTIRMA YAPILANDIRMASI
Pano'yu ilk kez çalıştırdıktan sonra, kurulumu tamamlamadan önce uygulamayı kapatmanızı şiddetle öneririz. Oluşturulan config.conf dosyasını açın ve çakışmaları önlemek ve sorunsuz bir geliştirme deneyimi sağlamak için portu 8088 olarak değiştirin.
- Core'u Klonlayın:
https://github.com/PanoMC/Pano - Ortamı Kurun: JDK 11+ ve bir MySQL/MariaDB örneğine sahip olduğunuzdan emin olun.
- Derleme: Projeyi derlemek için
./gradlew buildkullanın. - Çalıştırma: Oluşturulan JAR'ı çalıştırın veya geliştirme için
./gradlew run -Pnoguikomutunu kullanın (Gradle ile JAR oluşturmadan çalıştırır).
Geliştirme Modu (-Pdev)
--dev parametresi (veya Gradle ile -Pdev) kullanıldığında platform dahili geliştirme sunucularımıza bağlanır. Lütfen unutmayın:
- Bu parametre sadece kurulum henüz yapılmamışsa geçerlidir.
- Bu sunuculara erişim sadece yetkili kişilerle sınırlandırılmıştır.
- Test veya çekirdek geliştirme için erişime ihtiyacınız varsa Discord üzerinden bizimle iletişime geçin.
- Yetki, duruma göre değerlendirilir ve herkese koşulsuz şartsız verilmez.
Aktivite Günlükleri ve İzinler
Tüm yönetimsel API uç noktaları Aktivite Günlükleri (Activity Logs) tanımlamalı ve PanelPermission sınıfını genişleterek İzin sistemini kullanmalıdır.
Yardıma mı ihtiyacınız var? Discord kanalımıza katılın veya GitHub'da bir konu (issue) açın.