# FAZ 0 + FAZ 1 — Temizlik, Marka Değişimi ve cPanel Kurulumu

Sırayla uygula. Her adımın sonunda ne görmen gerektiğini yazdım.

---

## Adım 1 — Yedeği yerelde temizle (yükleme öncesi)

Elindeki arşiv 848 MB açılıyor ama **273 MB'ı işe yaramaz debug dosyası.**

Silinecekler:
```
storage/debugbar/*          ← 434 dosya, 273 MB. Tamamı silinir.
storage/logs/*.log          ← 7 dosya. Silinir.
storage/framework/cache/*   ← silinir (klasör kalsın)
storage/framework/views/*   ← silinir (klasör kalsın)
storage/framework/sessions/* ← silinir (klasör kalsın)
bootstrap/cache/*.php       ← silinir
.env                        ← YÜKLEME. Sunucuda yenisini oluşturacağız.
```

**`vendor/` klasörünü SİLME.** İçinde 36.418 dosya var ve arşivde geliyor — bu sayede
cPanel'de `composer install` çalıştırmak zorunda kalmıyorsun. Paylaşımlı hostingde
composer çoğu zaman bellek limitine takıldığı için bu büyük avantaj.

Temizlik sonrası arşiv ~570 MB'a düşer. cPanel File Manager'ın yükleme limitine
takılırsan arşivi parçalı yükle veya FTP kullan.

---

## Adım 2 — cPanel ön koşulları

**PHP sürümü:** MultiPHP Manager → alan adını seç → **PHP 8.3** (8.2 de olur, 8.1 ve altı çalışmaz).

**PHP uzantıları** (MultiPHP INI Editor veya "Select PHP Version" → Extensions):
```
curl  gd  json  pdo_mysql  zip  mbstring  openssl  fileinfo
intl  bcmath  exif  tokenizer  xml  ctype
```
`intl` ve `exif` sıkça kapalı gelir — ikisi de zorunlu.

**PHP ayarları** (MultiPHP INI Editor):
```
memory_limit         = 512M
upload_max_filesize  = 64M
post_max_size        = 64M
max_execution_time   = 300
max_input_vars       = 5000
```

**Kritik kontrol:** `exec` ve `proc_open` fonksiyonları **açık** olmalı. Bazı paylaşımlı
hostingler `disable_functions` ile kapatır. Kapalıysa artisan komutlarını
çalıştıramazsın — kurulum yapılamaz. Hosting desteğine sor, açtırılamıyorsa
**hosting değiştir.** Bu, sonradan çözülebilecek bir şey değil.

---

## Adım 3 — Dosya yapısı (bu kısmı doğru kur)

Laravel'in **kök dizini web'e açık olmamalı.** Doğru yapı:

```
/home/kullanici/
├── magostore/                ← uygulama kökü (web'den erişilemez)
│   ├── app/  config/  platform/  vendor/  storage/  bootstrap/
│   ├── artisan
│   ├── .env
│   └── public/            ← alan adının document root'u BURAYI göstermeli
└── public_html/           ← kullanılmaz (veya magostore/public'e symlink)
```

**Document root ayarı:** cPanel → Domains → alan adının yanındaki düzenleme →
Document Root = `/home/kullanici/magostore/public`

Bunu yapamıyorsan (bazı hostingler izin vermez), plan B: `public/` içeriğini
`public_html/` altına koy ve `public_html/index.php` içindeki iki `require` yolunu
`../magostore/` işaret edecek şekilde düzelt. Daha kırılgan, mümkünse plan A'yı kullan.

---

## Adım 4 — Veritabanı

1. cPanel → MySQL Databases → yeni veritabanı oluştur
2. Yeni kullanıcı oluştur, veritabanına **ALL PRIVILEGES** ile ata
3. phpMyAdmin → veritabanını seç → Import → `cashiwa_Cashiwa.sql` dosyasını yükle

Dosya 898 KB, import sorunsuz geçer. Bittiğinde **169 tablo** görmelisin.
Az görürsen import yarıda kesilmiş — phpMyAdmin yerine cPanel Terminal'den:
```bash
mysql -u KULLANICI -p VERITABANI < cashiwa_Cashiwa.sql
```

---

## Adım 5 — .env dosyası

`env.magostore.example` dosyasını uygulama kökünde **`.env`** olarak kaydet ve doldur.

Doldururken dikkat:

| Alan | Not |
|---|---|
| `APP_KEY` | Eski yedeğindeki değeri **aynen** kopyala. Yeni üretirsen şifreli veriler bozulur. |
| `ADMIN_DIR` | `panel` bırakma. Tahmin edilebilir admin yolu bot saldırılarının ilk hedefi. |
| `APP_DEBUG` | `false`. Eski yedekte `true` idi ve `APP_ENV=production` ile birlikteydi — bu kombinasyon hata ekranında DB kullanıcı adını, dosya yollarını, hatta `.env` değerlerini gösterir. |
| `SESSION_SECURE_COOKIE` | SSL kuruluysa `true`. |
| `QUEUE_CONNECTION` | `database`. `sync` bırakırsan sipariş e-postaları ödeme adımını yavaşlatır. |

---

## Adım 6 — İzinler

cPanel Terminal veya SSH:
```bash
cd ~/magostore
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chmod -R 775 storage bootstrap/cache
chmod 600 .env
chmod +x artisan
```

