# PHP 8.2 / Laravel 12 / SQLite kurulumu

Uygulama sunucuda Node.js, Redis, Docker veya sürekli çalışan kuyruk süreci gerektirmez. Arayüz geliştirme bilgisayarında derlenir. Laravel PHP istekleriyle çalışır. Hedef tek cPanel hesabında yerel diskte SQLite dosyasıdır; NFS/paylaşımlı dosya sistemi kullanılmamalıdır. SQLite aynı anda tek yazara izin verir; kapasite gerçek eşzamanlı kullanım yük testiyle belirlenmelidir.

## Hosting gereksinimleri

64 bit PHP 8.2+, PDO SQLite, sqlite3, mbstring, OpenSSL, fileinfo, ctype, cURL, DOM, XML, tokenizer; Apache/LiteSpeed rewrite desteği, HTTPS, yazılabilir özel uygulama dizini. PHP 8.2 web ve CLI için aynı uzantılarla seçilmeli. `workspace:check` doğrular. Terminal yoksa kurulum/migration komutları için hosting desteği gerekir; herkese açık web kurulum betiği yoktur.

## Dizinler

```text
/home/CPANEL_USER/eraslan-isletmem/       ← backend klasörünün içeriği
  .env                                 ← özel, yükleme paketine dahil değil
  vendor/
  database/database.sqlite             ← özel, yeni pakette boş tablolar hazır
  storage/                             ← özel, log/oturum/yedekler
  public/                              ← alan adının Document Root değeri
    index.php
    .htaccess
    app/                               ← derlenmiş React arayüzü
```

cPanel → Domains → Manage → Document Root alanını `/home/CPANEL_USER/eraslan-isletmem/public` yapın. Ana alan adında bu seçenek kısıtlıysa ayrı alt alan adı açın veya hosting desteğinden document root değişikliği isteyin. Uygulama kökünü `public_html` içine koymayın. `index.php` dosyasını uygulama köküne taşımayın.

## Hazırlama ve yükleme

Bu bilgisayarda `npm run build` sonrasında `./tools/package-cpanel.ps1` komutu `release` klasörüne yükleme ZIP’i üretir. Composer `--no-dev` bağımlılıklarını ayrı geçici dizinde hazırlar; kaynak geliştirme bağımlılıklarını değiştirmez. Arşiv `backend` içeriğini kökte taşır; Kullanıcı/işletme verisi olmayan, tabloları hazır `database/database.sqlite` dahildir. `.env`, müşteri verisi, loglar, testler ve Windows PHP araçları dahil değildir. Arşivde `vendor` hazırsa sunucuda Composer kurulumu zorunlu değildir; PHP CLI ile key/migration komutları yine çalıştırılır.

1. Proje kökünde `npm ci` ve `npm run build` çalıştırın. Çıktı `backend/public/app` içine yazılır.
2. `backend` içinde PHP 8.2 ile `composer install --no-dev --prefer-dist --optimize-autoloader` çalıştırın. `composer.lock` sürümleri sabitler. cPanel’de Composer varsa bu komut yüklemeden sonra da çalıştırılabilir. Derlenmiş `public/app` ve kurulu `vendor` dosyalarını yükleyin. Windows `.tools` klasörü yüklenmez.
3. `backend/.env.cpanel.example` dosyasını sunucuda `.env` adıyla kopyalayın. `APP_URL` değerini düzenleyin. SQLite dosyasının yolu otomatik belirlenir; `DB_DATABASE`, sunucu adresi, kullanıcı adı veya veritabanı parolası girmeyin. `APP_DEBUG=false`, `SESSION_SECURE_COOKIE=true` kullanın. Her kurulum için ayrı APP_KEY gerekir.
4. Güncel pakette `database/database.sqlite` dosyası, migration tabloları dahil boş olarak hazırdır. İlk kurulumda ayrıca veritabanı oluşturmayın veya SQL yüklemeyin. **Mevcut SQLite dosyanız varsa pakettekiyle üzerine yazmayın.** Eski paketle kurulmuş eksik sistemde hata kaydı ve var olan veritabanı kontrol edilmeden değişiklik yapmayın.
5. Uygulama kökünde doğru PHP CLI ile çalıştırın:

