# V1 Release / Canlıya Geçiş Kılavuzu

Bu kılavuz, e-ticaret uygulamasının canlı (production) ortamlara sorunsuz şekilde kurulması ve dağıtım (deployment) paketinin hazırlanması için gereken adımları ve kontrol listesini içerir.

---

## 1. Sunucu Gereksinimleri

Uygulamanın çalışacağı sunucuda aşağıdaki gereksinimlerin karşılanmış olması zorunludur:
- **PHP Sürümü:** En az PHP 8.2.0 veya üzeri.
- **PHP Uzantıları:** `pdo`, `pdo_mysql`, `openssl`, `mbstring`, `tokenizer`, `xml`, `ctype`, `json`, `curl`, `gd`, `zip`, `fileinfo` yüklü ve aktif olmalıdır.
- **Yazma Yetkileri:** Aşağıdaki dizinlerin web sunucusu kullanıcısı (`www-data`, `nobody` vb.) tarafından yazılabilir (`chmod 775` veya `777`) olması gerekir:
  - `storage/` (ve tüm alt klasörleri)
  - `bootstrap/cache/`

---

## 2. Satış ve Deploy Paketleme Kuralları

Paketleme şekli, uygulamanın sunucuya nasıl kurulacağına bağlı olarak iki farklı yönteme ayrılır:

### [Yöntem A] Sunucuda Composer Çalıştırılacaksa (Önerilen)
* **Açıklama:** Sunucu üzerinde terminal erişimi (SSH) varsa ve Composer kurulabiliyorsa bu yöntem tercih edilmelidir.
* **Pakete Dahil Edilecekler:**
  - Tüm Laravel proje dosyaları (app, bootstrap, config, database, routes, resources vb.).
  - `public/install.php` (Gereksinim ön kontrolü için).
  - `public/build/` (Vite production asset'leri - `npm run build` sonrasında üretilen dosyalar).
  - `.env.example` ve `.env.production.example` (Kullanıcıya örnek olması için).
* **Pakete Dahil Edilmeyecekler (Dışlanacaklar):**
  - `vendor/` klasörü (Sunucuda yüklenecektir).
  - `node_modules/` klasörü.
  - `.env` (Local geliştirme ayarları gitmemelidir).
  - `storage/app/installed.lock` (Yeni kurulumun tetiklenmesi için).
  - `lisans_sunucu/` klasörü (Local test klasörüdür, pakete dahil edilmez).
  - `.env.backup.*` yedekleri ve test veritabanı dosyaları.
* **Sunucu Kurulum Adımı:**
  - Paket sunucuya açıldıktan sonra ana dizinde:
    `composer install --no-dev --optimize-autoloader`
    komutu çalıştırılmalıdır.

---

### [Yöntem B] Hazır ZIP / Satış Paketi Hazırlanacaksa (SSH Erişimi Olmayan Sunucular)
* **Açıklama:** Kullanıcıların SSH veya terminal erişimi olmadığı paylaşımlı (CPanel/Plesk) hosting durumlarında bu paket dağıtılmalıdır.
* **Paketleme Öncesi Local Hazırlık:**
  - Local terminalinizde proje kök dizininde şu komutları çalıştırın:
    `composer install --no-dev --optimize-autoloader`
    `npm run build`
* **Pakete Dahil Edilecekler:**
  - `vendor/` klasörü (Yukarıdaki local kurulum yapılmış haliyle).
  - `public/build/` (Derlenmiş Vite dosyaları).
  - `public/install.php` ve tüm ana Laravel kodları.
  - `.env.example` ve `.env.production.example` dosyaları.
* **Pakete Dahil Edilmeyecekler (Dışlanacaklar):**
  - `node_modules/` klasörü.
  - Dev/Test paketleri (composer --no-dev sayesinde elenmiştir).
  - `.env` ve `storage/app/installed.lock`.
  - `lisans_sunucu/` klasörü (Kesinlikle silinmelidir).
  - `storage/app/backups/*` ve `.env.backup.*` dosyaları.

---

## 3. Canlı Ortam Güvenlik ve Yapılandırma Ayarları

Canlı yayına geçiş öncesinde `.env` dosyasında aşağıdaki ayarların kontrol edilmesi kritik önem taşır:
- **`APP_ENV=production`** (Canlı çalışma modu).
- **`APP_DEBUG=false`** (Hata detaylarının dışarıya sızmasını engellemek için **kesinlikle false** olmalıdır).
- **`APP_URL`** (Kullanıcının gerçek site URL'si tam ve doğru girilmelidir).
- **Dosya Güvenliği:** Web sunucusu (Apache veya Nginx) yapılandırmasında root (kök) dizin olarak projenin ana klasörü değil, doğrudan **`public/`** klasörü gösterilmelidir. Bu sayede `.env` ve `vendor/` gibi hassas sistem dosyalarına dışarıdan direkt erişim engellenir.
- **Symlink Oluşturma:** Dosya yüklemelerinin çalışabilmesi için `php artisan storage:link` komutu çalıştırılmalı veya paylaşımlı hostinglerde panel üzerinden symlink oluşturulmalıdır.

---

## 4. Yayın Öncesi Kontrol Listesi (Checklist)

| Adım | İşlem | Durum | Not |
| :--- | :---: | :---: | :--- |
| **1** | `installed.lock` dosyasının pakette olmadığından emin ol. | **[ ]** | Olursa sihirbaz açılmaz. |
| **2** | `.env` dosyasının pakette olmadığından emin ol. | **[ ]** | Geliştirici bilgileri sızmamalı. |
| **3** | `lisans_sunucu/` klasörünün paketten çıkarıldığını doğrula. | **[ ]** | Canlı pakette olmamalıdır. |
| **4** | `public/build` klasörünün güncel derleme içerdiğini teyit et. | **[ ]** | Aksi halde arayüz yüklenmez. |
| **5** | Test ve demo amaçlı ZIP/yedek dosyalarını temizle. | **[ ]** | Gereksiz yer kaplamaması için. |
| **6** | `public/install.php` dosyasının yerinde olduğunu kontrol et. | **[ ]** | Kurulumun başlaması için gereklidir. |
| **7** | `APP_DEBUG=false` olduğunu dokümante et. | **[ ]** | Canlıda hata gösterimi kapalı olmalı. |