`.env` için 600 önemli — 644 bırakırsan aynı sunucudaki başka hesaplar okuyabilir.

---

## Adım 7 — Marka değişimi

`magostore-rebrand.php` dosyasını uygulama köküne (artisan'ın yanına) koy.

Önce ön izleme — hiçbir şeyi değiştirmez, ne yapacağını gösterir:
```bash
cd ~/magostore
php magostore-rebrand.php
```

Çıktıda 6 dosya için "değişecek" görmelisin. Sonra uygula:
```bash
php magostore-rebrand.php --apply
php artisan optimize:clear
```

Betik değiştirdiği her dosyayı `.rebrand-backup/` altına yedekler.
Bir şey ters giderse: `php magostore-rebrand.php --restore`

Betik sonunda kalan "botble" satırlarını tarayıp listeler. Listede kalanlar
lisans doğrulama kodu ve PHP namespace'leri olacak — **bunlar hiçbir kullanıcıya
görünmez** ve değiştirilmemeli:
- `Botble\...` namespace'leri: 3.189 dosya. Değiştirirsen composer autoload çöker,
  ayrıca güncelleme alma imkânın kalmaz.
- `theme.json` içindeki `id` ve `namespace`: tema çözümleyicisi bunları kullanır.
- `core/base/src/Supports/Core.php` ve `MembershipAuthorization.php`: lisans doğrulama.
  Lisansını normal yoldan aktive et.

---

## Adım 8 — Panelden görünen marka

Kalan branding kod değil, veritabanı ayarı. Panele gir (`https://alanadin.com/<ADMIN_DIR>`)
ve şunları değiştir:

- **Ayarlar → Genel:** Site adı, Admin başlığı (`Magostore Marketplace`), yönetici e-postası
- **Görünüm → Logo:** site logosu, admin logosu, favicon
- **Ayarlar → E-posta:** gönderen adı ve adresi
- **Ayarlar → SEO:** varsayılan meta başlık şablonu

Admin panelinin altındaki telif satırı `Admin başlığı` alanından besleniyor —
orayı değiştirdiğinde otomatik düzelir.

---

## Adım 9 — Cron görevleri

cPanel → Cron Jobs. **İki kayıt** ekle. `KULLANICI` ve PHP yolunu kendine göre düzelt
(PHP yolunu bulmak için: `which php` veya cPanel'de "Select PHP Version" sayfasındaki yol).

**1) Zamanlayıcı — her dakika:**
```
* * * * * /usr/local/bin/php /home/KULLANICI/magostore/artisan schedule:run >/dev/null 2>&1
```

**2) Kuyruk işçisi — her dakika, 55 saniye çalışıp kendini kapatır:**
```
* * * * * /usr/local/bin/php /home/KULLANICI/magostore/artisan queue:work --stop-when-empty --max-time=55 >/dev/null 2>&1
```

İkincisi paylaşımlı hostingde kalıcı worker çalıştıramadığın için gereken çözüm.
`--max-time=55` sayesinde işler üst üste binmez.

---

## Adım 10 — Son kurulum komutları

```bash
cd ~/magostore
php artisan storage:link
php artisan optimize:clear
php artisan cms:theme:activate farmart
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

`cms:theme:activate` hata verirse tema zaten aktif demektir, sorun değil.

**Not:** `config:cache` çalıştırdıktan sonra `.env`'de bir şey değiştirirsen
tekrar `php artisan config:cache` çalıştırman şart, yoksa değişiklik görünmez.
Bu, canlıda en sık kaybedilen yarım saattir.

---

## Adım 11 — Kontrol listesi

Kurulum sonrası tek tek doğrula:

- [ ] Ana sayfa açılıyor, HTTPS yeşil
- [ ] `https://alanadin.com/<ADMIN_DIR>` panel açılıyor
- [ ] `https://alanadin.com/panel` **404 veriyor** (ADMIN_DIR değiştiyse vermeli)
- [ ] Panelde hiçbir yerde "Botble" veya "Cashiwa" yazmıyor
- [ ] Sayfa kaynağında (Ctrl+U) "botble" araması sonuç vermiyor
- [ ] Kasten bir hata üret (olmayan bir URL'e git) → **hata detayı görünmüyor**, sadece genel hata sayfası
- [ ] Test e-postası gidiyor (Ayarlar → E-posta → Test)
- [ ] Bir ürün ekle, sepete at, ödeme adımına kadar git
- [ ] Satıcı kaydı yap → panelde onay bekleyen satıcı görünüyor
- [ ] `storage/logs/` içinde yeni hata birikmiyor
- [ ] `.env` tarayıcıdan erişilemiyor (`alanadin.com/.env` → 403/404)

Son madde başarısız olursa document root'u yanlış kurmuşsun, Adım 3'e dön.

---

## Sonra ne olacak

Bu paket bittiğinde elinde **markası tamamen Magostore olan, güvenli yapılandırılmış,
çalışan bir çok satıcılı pazaryeri** olacak. Trendyol listesinin ~%40'ı burada hazır.

Faz 2 kod değil karar fazı: komisyon oranları, hakediş süresi, iade kuralları, sözleşme
metinleri. Bunlar netleşmeden Faz 3 (iyzico alt üye işyeri + kargo entegrasyonları)
doğru kurulamaz — çünkü paranın nasıl aktığı hakediş kurallarına bağlı.

Yol haritasının tamamı: `00-YOL-HARITASI.md`
