diff --git a/implementation_plan.md b/implementation_plan.md index 2c90031..6fd1055 100644 --- a/implementation_plan.md +++ b/implementation_plan.md @@ -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ı.