CHIP CENTER ECU/TCU DOSYA SERVIS PORTALI v1.2.0 AYRINTILI KURULUM, LISANS VE GUNCELLEME KILAVUZU ================================================= 1. PAKETIN KAPSAMI ------------------ Bu paket lisans korumali CHIP CENTER portalidir. Ayni uygulamada iki arayuz vardir: - Yonetici/tuner paneli: / - Musteri paneli: /customer Musteri kaydi, yonetici onayi, kredi, hizmet katalogu, arac/motosiklet dosya talebi, original ve ID dosyasi, duzenlenmis dosya teslimi, canli sohbet, destek, e-posta bildirimi, PayTR, DTC/ECU arama, marka ayarlari ve merkezi guncelleme bildirimi bu pakettedir. Bu portal gecerli lisans olmadan acilmaz. Merkezi lisans paneli ayri bir alan adinda kurulmus olmali ve LICENSE_SERVER_URL ile tanimlanmalidir. 2. GEREKSINIMLER ---------------- - Node.js 22.13.0 veya daha yeni LTS - npm - Cloudflare/Sites veya Workers + D1 + R2 uyumlu dagitim ortami - DB adli D1/SQLite binding - FILES adli R2 binding - Uretimde HTTPS ve portal icin ayri alan adi - Merkezi lisans panelinden uretilmis lisans anahtari - E-posta icin Resend (onerilir) - Google girisi kullanilacaksa Google Cloud OAuth istemcisi - Odeme alinacaksa onayli PayTR magaza bilgileri 3. DOSYALARI HAZIRLAMA ---------------------- 1) ZIP'i ayri bir klasore cikartin. 2) Terminali paket klasorunde acin. 3) Kilitli bagimliliklari kurun: npm ci 4) Yerel ayar dosyasini olusturun: Windows PowerShell: Copy-Item .env.example .dev.vars Linux/macOS: cp .env.example .dev.vars 5) .dev.vars dosyasini doldurun. Bu dosyayi paylasmayin veya arsive eklemeyin. 4. ORTAM DEGISKENLERI --------------------- DATABASE_URL= Bu Cloudflare D1 kurulumunda bos kalabilir; uygulama DB bindingini kullanir. AUTH_SECRET= Eski/uyumlu kurulumlar icin en az 32 bayt rastgele gizli deger. ADMIN_EMAIL= Portal yoneticisinin e-posta adresi. Musteri kaydi olarak kullanilamaz. ADMIN_BOOTSTRAP_PASSWORD= Sifir kurulumda ilk yonetici parolasi. En az 12, onerilen en az 16 rastgele karakterdir. Yalnizca ADMIN_EMAIL icin ve DB'de parola hesabi yoksa ilk admin girisinde hesap olusturur. Mevcut parolayi degistirmez. Ilk basarili giris ve guvenli parola degisikliginden sonra bu secret'i platformdan kaldirin. GOOGLE_CLIENT_ID= / GOOGLE_CLIENT_SECRET= Musterilerin Google ile kayit/girisi icin OAuth Web Application bilgileri. Bos kalirsa Google dugmesi devre disidir; admin Google ile giremez. STORAGE_PROVIDER=r2 Bu paket icin r2 kullanin. S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY Alternatif/uyumluluk alanlaridir. Cloudflare bindingli kurulumda FILES kullanilir. SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD Eski SMTP uyumluluk alanlari. Mevcut bildirim motoru icin Resend onerilir. APP_URL= Portalin disaridan acilan tam HTTPS adresi. Ornek: https://portal.musteri.com ADMIN_NOTIFICATION_EMAIL= Yeni kayit, yeni dosya ve canli sohbet bildirimlerinin gidecegi yonetici adresi. RESEND_API_KEY= Resend API anahtari. RESEND_FROM_EMAIL= Resend'de dogrulanmis gonderici. Ornek: Chip Center PAYTR_MERCHANT_ID, PAYTR_MERCHANT_KEY, PAYTR_MERCHANT_SALT PayTR magaza panelinden alinacak canli bilgiler. PAYTR_TEST_MODE=1 Testte 1, PayTR onayindan ve gercek odeme testinden sonra canlida 0. LICENSE_SERVER_URL= Merkezi lisans panelinin HTTPS kok adresi. Ornek: https://lisans.sirketiniz.com APP_VERSION=1.2.0 Kurulu portal surumu. Lisans panelindeki guncelleme yayiniyla eslesmelidir. 5. VERITABANI VE R2 ------------------- Zorunlu bindingler: - DB: kullanicilar, oturumlar, krediler, talepler, sohbet, destek, odemeler, hizmetler, ayarlar, lisans durumu ve guncelleme teslim kayitlari - FILES: original, arac/motor ID ve duzenlenmis sonuc dosyalari ile firma logosu .openai/hosting.json dosyasindaki project_id mevcut sahibin Sites projesine aittir. Yeni musteri/alan adi icin yeni Sites projesi olusturun ve project_id degerini o projeye ait kimlikle degistirin. DB ve FILES adlarini degistirmeyin; degistirirseniz kod ve hosting bildirimini birlikte guncellemeniz gerekir. Migration dosyalarini 0000'dan 0014'e numara sirasiyla uygulayin. Son migration: drizzle/0014_app_update_receipts.sql Mevcut DB'de once yedek alin. Daha once uygulanmis migrationlari tekrar zorla calistirmayin. Uygulama temel tablolari ilk istekte CREATE IF NOT EXISTS ile de korur; migration gecmisi yine de duzenli tutulmalidir. Dosya yukleme siniri original, ID ve sonuc dosyalarinda 16 GB'dir. Buyuk dosyalar parcali olarak R2'ye gider. Cloudflare hesap R2 kotasi, istek suresi ve maliyetini canliya cikmadan kontrol edin. Logo siniri 1 MB'dir. 6. YEREL CALISTIRMA ------------------- Lisans paneli once http://localhost:3001 adresinde calisiyor olmali ve yerel alan adi icin aktif bir gelistirme lisansi bulunmalidir. Portal: npm run dev -- --port 3000 Tarayici: http://localhost:3000 Uretim derleme kontrolu: npm run build Derleme tamamlanmadan canliya almayin. 7. SIFIR KURULUMDA ILK YONETICI GIRISI ------------------------------------- 1) ADMIN_EMAIL degerini yonetici e-postasi yapin. 2) ADMIN_BOOTSTRAP_PASSWORD icin en az 16 karakter rastgele bir secret girin. 3) Lisansi aktive edin. 4) /login?portal=admin sayfasini acin. 5) ADMIN_EMAIL ve ADMIN_BOOTSTRAP_PASSWORD ile girin. 6) Sistem DB'de admin/parola kaydi yoksa bunu yalnizca bir kez olusturur. 7) Ilk giristen sonra panelden guvenli parolanizi yonetin ve bootstrap secret'ini hosting ortamindan kaldirin. Secret mevcut hesabi otomatik sifirlamaz. 8. LISANS AKTIVASYONU --------------------- 1) Lisans sahibi merkezi lisans panelinde musteri adi, e-posta ve portal alan adiyla lisans olusturur. 2) Portalda LICENSE_SERVER_URL dogru HTTPS adresine ayarlanir. 3) Portal ilk acilista lisans ekranini gosterir. 4) Tam lisans anahtarini girip aktive edin. 5) Lisans sunucusu alan adi ve kurulum kimligini baglar. 6) Ayni anahtari ikinci alan adinda kullanmaya calismak lisans olayina ve yonetici e-posta uyarisina donusur. Alan adi lisans panelinde protokolsuz olmalidir: portal.musteri.com www kullaniliyorsa lisans kaydiyla canli alan adi birebir uyumlu olmalidir. 9. GOOGLE OAUTH KURULUMU ------------------------ Google Cloud Console'da OAuth consent screen ve Web Application istemcisi acin. Authorized JavaScript origin: https://portal.musteri.com Authorized redirect URI: https://portal.musteri.com/api/auth/oauth/google/callback GOOGLE_CLIENT_ID ve GOOGLE_CLIENT_SECRET degerlerini hosting secret'larina girin. Google ile ilk kez giris yapmak otomatik kayitsiz giris saglamaz: kullanici once Google ile kayit akisini tamamlar, telefonunu ulke koduyla girer ve yonetici onayindan sonra Google ile giris yapabilir. Apple girisi bu pakette yoktur. 10. RESEND E-POSTA KURULUMU --------------------------- 1) Resend'de gonderici alan adini DNS ile dogrulayin. 2) API anahtari olusturun. 3) RESEND_API_KEY ve RESEND_FROM_EMAIL secret'larini tanimlayin. 4) ADMIN_NOTIFICATION_EMAIL adresini kontrol edin. 5) Test musteri kaydi, canli sohbet mesaji ve dosya talebiyle teslimi dogrulayin. Resend test gondericisi tum musteri adreslerine gondermeyebilir. Canli kullanimda mutlaka dogrulanmis alan adinizdan gonderin. 11. PAYTR KURULUMU ------------------ 1) PayTR magaza onayi ve sozlesme surecini tamamlayin. 2) Merchant ID, Key ve Salt degerlerini secret olarak girin. 3) PayTR bildirim/callback adresi: https://portal.musteri.com/api/payments/paytr/callback 4) Basari ve hata donusleri uygulama tarafindan /customer ekraninda ele alinir. 5) Ilk olarak PAYTR_TEST_MODE=1 ile 50/100/150/200 kredi paketlerini deneyin. 6) Callback imza dogrulamasi ve tek-sefer kredi ekleme kaydini kontrol edin. 7) PayTR onayindan sonra PAYTR_TEST_MODE=0 yapin. Odeme anahtarlarini JavaScript'e, e-postaya veya ZIP'e koymayin. 12. CANLIYA ALMA ---------------- 1) Musteri icin yeni Sites/Cloudflare projesi olusturun. 2) DB ve FILES bindinglerini baglayin. 3) Ortam secret'larini platform paneline girin. 4) Migrationlari sirayla uygulayin. 5) npm run build sonucunu dogrulayin. 6) Kodu dagitin ve HTTPS alan adini baglayin. 7) Merkezi lisans panelinden tam bu alan adi icin lisans olusturun. 8) Lisansi portalda aktive edin. 9) Ilk admin hesabini bolum 7'ye gore olusturun. 10) Musteri kaydi -> admin onayi -> kredi -> dosya yukleme -> admin indirme -> sonuc yukleme -> musteri indirme zincirini gercek bir test dosyasiyla deneyin. 11) E-posta, canli sohbet, Google ve PayTR testlerini ayri ayri tamamlayin. 13. GUNCELLEME SISTEMI ---------------------- Portal giris yapmis admin ve musteriler icin her 15 saniyede merkezi lisans sunucusundaki son yayini kontrol eder. Yeni yayin varsa: - Her iki panelde animasyonlu guncelleme karti gorunur. - Tarayici izni varsa masaustu/sesli bildirim verilir. - Surum, baslik, not ve zorunluluk bilgisi gosterilir. - Guncelle dugmesi kullanici bazli APPLIED kaydini DB'ye yazar ve sayfayi yeniler. - Zorunlu olmayan yayin kapatilabilir; zorunlu yayin kapatilamaz. Dogru yayin sirasi: 1) Kod degisikligini bitirin. 2) APP_VERSION'i artirin. 3) npm run build. 4) Yeni portal kodunu canliya dagitin veya musteriye guncelleme paketini kurun. 5) Sonra lisans panelinden ayni surum numarasiyla yayin olusturun. Merkezi tek dagitimda Guncelle dugmesi yeni yayinlanmis admin ve musteri kodunu yeniden yukler. Musteri kendi sunucusunu yonetiyorsa tarayici kaynak dosyalarini degistiremez; ZIP/CI-CD kurulumu once tamamlanmalidir. Lisans panelindeki indirme adresi bu dagitim paketi icindir. 14. YEDEKLEME VE GERI DONUS --------------------------- - Her dagitimdan once DB ve FILES/R2 yedegi alin. - D1 yedeginde kullanicilar, krediler, talepler, sohbetler ve lisans aktivasyon durumu birlikte korunmalidir. - R2 yedegi olmadan DB'deki dosya anahtarlari tek basina dosyalari geri getirmez. - Eski uygulama ZIP'ini ve o surume ait migration listesini saklayin. - Kod geri donusu gerekirse DB migrationini otomatik geri almayin; once uyumluluk kontrolu ve yedek uzerinde deneme yapin. - Geri yukleme testini ayri bir test alaninda periyodik yapin. 15. GUVENLIK KONTROL LISTESI ---------------------------- [ ] HTTPS aktif [ ] Gecerli lisans ve dogru alan adi [ ] ADMIN_BOOTSTRAP_PASSWORD ilk giris sonrasi kaldirildi [ ] AUTH_SECRET/oturum secret'lari guclu [ ] .dev.vars ve .env paket/Git disinda [ ] Google client secret yalnizca sunucuda [ ] PayTR Key/Salt yalnizca secret deposunda [ ] Resend alan adi dogrulanmis [ ] DB ve R2 yedegi alinmis [ ] Admin platform hesabinda MFA acik [ ] npm run build basarili [ ] Gercek dosya ve odeme testleri tamam 16. SIK HATALAR --------------- "Lisansiniz aktif degildir": LICENSE_SERVER_URL, lisans durumu, alan adi ve kurulum bagini kontrol edin. "Google uygulama anahtari baglanmamistir": GOOGLE_CLIENT_ID/SECRET ile origin ve callback adresini birebir kontrol edin. Secret degisikliginden sonra yeniden dagitin veya worker'i yeniden baslatin. Guncelleme gorunmuyor: Lisans panelinde yayin kaydi, portal APP_VERSION ve /api/app-updates yanitini kontrol edin. Giris yapmis ekranda en fazla 15 saniye bekleyin. E-posta gitmiyor: RESEND_API_KEY, RESEND_FROM_EMAIL alan adi dogrulamasi ve teslim loglarini kontrol edin. Test gondericisi her adrese gonderemez. Dosya yuklenmiyor: FILES bindingi, R2 kota/izinleri, 16 GB siniri ve parca isteklerini kontrol edin. Original ve arac/motor ID dosyalarinin ikisi de zorunludur. Kredi eksik/yanlis dusuyor: Hizmet secilmeden rezervasyon olmamali. Secilen hizmetlerin toplam kredisi ve credit_transactions kayitlarini kontrol edin. PayTR kredi eklemiyor: Callback URL, Merchant Key/Salt, PayTR test modu ve callback HTTP 200/OK yanitini kontrol edin. Ayni payment_id icin kredi iki kez eklenmez. 17. PAKET ICERIGI ----------------- app/ Sayfalar ve API rotalari components/ Admin/musteri arayuzleri lib/ Is kurallari, veri erisimi, lisans ve bildirim kodu db/ Drizzle semasi drizzle/ 0000-0014 SQL migrationlari worker/ Cloudflare worker girisi public/ Logo ve statik varliklar .openai/ Sites proje/binding bildirimi KURULUM.txt Bu belge SURUM: 1.2.0 Bu pakette canli musteri verisi, yuklenen dosyalar, .dev.vars, .env.local, API anahtarlari, parolalar, node_modules veya derleme ciktisi yoktur.