docs: update implementation plan for multi-PHP support
This commit is contained in:
+58
-101
@@ -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.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user