# cPanel'e kısa kurulum

Bu belge **yeni kurulum** içindir. ZIP'te derlenmiş React ve PHP bağımlılıkları hazırdır; cPanel'de Node.js/npm/Composer çalıştırmanız gerekmez.

## 1. Hosting'i hazırlayın

- Domain için SSL/AutoSSL açın. MultiPHP Manager'dan **PHP 8.3** seçin.
- `intl`, `mbstring`, `mysqli`, `pdo_mysql`, `curl`, `openssl`, `fileinfo`, `gd` uzantıları açık olsun.
- MySQL Database Wizard ile **boş veritabanı + kullanıcı** oluşturun, kullanıcıya veritabanı yetkilerini verin. Migration için CREATE/ALTER/INDEX/TRIGGER gerekir.
- File Manager → Settings → **Show Hidden Files** seçeneğini açın.

## 2. ZIP'i doğru yere açın

ZIP'i `/home/HESAP/` altına yükleyip açın. Son yerleşim:

```text
/home/HESAP/private/       → uygulama, vendor, writable ve .env
/home/HESAP/public_html/   → index.php, app.html, .htaccess, assets-build, media
```

**private klasörünü public_html içine koymayın.** Paket içindeki `public_html` klasörünün içeriği sitenin web köküne gelmeli; `public_html/public_html` oluşmamalı. Terminal prompt'unda `cd /home/HESAP/private` çalıştırdığınızda `ls` çıktısında `spark`, `app`, `system`, `vendor` ve `writable` görünmelidir. `php spark` uyarısı public_html içindeki private yolunu gösteriyorsa dizin yanlış yere açılmıştır: private klasörünü `/home/HESAP/private` konumuna taşıyın ve yalnız içeriğini `/home/HESAP/public_html` konumuna yerleştirin. Mevcut bir site varsa dosyalarının üzerine yüklemeden önce yedeğini alın. Kurulum ZIP'ini web kökünde bırakmayın.

## 3. .env dosyasını düzenleyin

`private/.env.example` dosyasını **private/.env** olarak kopyalayın. Aşağıdaki alanları kendi bilgilerinizle değiştirin; diğer ayarlar şablonda hazırdır:

```ini
CI_ENVIRONMENT = production
app.baseURL = 'https://DOMAIN.COM/'
app.forceGlobalSecureRequests = true
database.default.hostname = localhost
database.default.database = HESAP_VERITABANI
database.default.username = HESAP_KULLANICI
database.default.password = 'VERITABANI_PAROLASI'
database.default.DBDebug = false
APP_ENCRYPTION_KEY = 'URETTIGINIZ_UZUN_ANAHTAR'
CUSTOMER_ORIGIN = 'https://DOMAIN.COM'
```

cPanel Terminal'de anahtar üretin, çıktıyı APP_ENCRYPTION_KEY alanına koyun:

```bash
php -r 'echo bin2hex(random_bytes(32)), PHP_EOL;'
```

Anahtarı saklayın, kurulumdan sonra değiştirmeyin. SMTP için aynı dosyadaki `email.SMTPHost`, `email.SMTPUser`, `email.SMTPPass`, `email.SMTPPort`, `email.SMTPCrypto` ve `email.fromEmail` alanlarını doldurun.

## 4. Veritabanını kurun, admin oluşturun

cPanel Terminal:

```bash
cd /home/HESAP/private
php -v
php tools/check-platform.php
php spark migrate
php spark platform:admin
php spark cache:clear
php spark platform:provider-check
```

Admin komutu e-posta ve parola ister; parola en az 12 karakterdir. **demo.sql'yi ayrıca phpMyAdmin'e aktarmayın:** migration demo tablolarını da oluşturur. Demo kullanıcı, sitenin gerçek /giris hesabı değildir.

`php -v` yanlış sürüm gösteriyorsa komutlarda hosting'in PHP 8.3 yolunu kullanın; yaygın cPanel yolu `/opt/cpanel/ea-php83/root/usr/bin/php` şeklindedir, hosting'inizde doğrulayın. `platform:admin` için `system()` kapalı olsa da güncel komut `proc_open` ile parolayı okuyabilir; `proc_open` da kapalıysa parola terminalde görünür biçimde okunur ve işlem yine tamamlanır. Terminal yoksa bu komutlar için hosting desteğinden CLI erişimi isteyin.

## 5. İzinleri ve cron'u ayarlayın

- `.env`: **600**; diğer dosyalar genellikle **644**, klasörler **755**. Hosting kullanıcısına göre 640/750 da kullanılabilir.
- `private/writable` ve `public_html/media`, PHP kullanıcısı tarafından yazılabilir olmalı. **777 vermeyin.**
- cPanel Cron Jobs → her dakika (`* * * * *`):

```bash
/opt/cpanel/ea-php83/root/usr/bin/php /home/HESAP/private/spark platform:cron >> /home/HESAP/private/writable/logs/cron.log 2>&1
```

## 6. Siteyi açın

- `https://DOMAIN.COM/admin` → giriş yapın.
- **Site ayarları:** isim, e-posta, logo, üyelik, kayıt bakiyesi ve destek kodu.
- **Sağlayıcı:** anahtarları girin ve önizlemeyi deneyin. Sağlayıcı domaininizi kabul etmeli; callback adresi `https://DOMAIN.COM/integrations/sportsbook/callback` olmalı.
- Sağlayıcı oturum süresi/iptal politikasını ve canlı kabul testlerini doğruladıktan sonra `.env` içindeki `SPORTS_SESSION_POLICY_CONFIRMED = true` yapın. Bu ayar false iken production spor açılışı kapalıdır.

## 7. Erişim engellerini kontrol edin

Aşağıdaki adresler **403 veya 404** vermeli; dosya içeriği veya indirme kesinlikle açılmamalı:

```text
https://DOMAIN.COM/.env
https://DOMAIN.COM/.env.example
https://DOMAIN.COM/.git/config
https://DOMAIN.COM/private/.env
https://DOMAIN.COM/writable/backups/
https://DOMAIN.COM/backup.sql
```

`/`, `/giris`, `/kayit` ve `/admin` açılmalı. 500 hatasında `private/writable/logs` ve cPanel Errors ekranına bakın. `.htaccess` hatası varsa hosting Apache/LiteSpeed üzerinde rewrite ve AllowOverride izinlerini kontrol etmeli; erişim engellerini kaldırarak çözmeyin. PHP'nin yerleşik geliştirme sunucusu .htaccess uygulamaz.

Bu kurulum Linux cPanel üzerinde henüz çalıştırılmadı; paket temiz veritabanı kurulumu ve erişim kuralları yerel PHP/Apache ile doğrulanmıştır.

Kaynaklar: [cPanel File Manager](https://docs.cpanel.net/cpanel/files/file-manager/110/), [Apache erişim kuralları](https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride).
