# cPanel'e Kurulum

Site `alanadi.com/mersinehliyet` adresinden yayınlanacak şekilde hazırlandı.

> **Ön koşul:** cPanel'de **Setup Node.js App** (CloudLinux Node.js Selector) bulunmalı.
> Next.js bir Node.js uygulamasıdır; yalnızca PHP destekleyen paketlerde çalışmaz.

---

## 1. Dosyalar nereye gidecek?

cPanel'in Node.js uygulamaları **`public_html` içine değil**, ev dizinine kurulur:

```
/home/wjvzkyrsct/mersinehliyet/     ← uygulama dosyaları buraya
/home/wjvzkyrsct/mersinsurucukursu.net/.htaccess   ← cPanel bunu kendi oluşturur, elle dokunmayın
```

`mersinsurucukursu.net` klasörüne dosya kopyalamayın; cPanel orayı Passenger'a
yönlendiren bir köprü olarak kullanır.

---

## 2. Yüklenecek dosyalar

Projeyi zip'leyip `/home/wjvzkyrsct/mersinehliyet` içine açın. **Şunlar yüklenmeli:**

```
src/  public/  veri/
package.json  package-lock.json
next.config.ts  tsconfig.json  postcss.config.mjs  eslint.config.mjs
server.js
```

**Şunlar yüklenmemeli:**

| Klasör | Neden |
|---|---|
| `node_modules/` | İçinde Windows'a özel ikili dosyalar var (`sharp`, `@next/swc`). Sunucuda yeniden kurulacak. |
| `.next/` | Sunucuda derlenecek. (Bellek yetmezse 6. adımdaki alternatife bakın.) |

`veri/` klasörünü yükleyin: `icerik.json` yönetim panelinden yaptığınız tüm içerik ve
renk ayarlarını taşır. `basvurular.json` ve `ik-basvurulari.json` boş listeyle (`[]`)
başlayabilir.

> **Güncellemelerde `veri/` klasörünün üzerine yazmayın.** Başvurular, yüklenen CV'ler
> (`veri/cv`) ve panelden yüklenen blog görselleri (`veri/gorseller`) burada durur.
> Bu klasörü düzenli yedekleyin.

---

## 3. Node.js uygulamasını oluşturun

cPanel → **Setup Node.js App** → **Create Application**:

| Alan | Değer |
|---|---|
| Node.js version | **20.9 veya üzeri** (listede en yüksek olanı seçin) |
| Application mode | `Production` |
| Application root | `mersinehliyet` |
| Application URL | `mersinsurucukursu.net` (yol kutusu **boş**) |
| Application startup file | `server.js` |

---

## 4. Ortam değişkenleri

Aynı ekranda **Add Variable** ile ekleyin.

**Zorunlu:**

| Ad | Değer |
|---|---|
| `NODE_ENV` | `production` |
| `NEXT_PUBLIC_TEMEL_YOL` | **boş bırakın** — site alan adının kökünde |
| `NEXT_PUBLIC_SITE_ADRESI` | `https://www.mersinsurucukursu.net` |
| `ADMIN_SIFRE` | yönetim paneli şifreniz |
| `OTURUM_ANAHTARI` | uzun ve rastgele bir dize |

**İsteğe bağlı — Google Analytics:**

| Ad | Değer |
|---|---|
| `NEXT_PUBLIC_GA_ID` | `G-XXXXXXXXXX` (boşsa hiç kod yüklenmez) |

Ölçüm kimliği girildiğinde şu olaylar kendiliğinden gönderilir: `telefon_aramasi`,
`whatsapp_tiklamasi`, `on_kayit_formu`, `iletisim_formu`, `ik_basvurusu`,
`ucretler_sayfasi`. Bunları GA4'te **Yönetici → Etkinlikler → anahtar etkinlik olarak
işaretle** deyip Google Ads'e dönüşüm olarak aktarabilirsiniz; Tag Manager gerekmez.

**İsteğe bağlı — form bildirim e-postası:**

| Ad | Değer |
|---|---|
| `SMTP_SUNUCU` | `mail.mersinsurucukursu.net` |
| `SMTP_KAPI` | `587` (veya SSL için `465`) |
| `SMTP_KULLANICI` | gönderici e-posta adresi |
| `SMTP_SIFRE` | o hesabın şifresi |
| `BILDIRIM_ALICI` | bildirimlerin gideceği adres (boşsa kurum e-postası) |

