# Ligora — cPanel / Plesk Node.js kurulumu

Bu ZIP panel kurulumu içindir. Docker, SSH veya Nginx dosyası yükleme adımı gerektirmez. Sunucuda Node.js 22+ ve çalışan Node.js/Passenger desteği bulunmalıdır.

## Panel değerleri

| Alan | Değer |
|---|---|
| Domain / Application URL | `https://ligora.bofl.app` |
| Node.js sürümü | 22 veya üzeri |
| Mode / Environment | `production` |
| Application root | Paketi çıkardığınız özel klasör; ör. `/home/KULLANICI/ligora` |
| Document root | Application root altındaki **public** klasörü |
| Application startup file | **app.js** (alternatif: `_passenger.cjs`) |
| Worker / instance | **1** |
| PUBLIC_ORIGIN | `https://ligora.bofl.app` |
| TRUST_PROXY | `1` — yalnız panelin güvenilir proxy'si arkasında |
| DATA_DIR | Kalıcı özel veri klasörünün tam yolu; boşsa application root altındaki `data` |

`PORT` ve `HOST` değerlerini gereksiz yere tanımlamayın; panelin verdiği port korunur. Paket `.env` dosyası port veya host dayatmaz. Panel özel olarak isterse onun bildirdiği değerleri kullanın.

## Kurulum

1. Domainin DNS kaydını hosting sunucusuna yönlendirin. Panelde `ligora.bofl.app` alan adını ekleyip SSL/Let's Encrypt/AutoSSL'i etkinleştirin.
2. ZIP'i **application root** içine çıkarın. ZIP, `initial-data`, yönetici erişim dosyası ve sunucu kaynakları **public klasörüne konulmamalı**.
3. **Document root = public** seçin. Böylece özel ilk kurulum verileri web sunucusunun statik servis alanının dışında kalır.
4. Plesk'te domain → Node.js; cPanel'de Setup Node.js App veya Application Manager ekranından yukarıdaki değerleri girin. Paket kökündeki `app.js` CommonJS uyumludur; `_passenger.cjs` aracılığıyla uygulamayı başlatır.
5. Kaydedin ve **Enable / Start / Restart Application** düğmesine basın. Ayrıca terminalde `npm start` çalıştırmayın; ikinci süreç aynı veri klasörünü açamaz.
6. `https://ligora.bofl.app/api/health` açılmalı. Yönetici adresi ZIP'teki `YONETICI_ERISIMI.txt` dosyasındadır. Mevcut kullanıcı adı/parola korunur.
7. Uygulama verisi `initial-data` klasöründen ilk açılışta otomatik kopyalanır. Sonraki açılışlarda mevcut `data` üzerine yazılmaz.

Ek npm bağımlılığı veya build adımı yoktur. Panel zorunlu tutarsa NPM Install çalıştırılabilir. `package.json` içindeki `type: commonjs`, Passenger başlangıç dosyası içindir; sunucu modülleri `.mjs` olarak kalır.

## Tek süreç şartı

Bu sürüm verileri JSON dosyasında tutar. Hosting sağlayıcısı uygulamayı **tek instance** çalıştırmalı ve aynı anda iki süreç açan rolling restart kullanmamalıdır. Panelde bu ayar yoksa sağlayıcıya şu talebi iletin:

> ligora.bofl.app Node.js uygulaması için maksimum instance/worker 1 olsun. Yeniden başlatma eski süreç kapandıktan sonra yapılsın. Application root özel klasör, document root onun public alt klasörü olsun. HTTPS protokolü uygulamaya güvenilir proxy başlığıyla iletilsin.

Passenger'ın `shutdown` mesajı uygulamada karşılanır; normal panel kapanışında yazımlar tamamlanır ve veri kilidi kaldırılır. Ani zorla kapatmadan sonra kilit kalırsa önce tüm uygulama süreçleri durdurulmalı; ardından yalnız `data/.server.lock` kaldırılmalıdır. Kilidi çalışan uygulamada silmeyin.

## Bildirimler ve güncelleme

İletişim: `khaoscrea@gmail.com`. Anahtarlar ve mevcut hesap pakette korunur. Localhost'tan canlı domaine geçişte kullanıcı bir kez canlı sitede Bildirimleri aç seçeneğine dokunmalıdır. Bundan sonra yenileme/kapatma tercihleri sıfırlamaz. Gerçek cihaz izinleri ve işletim sistemi kısıtları yine geçerlidir.

Güncellemede panelden uygulamayı durdurun; `data` klasörünü ve özel ortam ayarlarını koruyarak kod dosyalarını değiştirin; uygulamayı yeniden başlatın. `initial-data` bir güncelleme aracı değildir ve canlı data'nın üzerine kopyalanmamalıdır.

## Son kontroller

- `/api/health` ve `/api/push/public-key` çalışmalı; ikincisinde `configured: true` görülmeli.
- Yönetici girişi, lig düzenleme, organizatör mekânı ve skor girişi çalışmalı.
- `/initial-data/config.json`, `/data/config.json` ve `/.env` erişime kapalı olmalı (403 veya 404).
- Gerçek mobil cihazda HTTPS üzerinden bildirim izni ve test ligi bildirimi doğrulanmalı.

Bu paket yerelde Node ile test edilmiştir. Gerçek hosting paneli/Passenger sunucusu ve canlı SSL yapılandırması bu ortamda çalıştırılmamıştır.

## Resmi başvuru kaynakları

- [Plesk — Passenger/ESM başlangıç dosyası](https://support.plesk.com/hc/en-us/articles/12389037025431-A-Node-js-app-hosted-in-Plesk-is-not-working-require-of-ES-Module-is-not-supported)
- [cPanel — Node.js uygulaması kurulumu](https://docs.cpanel.net/knowledge-base/web-services/how-to-install-a-node.js-application/)
- [Passenger — Node.js shutdown mesajı](https://blog.phusion.nl/passenger-5-0-21-os-x-el-capitan-support-nodejs-improvements-bug-fixes/)
