# cPanel Canlıya Geçiş Kontrol Listesi

## 1. Ön hazırlık

- [ ] Alan adı veya alt alan adı hazırlandı.
- [ ] SSL sertifikası aktif edildi.
- [ ] cPanel hesabında Node.js Application desteği doğrulandı.
- [ ] Node.js 22.11 veya 24 LTS seçilebiliyor.
- [ ] MySQL/MariaDB veritabanı yedeği alınabilecek bir yöntem hazırlandı.

## 2. MySQL oluşturma

- [ ] cPanel > MySQL Databases bölümünde veritabanı oluşturuldu.
- [ ] Ayrı bir MySQL kullanıcısı oluşturuldu.
- [ ] Güçlü ve benzersiz parola kullanıldı.
- [ ] Kullanıcı veritabanına eklendi.
- [ ] Kullanıcıya gerekli tüm uygulama tablo yetkileri verildi.
- [ ] cPanel'in kullanıcı adı önekleriyle birlikte tam `DB_NAME` ve `DB_USER` değerleri not edildi.

## 3. Dosyaları yükleme

- [ ] ZIP, uygulama kök klasörüne yüklendi ve çıkarıldı.
- [ ] `app.js`, `package.json`, `.env.example`, `public/`, `src/`, `migrations/` aynı uygulama kökünde bulunuyor.
- [ ] İlk kurulumda `.env.example`, uygulama kökünde `.env` adıyla kopyalandı; upgrade sırasında mevcut `.env` korundu.
- [ ] Dosya Yöneticisi'nde “Gizli Dosyaları Göster” açık.
- [ ] `.env` dosyası `public/` içine taşınmadı.
- [ ] Uygulama kökü doğrudan genel statik klasör olarak yayınlanmıyor.

## 4. Node.js Application

- [ ] Application mode: `Production`
- [ ] Application root: ZIP'in çıkarıldığı uygulama klasörü
- [ ] Application URL: kullanılacak alan adı veya alt yol
- [ ] Application startup file: `app.js`
- [ ] Node.js version: 22.11+ veya 24 LTS
- [ ] Uygulama kaydedildi.

Uygulama bir alt dizinde çalışıyorsa örneğin `https://kampuskafe.tr/yildiz-savasi`, `.env` içinde:

```env
APP_BASE_PATH=/yildiz-savasi
APP_ORIGIN=https://kampuskafe.tr
```

Alt alan adında kökten çalışıyorsa:

```env
APP_BASE_PATH=/
APP_ORIGIN=https://oyun.kampuskafe.tr
```

## 5. `.env` güvenli yapılandırma

- [ ] `APP_ORIGIN` gerçek HTTPS adresiyle değiştirildi.
- [ ] `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASSWORD` dolduruldu.
- [ ] `AUTH_TOKEN_PEPPER` en az 32 karakterlik rastgele değerle değiştirildi.
- [ ] `.env` içindeki hiçbir `CHANGE_ME` değeri kalmadı.
- [ ] `NODE_ENV=production`
- [ ] `DB_DRIVER=mysql`
- [ ] `TRUST_PROXY=true`
- [ ] `ENABLE_HSTS=true` yalnızca HTTPS aktifken kullanılıyor.
- [ ] Gerekliyse `ALLOWED_ORIGINS` yalnızca güvenilir originlerle dolduruldu.
- [ ] `MIN_BOARD_SIZE` ve `MAX_BOARD_SIZE` üretim kapasitesine göre kontrol edildi.
- [ ] `REQUIRED_REVIEW_COUNT=10`

Pepper üretme komutu:

```bash
node -e "console.log(require('node:crypto').randomBytes(48).toString('base64url'))"
```

## 6. Bağımlılık ve veritabanı kurulumu

cPanel Terminal veya Node.js Application'ın npm komut alanında:

```bash
cd /home/CPANEL_KULLANICISI/UYGULAMA_KOKU
npm ci --omit=dev --ignore-scripts
npm run db:migrate
npm run db:smoke
npm run db:integration
```

