diff --git a/implementation_plan.md b/implementation_plan.md index 4f319c7..b29d36b 100644 --- a/implementation_plan.md +++ b/implementation_plan.md @@ -1,127 +1,84 @@ # Trunçgil Multi-PHP & MySQL Server (Electron) Uygulama Planı -Bu plan, Windows platformunda Laragon veya XAMPP benzeri, ancak Electron ile modern bir arayüze sahip, çoklu PHP sürümlerini destekleyen bir geliştirme sunucusu uygulamasının yapımını kapsar. +Bu plan, Windows platformu öncelikli olmak üzere, Laragon veya XAMPP benzeri, Electron tabanlı modern bir arayüze sahip ve çoklu PHP/MySQL sürümlerini destekleyen bir geliştirme sunucusu uygulamasının yapımını kapsar. ## Temel Hedefler +### 1. Servis Yönetimi - [ ] **Çoklu PHP Desteği**: Kullanıcının istediği PHP sürümünü seçip anında aktif edebilmesi. -- [ ] **MySQL/MariaDB Yönetimi**: Veritabanı servisinin uygulama içinden başlatılıp durdurulabilmesi. -- [ ] **Nginx Entegrasyonu**: Web sunucusu olarak Nginx kullanarak performanslı bir yapı sunulması. -- [ ] **Material UI (MUI)**: Tüm arayüz sisteminde modern ve standart bir görünüm için MUI kullanımı. -- [ ] **Gelişmiş Ayarlar (Settings)**: Alias yapılandırması, VHost yönetimi ve özel dizin eşlemeleri. -- [ ] **Dinamik İndirme (Download Manager)**: Kurulumda boş gelen uygulamanın kullanıcı isteğiyle PHP, MySQL, Nginx gibi servisleri indirebilmesi. -- [ ] **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ı. +- [ ] **MySQL/MariaDB Yönetimi**: Veritabanı servisinin uygulama içinden yönetimi. +- [ ] **Nginx Entegrasyonu**: Yüksek performanslı web sunucusu yapılandırması. +- [ ] **Dinamik İndirme (Download Manager)**: Gerekli servis bileşenlerinin (PHP, MySQL, Nginx) uygulama içinden indirilebilmesi. -## Teknik Detaylar ve Modern Yaklaşım (2026 Standartları) +### 2. Kullanıcı Deneyimi ve Arayüz +- [ ] **Material UI (MUI)**: Premium, modern ve standart bir görünüm. +- [ ] **Sistem Tepsisi (Tray)**: Uygulamanın arka planda çalışarak servisleri yönetmeye devam etmesi. +- [ ] **Çoklu Dil Desteği (i18n)**: Türkçe, İngilizce ve Almanca dil seçenekleri. +- [ ] **Otomatik Sürüm Algılama**: `composer.json` analizi ile projeye uygun PHP sürümünü otomatik tespit etme. -### 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). +### 3. Gelişmiş Özellikler +- [ ] **VHost & Alias Yönetimi**: Özel domain ve dizin eşlemeleri. +- [ ] **Proje Bazlı Yönetim**: Her proje için özel PHP/MySQL sürümü atayabilme. +- [ ] **Windows Servis Entegrasyonu**: Servislerin opsiyonel olarak arka plan servisi olarak kurulması. -### 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. +--- -### 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. +## Teknik Mimari (2026 Standartları) -### 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. +### 1. Teknoloji Yığını +- **Dil**: TypeScript (Uçtan uca tip güvenliği). +- **Build Aracı**: [electron-vite](https://electron-vite.org/) (Hızlı derleme ve modern süreç yönetimi). +- **Frontend Framework**: **React** (MUI ile tam uyum için). +- **UI Kütüphanesi**: Material UI (MUI) v6+. +- **Paketleme**: Electron Forge & Electron Updater. -### 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ü. +### 2. Güvenlik ve İletişim (Security-First) +- **İzolasyon**: `contextIsolation: true` ve `sandbox: true` yapılandırması. +- **Preload Scripts**: Renderer ve Main süreçleri arasındaki yegane güvenli köprü. +- **IPC Service Layer**: Tüm sistem işlemleri (dosya yazma, servis yönetimi) asenkron IPC handler'lar üzerinden yürütülecek. -## Klasör Yapısı (Best Practice) +### 3. Platform Stratejisi (Strategy Pattern) +İşletim sistemine özel işlemler (servis başlatma, hosts düzenleme) için bir `OSOperations` interface'i kullanılacaktır: +- **Windows**: `sc.exe`, `winsw` ve `sudo-prompt` kullanımı. +- **Linux/macOS**: `systemd`, `launchd` ve `sudo` entegrasyonu. +- **Dosya Yolları**: Tüm platformlarda uyum için `path.join()` ve `os.EOL` kullanımı. + +--- + +## Klasör Yapısı (Proposed) ``` multiphp/ +├── locales/ # i18n JSON dosyaları (tr.json, en.json, de.json) ├── src/ -│ ├── main/ # Ana süreç (TypeScript) +│ ├── main/ # Ana süreç (Services, IPC Handlers, Tray) │ │ ├── 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ı +│ │ └── ipc/ # IPC Event Handlers +│ ├── preload/ # ContextBridge tanımları +│ ├── renderer/ # React UI (Components, Hooks, Pages) +│ └── shared/ # Ortak tipler, interface'ler ve sabitler +├── bin/ # İndirilen portable binary'ler +├── config/ # Servis konfigürasyon şablonları (nginx.conf, php.ini) +├── resources/ # Statik varlıklar (Logolar, ikonlar) └── package.json ``` -## Doğrulama ve Test Adımları +--- -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ı. +## Doğrulama ve Test Planı -## Platformlar Arası (Cross-Platform) Yönetim Stratejisi +### Otomatik Testler +- **Unit Tests**: `vitest` ile servis mantığının ve config jeneratörlerinin testi. +- **IPC Tests**: Main ve Renderer arasındaki iletişimin doğrulanması. -Uygulamanın Windows, macOS ve Linux üzerinde sorunsuz ve sürdürülebilir bir şekilde çalışması için "Platform Strategy Pattern" benimsenecektir. +### Manuel Doğrulama Adımları +1. **Servis İzolasyonu**: Birden fazla PHP sürümünün çakışmadan çalıştığının doğrulanması. +2. **Güvenlik Kontrolü**: Renderer sürecinden doğrudan `fs` veya `child_process` erişiminin engellendiğinin teyidi. +3. **Tray Fonksiyonelliği**: Uygulama kapatıldığında servislerin tray üzerinden yönetilebildiğinin kontrolü. +4. **i18n Doğrulaması**: Dil değişikliğinin tüm arayüzde (ana ekran, menüler, tray) anında yansıması. -### 1. Mimari Yaklaşım: Strategy Pattern -İşletim sistemine duyarlı işlemler (servis başlatma, hosts dosyası düzenleme vb.) için bir interface tanımlanacak ve her platform için ayrı sınıflar oluşturulacaktır. +--- -```typescript -interface OSOperations { - restartService(name: string, config: any): Promise; - editHostsFile(domain: string, ip: string): Promise; - getElevatedPrivileges(): Promise; -} -// WindowsOps, MacOSOps ve LinuxOps sınıfları bu arayüzü implemente eder. -``` - -### 2. Kritik Platform Farklılıkları ve Çözümler - -#### **Yetki Yönetimi (Elevated Privileges)** -- **Windows**: `sudo-prompt` veya `runas` ile admin yetkisi istenir. -- **macOS/Linux**: `sudo` veya `polkit` kullanılır. -- **Strateji**: Uygulamanın tamamını admin yapmak yerine, sadece yetki gerektiren "servis başlatma" veya "hosts yazma" gibi atomik işlemler yetki yükseltilerek (elevated) tetiklenmelidir. - -#### **Dosya Sistemi ve Yapılandırma** -- **Yollar**: Mutlaka `path.join()` kullanılacak. (Windows `\` vs Unix `/`). -- **Harf Duyarlılığı**: Linux/macOS'te `php.ini` ile `PHP.ini` farkı gözetilecek. -- **Satır Sonları**: Konfigürasyon dosyaları yazılırken Windows için `CRLF`, Unix için `LF` (`os.EOL`) kullanılacak. - -#### **Servis Yönetimi (Process Managers)** -- **Windows**: `.exe` spawn veya Windows Service (`sc.exe`/`winsw`). -- **macOS**: `launchd` (`.plist` dosyaları). -- **Linux**: `systemd` (`systemctl`). -- **Hosts Dosyası**: Windows (`C:\Windows\System32\drivers\etc\hosts`) vs Unix (`/etc/hosts`). - -#### **Paketleme ve Güvenlik (Code Signing)** -- **Windows**: Blue Screen (SmartScreen) uyarısını engellemek için **EV Code Signing Certificate**. -- **macOS**: "Uygulama hasarlı" hatasını engellemek için **Apple Notarization** (Xcode & Apple Developer ID). -- **Linux**: `.deb`, `.rpm` ve **AppImage** formatlarında dağıtım. - -#### **Terminal ve Log Akışı** -- `node-pty` kütüphanesi kullanılarak her platformda yerel terminal emülasyonu sağlanacak (Windows için `conpty` desteği). - -### 3. Geliştirme Sıralaması -**Öneri**: Geliştirmeye **Windows** platformu üzerinde başlanması (en yaygın kullanım senaryosu olduğu için), ancak `OSOperations` yapısının ilk günden kurulmasıyla macOS ve Linux desteğinin eklenti/modül olarak kolayca dahil edilmesi hedeflenmektedir. +## Kurumsal Kimlik +- **Renk Paleti**: `#153E5E` (Ana), `#4A7CA3` (İkincil). +- **Logo**: `logo/truncgil-multiphp-server.svg`