docs: update implementation plan for multi-PHP environment support

This commit is contained in:
Ümit Tunç
2026-03-28 07:31:32 +03:00
parent daf2f4dd4d
commit ea80822ee6
+51 -49
View File
@@ -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. - [ ] **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. - [ ] **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. - [ ] **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`). - [ ] **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ı. - [ ] **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) ### 1. Teknoloji Yığını ve Araçlar
Uygulama, servisleri Windows servisleri olarak kurmak yerine, taşınabilir (portable) binary'leri doğrudan `child_process.spawn` ile yönetecektir. 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. ### 2. Güvenlik Odaklı Mimari (Security-First)
- **Sürüm Algılama**: `composer.json` dosyasını parse ederek `require.php` ve `laravel/framework` sürümlerini belirler. Renderer (UI) sürecinin doğrudan sistem kaynaklarına erişimi kesinlikle engellenecektir:
- **Versiyon İzolasyonu**: Her proje için `config/projects.json` içinde sürüm eşleşmeleri tutulur. - **Context Isolation & Sandboxing**: `contextIsolation: true` ve `sandbox: true` zorunlu olarak aktif edilecek.
- **Nginx**: `bin/nginx/nginx.exe` üzerinden başlatılacak. `config/nginx/nginx.conf` dosyası uygulama tarafından dinamik olarakncellenecek. - **Preload Scripts**: Renderer ve Main arasındaki tek köprü. `contextBridge` ile sadece gerekli fonksiyonlar güvenli bir şekilde aktarılacak.
- **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. - **IPC Service Layer**: Tüm sistem işlemleri (dosya yazma, servis başlatma) `ipcMain.handle` ve `ipcRenderer.invoke` üzerinden asenkron servisler olarak kurgulanacak.
- **MySQL**: `bin/mysql/bin/mysqld.exe` ile başlatılacak. `--defaults-file=config/mysql/my.ini` parametresi kullanılacak.
### 2. Electron Mimarisi ### 3. Servis ve İşlem Yönetimi (Node.js)
- **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. - **Modüler Main Process**: Mantık `main.ts` içinde boğulmak yerine `src/main/services/`, `src/main/ipc/` gibi klasörlere ayrılacak.
- **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. - **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.
- **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. - **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) ### 4. Kullanıcı Arayüzü & i18n
Uygulamanın tamamı **Material UI (MUI)** kütüphanesi kullanılarak geliştirilecektir. - **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**: ### 5. Performans ve Bakım
- **Ana Renk (Primary)**: `#153E5E` (Koyu Lacivert/Mavi tonu) - **ASAR Integrity**: Paketleme sırasında bütünlük kontrolü aktif edilecek.
- **Yardımcı Renk (Secondary)**: `#4A7CA3` (Daha açık mavi tonu) - **Lazy Load & Startup**: V8 snapshot ve asenkron modül yükleme ile başlangıç hızı optimize edilecek.
- **Logo**: `logo\truncgil-multiphp-server.svg` yolu kullanılacak. - **Auto-Update**: Kullanıcının müdahalesine gerek kalmadan arka planda güncelleme kontrolü.
- **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ı.
## Klasör Yapısı ## Klasör Yapısı (Best Practice)
``` ```
multiphp/ multiphp/
├── bin/ # Taşınabilir uygulamalar ├── src/
│ ├── nginx/ │ ├── main/ # Ana süreç (TypeScript)
│ ├── php/ (v7.4, v8.1, v8.2...) │ ├── services/ # ProcessManager, DownloadService, ConfigService
└── mysql/ │ ├── ipc/ # IPC Handlers
├── config/ # Yapılandırma dosyası şablonları └── index.ts # Giriş noktası
│ ├── nginx/vhosts/ │ ├── preload/ # Bridge scriptleri
│ ├── php/ │ ├── renderer/ # UI (React/Vite)
└── mysql/ │ ├── components/
├── data/ # MySQL verileri (user database) │ │ ├── hooks/
├── main/ # Electron ana süreç kodları │ │ └── locales/ # tr.json, en.json...
├── ui/ # React/Vanilla JS arayüz dosyaları │ └── shared/ # Main ve Renderer ortak tipler/sabitler
├── locales/ # Dil dosyaları (tr.json, en.json, de.json) ├── bin/ # Portable binary'ler (İndirildikten sonra)
── package.json # Bağımlılıklar ve scriptler ── config/ # Şablonlar (Nginx, PHP, MySQL)
├── out/ # Build çıktıları
└── package.json
``` ```
## Doğrulama ve Test Adımları ## 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ı. 1. **İzolasyon**: Farklı PHP sürümlerinin çakışmadan çalışması.
2. **Hata Yönetimi**: Port çakışması veya binary eksikliği durumunda kullanıcıya bilgilendirme yapılması. 2. **Güvenlik Testi**: Renderer içinden Node yeteneklerine erişilemediğinin teyidi.
3. **Temiz Kapanış**: Uygulama kapandığında hiçbir zombi sürecin (zombie process) kalmadığının kontrolü. 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ı.