# 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. ## Temel Hedefler - [ ] **Ç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. - [ ] **Otomatik Konfigürasyon**: VHost, PHP.ini ve MySQL ayarlarının kullanıcı müdahalesi olmadan hazırlanması. ## Teknik Detaylar ### 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. - **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. - **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. 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. Kullanıcı Arayüzü (Material UI & Premium Tasarım) Uygulamanın tamamı **Material UI (MUI)** kütüphanesi kullanılarak geliştirilecektir. Bu, hem profesyonel bir görünüm hem de erişilebilirlik sağlayacaktır. - **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ı. - **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. ## Klasör Yapısı ``` 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ı └── package.json # Bağımlılıklar ve scriptler ``` ## 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ü.