Boş bırakılırsa bildirim atlanır; başvurular yine yönetim paneline düşer.

`OTURUM_ANAHTARI` üretmek için (cPanel → Terminal):

```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```

> **Önemli:** `NEXT_PUBLIC_` ile başlayan iki değişken **derleme anında** koda gömülür.
> Bu yüzden önce değişkenleri ekleyin, **sonra** derleyin. Sonradan değiştirirseniz
> yeniden derlemek gerekir.

Ortam değişkenleri yerine `.env.local` dosyası da yükleyebilirsiniz; ikisi de çalışır.
Aynı anda ikisini birden kullanmayın, karışır.

---

## 5. Bağımlılıkları kurun

Setup Node.js App ekranında **Run NPM Install** düğmesine basın.

Terminali tercih ederseniz, uygulamanın sanal ortamına girip çalıştırın (komut satırı
cPanel'de uygulama kartının üstünde yazar):

```bash
source /home/wjvzkyrsct/nodevenv/mersinehliyet/24/bin/activate
cd /home/wjvzkyrsct/mersinehliyet
npm install
```

---

## 6. Derleyin

Aynı ekranda **Run JS Script** → `build` seçin. Terminalden:

```bash
npm run build
```

**Bellek hatası alırsanız** (`JavaScript heap out of memory`), paylaşımlı hosting'in
sınırına takılmışsınızdır. O zaman kendi bilgisayarınızda derleyip yükleyin:

1. Yerelde `.env.local` içine yukarıdaki `NEXT_PUBLIC_*` değerlerini yazın
2. `npm run build`
3. Oluşan `.next` klasörünü sunucudaki `mersinehliyet` klasörüne yükleyin

`node_modules` yine de sunucuda `npm install` ile kurulmalıdır — `.next` taşınabilir,
`node_modules` değildir.

---

## 7. Başlatın

**Restart** düğmesine basın. `https://alanadi.com/mersinehliyet` açılmalı.

Her dosya güncellemesinden sonra **Restart** gerekir; Passenger uygulamayı bellekte tutar.

---

## 8. Kurulum sonrası kontrol listesi

- [ ] `https://alanadi.com/mersinehliyet` açılıyor, logo ve görseller geliyor
- [ ] `https://alanadi.com/mersinehliyet/admin` giriş ekranına yönlendiriyor
- [ ] Yönetim paneline giriş yapılabiliyor
- [ ] Ön kayıt formu gönderiliyor ve panelde **Ön Kayıtlar**'da görünüyor
- [ ] İnsan Kaynakları formundan CV yüklenebiliyor ve panelden indirilebiliyor
- [ ] `veri/` klasörü yazılabilir durumda (izin: `755`, sahibi cPanel kullanıcınız)

---

## Sık karşılaşılan sorunlar

**Sayfa açılıyor ama stiller/görseller yok**
`NEXT_PUBLIC_TEMEL_YOL` derleme anında ayarlanmamış. Değişkeni ekleyip yeniden derleyin.

**503 / "Application failed to start"**
Setup Node.js App ekranındaki günlük dosyasına (log) bakın. En sık nedenler: Node
sürümü 20.9'un altında, `npm install` çalıştırılmamış, ya da `npm run build`
yapılmamış (`.next` yok).

**Formlar çalışıyor ama veriler kayboluyor**
`veri/` klasörü yazılabilir değil veya her dağıtımda üzerine yazılıyor. Bu klasör
başvuruların ve tüm panel içeriğinin tutulduğu yerdir; **güncellemelerde
korunmalıdır**. Düzenli yedek alın.

**Görseller yavaş açılıyor (ilk ziyaret)**
Next.js her görseli ilk istekte AVIF/WebP'ye çevirir ve önbelleğe alır. İlk gezintide
yavaş, sonrasında hızlıdır. Bu normaldir.

---

## Alt dizini değiştirmek isterseniz

Tek yerden yönetiliyor. `NEXT_PUBLIC_TEMEL_YOL` değerini değiştirin (örn. `/surucu`),
cPanel'de Application URL'i güncelleyin, yeniden derleyip **Restart** edin.
Siteyi alan adının kökünde yayınlayacaksanız değişkeni **boş bırakın**.
