76 lines
5.5 KiB
Markdown
76 lines
5.5 KiB
Markdown
# 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.
|
||
- [ ] **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.
|
||
- [ ] **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.
|
||
- **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. 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.
|
||
|
||
- **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.
|
||
|
||
## 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ü.
|