docs: update implementation plan for multi-PHP environment support
This commit is contained in:
+51
-49
@@ -13,68 +13,70 @@ Bu plan, Windows platformunda Laragon veya XAMPP benzeri, ancak Electron ile mod
|
||||
- [ ] **Proje Bazlı Sürüm Yönetimi**: Hangi projenin/dizinin hangi PHP ve MySQL sürümüyle çalışacağının tekil olarak belirlenmesi.
|
||||
- [ ] **Kurumsal Kimlik**: Belirlenen renk paleti (`#153E5E`, `#4A7CA3`) ve logo (`truncgil-multiphp-server.svg`) ile markalı bir arayüz.
|
||||
- [ ] **Otomatik Sürüm Algılama (Auto-Detect)**: Proje dizinindeki `composer.json` dosyasını analiz ederek gerekli PHP ve Laravel sürümünü otomatik tespit etme.
|
||||
- [ ] **Arkaplanda Çalışma (System Tray)**: Uygulamanın sistem tepsisinde (tray) çalışarak servisleri yönetmeye devam etmesi.
|
||||
- [ ] **Windows Servis Entegrasyonu**: Nginx, PHP ve MySQL servislerinin opsiyonel olarak Windows Servisi (`sc.exe` veya `winsw`) olarak kurulup yönetilebilmesi.
|
||||
- [ ] **Uluslararasılaştırma (i18n)**: Uygulamanın Türkçe, İngilizce ve Almanca gibi çoklu dil desteği sunması (`tr.json`, `en.json`, `de.json`).
|
||||
- [ ] **Otomatik Konfigürasyon**: VHost, PHP.ini ve MySQL ayarlarının kullanıcı müdahalesi olmadan hazırlanması.
|
||||
|
||||
## Teknik Detaylar
|
||||
## Teknik Detaylar ve Modern Yaklaşım (2026 Standartları)
|
||||
|
||||
### 1. Servis ve İndirme Yönetimi (Node.js)
|
||||
Uygulama, servisleri Windows servisleri olarak kurmak yerine, taşınabilir (portable) binary'leri doğrudan `child_process.spawn` ile yönetecektir.
|
||||
### 1. Teknoloji Yığını ve Araçlar
|
||||
Bakım kolaylığı ve tip güvenliği için proje modern araçlarla yapılandırılacaktır:
|
||||
- **Dil**: **TypeScript** (Tüm süreçlerde tip güvenliği için).
|
||||
- **Build Aracı**: **electron-vite** (Vite tabanlı, hızlı derleme ve süreç yönetimi).
|
||||
- **Framework**: **React** (veya Vue), durum yönetimi için verinin Main sürece sadık kaldığı (Single Source of Truth) bir yapı.
|
||||
- **Paketleme**: **Electron Forge** ve **electron-updater** (Otomatik güncelleme desteği için).
|
||||
|
||||
- **Download Manager**: `axios` veya `got` gibi kütüphanelerle resmi sunuculardan (windows.php.net, dev.mysql.com vb.) ZIP dosyalarını indirir ve `bin/` altına çıkartır.
|
||||
- **Sürüm Algılama**: `composer.json` dosyasını parse ederek `require.php` ve `laravel/framework` sürümlerini belirler.
|
||||
- **Versiyon İzolasyonu**: Her proje için `config/projects.json` içinde sürüm eşleşmeleri tutulur.
|
||||
- **Nginx**: `bin/nginx/nginx.exe` üzerinden başlatılacak. `config/nginx/nginx.conf` dosyası uygulama tarafından dinamik olarak güncellenecek.
|
||||
- **PHP**: Farklı sürümler `bin/php/php7.4/php-cgi.exe`, `bin/php/php8.2/php-cgi.exe` gibi yollarda bulunacak. Nginx, FastCGI (9000-9100 portları arası) üzerinden ilgili PHP sürümüne istek gönderecek.
|
||||
- **MySQL**: `bin/mysql/bin/mysqld.exe` ile başlatılacak. `--defaults-file=config/mysql/my.ini` parametresi kullanılacak.
|
||||
### 2. Güvenlik Odaklı Mimari (Security-First)
|
||||
Renderer (UI) sürecinin doğrudan sistem kaynaklarına erişimi kesinlikle engellenecektir:
|
||||
- **Context Isolation & Sandboxing**: `contextIsolation: true` ve `sandbox: true` zorunlu olarak aktif edilecek.
|
||||
- **Preload Scripts**: Renderer ve Main arasındaki tek köprü. `contextBridge` ile sadece gerekli fonksiyonlar güvenli bir şekilde aktarılacak.
|
||||
- **IPC Service Layer**: Tüm sistem işlemleri (dosya yazma, servis başlatma) `ipcMain.handle` ve `ipcRenderer.invoke` üzerinden asenkron servisler olarak kurgulanacak.
|
||||
|
||||
### 2. Electron Mimarisi
|
||||
- **Main Process**: Servislerin yaşam döngüsünü yönetir. Uygulama kapandığında tüm alt süreçlerin (Nginx, PHP, MySQL) güvenli bir şekilde sonlandırılmasını sağlar.
|
||||
- **IPC (Inter-Process Communication)**: Arayüzden gelen "Başlat/Durdur" komutlarını Main sürece iletir. Main süreçten gelen log akışını (stdout/stderr) arayüze basar.
|
||||
- **Preload Script**: Arayüz ile ana süreç arasında güvenli bir köprü kurarak hassas Node.js fonksiyonlarını kısıtlı bir şekilde dışa açar.
|
||||
### 3. Servis ve İşlem Yönetimi (Node.js)
|
||||
- **Modüler Main Process**: Mantık `main.ts` içinde boğulmak yerine `src/main/services/`, `src/main/ipc/` gibi klasörlere ayrılacak.
|
||||
- **Worker Threads**: Ağır CPU gerektiren işlemler (ZIP açma, log analizi vb.) ana süreci (Main) bloklamaması için Worker thread'lerde çalıştırılacak.
|
||||
- **Child Process & Windows Services**:
|
||||
- Servisler varsayılan olarak `child_process.spawn` ile uygulama açıkken yönetilir.
|
||||
- Kullanıcı isteğine bağlı olarak `winsw` (Windows Service Wrapper) veya benzeri bir yöntemle kalıcı Windows Servisi olarak sisteme kurulabilir.
|
||||
- **System Tray Yönetimi**:
|
||||
- Uygulama ana ekranı kapatıldığında sistem tepsisinde çalışmaya devam eder (Minimize to tray).
|
||||
- Sağ tık menüsü ile tüm servisleri "Durdur/Başlat" ve "Çıkış" seçenekleri sunulur.
|
||||
|
||||
### 3. Kullanıcı Arayüzü (Material UI & Premium Tasarım)
|
||||
Uygulamanın tamamı **Material UI (MUI)** kütüphanesi kullanılarak geliştirilecektir.
|
||||
### 4. Kullanıcı Arayüzü & i18n
|
||||
- **Material UI (MUI)**: Kurumsal kimlik renkleri (`#153E5E`, `#4A7CA3`) ile premium tasarım.
|
||||
- **i18n (Localization)**: `tr.json`, `en.json`, `de.json` dosyaları `locales/` klasöründe tutulacak. `i1ext` benzeri bir kütüphane ile hem Renderer hem de Main süreçte dil desteği sunulacak.
|
||||
- **Code Splitting**: Uygulama RAM kullanımını optimize etmek için lazy loading kullanılacak.
|
||||
|
||||
- **Kurumsal Kimlik ve Renkler**:
|
||||
- **Ana Renk (Primary)**: `#153E5E` (Koyu Lacivert/Mavi tonu)
|
||||
- **Yardımcı Renk (Secondary)**: `#4A7CA3` (Daha açık mavi tonu)
|
||||
- **Logo**: `logo\truncgil-multiphp-server.svg` yolu kullanılacak.
|
||||
- **Dashboard**: Servislerin çalışma durumu, CPU/RAM kullanımı ve aktif portlar.
|
||||
- **Log Görüntüleyici**: Her servis için ayrı sekmelerde gerçek zamanlı konsol çıktıları.
|
||||
- **Ayarlar (Settings) Ekranı**:
|
||||
- **Servis İndirme Merkezi**: Mevcut PHP, MySQL ve Nginx sürümlerini listeleyen ve tek tıkla indirme/silme imkanı sunan arayüz.
|
||||
- **Dizin ve Alias Eşleme**: Belirli bir dizine özel PHP ve MySQL sürümü atama imkanı.
|
||||
- **Akıllı Algılama**: Proje klasörü seçildiğinde "Bu proje PHP 8.1 ve Laravel 10 gerektiriyor, uygun sürümü atamak ister misiniz?" şeklinde öneri sunulması.
|
||||
- **Config Path Yönetimi**: Proje bazlı `vhost` dosyalarının otomatik oluşturulması ve düzenlenmesi.
|
||||
- **Ağ Ayarları (Listen IP/Port)**: Servislerin sadece `localhost` (127.0.0.1) üzerinden mi yoksa dışa açık (0.0.0.0) şekilde mi çalışacağının belirlenmesi.
|
||||
- **Global Ayarlar**: Port seçimleri (80, 443, 3306), PHP sürüm atamaları.
|
||||
- **Sanal Sunucu (VHost) Yönetimi**: Yeni domain ekleme ve `hosts` dosyası güncelleme.
|
||||
- **Dil Desteği (i18n)**:
|
||||
- Uygulama başlangıcında sistem dilini algılama veya kullanıcı seçimine göre `tr`, `en`, `de` dillerini yükleme.
|
||||
- Dil dosyalarının `locales/` klasörü altında JSON formatında tutulması.
|
||||
### 5. Performans ve Bakım
|
||||
- **ASAR Integrity**: Paketleme sırasında bütünlük kontrolü aktif edilecek.
|
||||
- **Lazy Load & Startup**: V8 snapshot ve asenkron modül yükleme ile başlangıç hızı optimize edilecek.
|
||||
- **Auto-Update**: Kullanıcının müdahalesine gerek kalmadan arka planda güncelleme kontrolü.
|
||||
|
||||
## Klasör Yapısı
|
||||
## Klasör Yapısı (Best Practice)
|
||||
|
||||
```
|
||||
multiphp/
|
||||
├── bin/ # Taşınabilir uygulamalar
|
||||
│ ├── nginx/
|
||||
│ ├── php/ (v7.4, v8.1, v8.2...)
|
||||
│ └── mysql/
|
||||
├── config/ # Yapılandırma dosyası şablonları
|
||||
│ ├── nginx/vhosts/
|
||||
│ ├── php/
|
||||
│ └── mysql/
|
||||
├── data/ # MySQL verileri (user database)
|
||||
├── main/ # Electron ana süreç kodları
|
||||
├── ui/ # React/Vanilla JS arayüz dosyaları
|
||||
├── locales/ # Dil dosyaları (tr.json, en.json, de.json)
|
||||
└── package.json # Bağımlılıklar ve scriptler
|
||||
├── src/
|
||||
│ ├── main/ # Ana süreç (TypeScript)
|
||||
│ │ ├── services/ # ProcessManager, DownloadService, ConfigService
|
||||
│ │ ├── ipc/ # IPC Handlers
|
||||
│ │ └── index.ts # Giriş noktası
|
||||
│ ├── preload/ # Bridge scriptleri
|
||||
│ ├── renderer/ # UI (React/Vite)
|
||||
│ │ ├── components/
|
||||
│ │ ├── hooks/
|
||||
│ │ └── locales/ # tr.json, en.json...
|
||||
│ └── shared/ # Main ve Renderer ortak tipler/sabitler
|
||||
├── bin/ # Portable binary'ler (İndirildikten sonra)
|
||||
├── config/ # Şablonlar (Nginx, PHP, MySQL)
|
||||
├── out/ # Build çıktıları
|
||||
└── package.json
|
||||
```
|
||||
|
||||
## Doğrulama ve Test Adımları
|
||||
|
||||
1. **İzolasyon**: Farklı PHP sürümlerinin aynı anda veya hızlı geçişlerle sorunsuz çalıştığının doğrulanması.
|
||||
2. **Hata Yönetimi**: Port çakışması veya binary eksikliği durumunda kullanıcıya bilgilendirme yapılması.
|
||||
3. **Temiz Kapanış**: Uygulama kapandığında hiçbir zombi sürecin (zombie process) kalmadığının kontrolü.
|
||||
1. **İzolasyon**: Farklı PHP sürümlerinin çakışmadan çalışması.
|
||||
2. **Güvenlik Testi**: Renderer içinden Node yeteneklerine erişilemediğinin teyidi.
|
||||
3. **Performans**: Başlangıç süresi ve RAM kullanım ölçümleri.
|
||||
4. **Temiz Kapanış**: Uygulama kapandığında tüm alt süreçlerin (Nginx, PHP, MySQL) sonlanması.
|
||||
|
||||
Reference in New Issue
Block a user