docs: update implementation plan for multi-PHP support

This commit is contained in:
Ümit Tunç
2026-03-28 07:36:04 +03:00
parent 166b45612d
commit 69ce832835
+58 -101
View File
@@ -1,127 +1,84 @@
# Trunçgil Multi-PHP & MySQL Server (Electron) Uygulama Planı # 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 ## 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. - [ ] **Ç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. - [ ] **MySQL/MariaDB Yönetimi**: Veritabanı servisinin uygulama içinden yönetimi.
- [ ] **Nginx Entegrasyonu**: Web sunucusu olarak Nginx kullanarak performanslı bir yapı sunulması. - [ ] **Nginx Entegrasyonu**: Yüksek performanslı web sunucusu yapılandırması.
- [ ] **Material UI (MUI)**: Tüm arayüz sisteminde modern ve standart bir görünüm için MUI kullanımı. - [ ] **Dinamik İndirme (Download Manager)**: Gerekli servis bileşenlerinin (PHP, MySQL, Nginx) uygulama içinden indirilebilmesi.
- [ ] **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ı.
## 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 ### 3. Gelişmiş Özellikler
Bakım kolaylığı ve tip güvenliği için proje modern araçlarla yapılandırılacaktır: - [ ] **VHost & Alias Yönetimi**: Özel domain ve dizin eşlemeleri.
- **Dil**: **TypeScript** (Tüm süreçlerde tip güvenliği için). - [ ] **Proje Bazlı Yönetim**: Her proje için özel PHP/MySQL sürümü atayabilme.
- **Build Aracı**: **electron-vite** (Vite tabanlı, hızlı derleme ve süreç yönetimi). - [ ] **Windows Servis Entegrasyonu**: Servislerin opsiyonel olarak arka plan servisi olarak kurulması.
- **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).
### 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) ## Teknik Mimari (2026 Standartları)
- **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.
### 4. Kullanıcı Arayüzü & i18n ### 1. Teknoloji Yığını
- **Material UI (MUI)**: Kurumsal kimlik renkleri (`#153E5E`, `#4A7CA3`) ile premium tasarım. - **Dil**: TypeScript (Uçtan uca tip güvenliği).
- **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. - **Build Aracı**: [electron-vite](https://electron-vite.org/) (Hızlı derleme ve modern süreç yönetimi).
- **Code Splitting**: Uygulama RAM kullanımını optimize etmek için lazy loading kullanılacak. - **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 ### 2. Güvenlik ve İletişim (Security-First)
- **ASAR Integrity**: Paketleme sırasında bütünlük kontrolü aktif edilecek. - **İzolasyon**: `contextIsolation: true` ve `sandbox: true` yapılandırması.
- **Lazy Load & Startup**: V8 snapshot ve asenkron modül yükleme ile başlangıç hızı optimize edilecek. - **Preload Scripts**: Renderer ve Main süreçleri arasındaki yegane güvenli köprü.
- **Auto-Update**: Kullanıcının müdahalesine gerek kalmadan arka planda güncelleme kontrolü. - **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/ multiphp/
├── locales/ # i18n JSON dosyaları (tr.json, en.json, de.json)
├── src/ ├── src/
│ ├── main/ # Ana süreç (TypeScript) │ ├── main/ # Ana süreç (Services, IPC Handlers, Tray)
│ │ ├── services/ # ProcessManager, DownloadService, ConfigService │ │ ├── services/ # ProcessManager, DownloadService, ConfigService
│ │ ── ipc/ # IPC Handlers │ │ ── ipc/ # IPC Event Handlers
│ └── index.ts # Giriş noktası ├── preload/ # ContextBridge tanımları
│ ├── preload/ # Bridge scriptleri │ ├── renderer/ # React UI (Components, Hooks, Pages)
── renderer/ # UI (React/Vite) ── shared/ # Ortak tipler, interface'ler ve sabitler
│ │ ├── components/ ├── bin/ # İndirilen portable binary'ler
│ │ ├── hooks/ ├── config/ # Servis konfigürasyon şablonları (nginx.conf, php.ini)
│ │ └── locales/ # tr.json, en.json... ├── resources/ # Statik varlıklar (Logolar, ikonlar)
│ └── shared/ # Main ve Renderer ortak tipler/sabitler
├── bin/ # Portable binary'ler (İndirildikten sonra)
├── config/ # Şablonlar (Nginx, PHP, MySQL)
├── out/ # Build çıktıları
└── package.json └── package.json
``` ```
## Doğrulama ve Test Adımları ---
1. **İzolasyon**: Farklı PHP sürümlerinin çakışmadan çalışması. ## Doğrulama ve Test Planı
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ı.
## 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 ## Kurumsal Kimlik
interface OSOperations { - **Renk Paleti**: `#153E5E` (Ana), `#4A7CA3` (İkincil).
restartService(name: string, config: any): Promise<void>; - **Logo**: `logo/truncgil-multiphp-server.svg`
editHostsFile(domain: string, ip: string): Promise<void>;
getElevatedPrivileges(): Promise<boolean>;
}
// 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.