- [ ] `npm ci --omit=dev --ignore-scripts` hatasız tamamlandı.
- [ ] `npm run db:migrate` migration'ları uyguladı.
- [ ] `npm run db:smoke` bütün gerekli tabloları gördü.
- [ ] `npm run db:integration` gerçek MySQL üzerinde yayın ve ret akışını geçti.
- [ ] Entegrasyon testi sonrasında `KampüsKafe DB Entegrasyon Testi` adlı geçici kullanıcıların temizlendiği doğrulandı.

## 7. Uygulama doğrulaması

Node.js Application ekranından yeniden başlatın.

- [ ] `/api/health` HTTP 200 döndürüyor.
- [ ] `/api/ready` HTTP 200 ve `database: "mysql"` döndürüyor.
- [ ] Ana ekran yükleniyor.
- [ ] Kolay, Orta ve Zor kartları başlangıç bölümleri ile yayınlanmış topluluk bölümlerinin doğrudan toplamını gösteriyor (`6 bölüm`, `12 bölüm` vb.).
- [ ] Yayınlanan ilk topluluk bölümü ilgili zorlukta ayrı grup oluşturmadan `6. Bölüm` olarak aynı listede görünüyor.
- [ ] Topluluk bölüm kartında hazırlayan kişi, üniversite, topluluk, tahta boyutu ve yayın tarihi görünüyor; test sayısı görünmüyor.
- [ ] Aynı yayın Topluluk Laboratuvarı → Yayınlanan alanında da görünmeye devam ediyor.
- [ ] Bir bölüm oynanıp minimal sonuç penceresi görüldü.
- [ ] PWA manifest ve ikonları yükleniyor.
- [ ] Tarayıcı geliştirici konsolunda hata yok.
- [ ] Mobil ekranda tahta taşmıyor.
- [ ] 14×14 üretici tahtası boş/atanmamış hücrelerle açılıyor ve zorluk değişince boyut korunuyor.
- [ ] “Yeni bölge”, “Silgi / Boş”, kopuk bölge uyarısı ve “Tahtayı taşı” modu çalışıyor.
- [ ] Bölge şablonu yıldızları silmiyor ve varsayılan olarak yalnızca boş hücrelere uygulanıyor.
- [ ] Oyun ve atölyede satır/sütun göstergeleri `1 → yeşil 0` biçiminde güncelleniyor.
- [ ] Oyun tahtasında art arda iki dokunuş tarayıcı yakınlaştırması oluşturmuyor.
- [ ] iPhone Safari üzerinden Ana Ekrana eklenen PWA üst ve alt güvenli alanları kaplıyor; altta boş şerit kalmıyor.

## 8. İlk yetkiler

```bash
npm run access:create -- \
  --name "İsim Soyisim" \
  --university "Üniversite" \
  --community "Topluluk" \
  --create \
  --review
```

- [ ] Anahtar yalnızca doğru kullanıcıya güvenli kanaldan iletildi.
- [ ] Sohbette veya açık kanalda paylaşılmış erişim anahtarı iptal edilip yenisi oluşturuldu.
- [ ] Düz metin anahtar e-posta veya herkese açık dokümanda tutulmadı.
- [ ] Üretici kendi bölümünü test edemiyor.
- [ ] Yetkisiz kullanıcı test kuyruğunu veya atölyeyi açamıyor.

## 9. Güvenlik ve operasyon

- [ ] MySQL dışarıya açık değil veya güvenlik duvarıyla sınırlandı.
- [ ] cPanel, uygulama ve MySQL yedekleri etkin.
- [ ] `.env` ve veritabanı yedeği şifreli saklanıyor.
- [ ] `npm run rejected:purge` için cron planlandı.
- [ ] Node.js ve npm bağımlılık güncellemeleri için bakım takvimi belirlendi.
- [ ] Sunucu loglarında erişim anahtarlarının yazdırılmadığı doğrulandı.
- [ ] Hata logları düzenli izleniyor.
- [ ] Yoğun kullanımda çözümleyici süre, kuyruk ve node sınırları gözleniyor.

## 10. Geri dönüş planı

- [ ] Önceki çalışan ZIP saklandı.
- [ ] Migration öncesi MySQL yedeği alındı.
- [ ] Sorun halinde uygulama dosyalarını eski sürüme döndürme adımı belirlendi.
- [ ] Veritabanı geri yükleme sorumlusu ve yöntemi belirlendi.