```sh
php artisan key:generate --force
php artisan migrate --force
php artisan workspace:check
php artisan optimize
```

Anahtar mevcut kurulumda yeniden üretilmez; güncellemede `key:generate` çalıştırmayın. `storage`, `bootstrap/cache` ve SQLite’ın bulunduğu `database` dizini PHP kullanıcısı tarafından yazılabilir olmalı. `777` kullanmayın. cPanel PHP-FPM/hosting sahiplik ayarına göre izin verin.

6. SSL etkinleştirin, HTTPS yönlendirmesini açın. Alan adını açıp işletme hesabınızı oluşturun. Yeni hesap boş işletme açar. Eski Node demo veritabanı otomatik aktarılmaz ve değişmez; veri aktarımı ayrı doğrulanacak iştir.
7. Gizli dosya kontrolü: `/.env`, `/database/database.sqlite`, `/storage/logs/laravel.log`, `/composer.json` dışarıdan erişilememeli. Girişsiz `/api/state` 401 dönmeli. Canlıya çıkmadan iki ayrı işletme hesabıyla yetki/izolasyon kontrollerini tekrarlayın.

## Güncelleme, yedek ve cron

Güncellemeden önce `php artisan workspace:backup` çalıştırın, yedeği sunucu dışında güvenli depoya alın. Bu komut `VACUUM INTO` ile tutarlı snapshot alır ve integrity_check yapar. Sadece veritabanı dosyasını çalışan sistemde kopyalamayın. Mevcut uygulamada `php artisan down`, yeni dosyaları yükleme (`.env`, database ve storage korunur), `composer install --no-dev --optimize-autoloader`, `php artisan migrate --force`, `php artisan optimize`, `php artisan up` sırası uygulanır. Yeni SQLite dosyası yüklenmez.

cPanel Cron Jobs için örnek (PHP yolunu hostingden doğrulayın):

```cron
* * * * * cd /home/CPANEL_USER/eraslan-isletmem && /opt/cpanel/ea-php82/root/usr/bin/php artisan schedule:run >> /dev/null 2>&1
```

Bu cron İstanbul saati 03:00’te günlük yerel yedek alır. Dış depoya kopyalama ve saklama süresi otomasyonu henüz yoktur; disk kapasitesi izlenmelidir. Geri yükleme bakım modunda, önce ayrı dosyada integrity_check ve kayıt/bakiye karşılaştırmasıyla denenmelidir. APP_KEY de özel yedekte korunmalıdır.

## Tamamlanmamış SaaS kapsamı

Bu aktarım ilk Laravel sürümüdür. E-posta doğrulama, parola sıfırlama/e-posta teslimi, MFA, kullanıcı daveti, zorunlu ilk parola değişimi, abonelik ve ödeme sağlayıcısı, terminal/vardiya, depolar, tam sunucu sayfalaması, e-belge/ÖKC, dosya ekleri, gider yönetimi, gerçek yük testi ve cPanel üzerinde uçtan uca kabul henüz tamamlanmadı. Kullanıcı ekleme mevcut olmayan e-postayla yeni hesap açar; mevcut kullanıcıya davet ekleme yoktur. Roller yazma işlemlerini sınırlar; tüm üyeler işletmenin ticari kayıtlarını okuyabilir. Bu sürüm eksiksiz/üretim onaylı SaaS olarak kabul edilmez.

Kaynaklar: [Laravel 12 dağıtım gereksinimleri](https://laravel.com/docs/12.x/deployment), [cPanel alan adı ve Document Root](https://docs.cpanel.net/cpanel/domains/domains/).

## 4 Kasım SQLite paket düzeltmesi

Önceki ilk arşiv SQLite dosyası içermiyordu; ilk kurulumda migrate gerekiyordu. Güncel paket boş SQLite dosyasını bütün tablolarla hazırlar ve cPanel örneğindeki makineye özel DB_DATABASE yolunu kaldırır. Uygulama varsayılan olarak kendi database/database.sqlite dosyasını kullanır. Eski .env içinde /home/CPANEL_USER/... gibi örnek bir DB_DATABASE varsa o satırı kaldırın; yapılandırma cache varsa php artisan config:clear çalıştırın. APP_KEY ve .env kurulumu bundan ayrı Laravel gereksinimidir.
