Katman Izolasyonu — Deploy Runbook
DetayBu runbook, tek monolith repo icinde landing / admin / customer katmanlarinin ileride ayri konumlara tasinabilmesi icin guncel mimariyi ozetler.
Katman URL Haritasi
Bölüm başlığı “Katman URL Haritasi”| Katman | Public URL | API prefix | Lib root |
|---|---|---|---|
| Landing | /, /pricing, /blog/... | /api/landing/ | lib/landing/, components/landing/ |
| Admin | /admin/... | /api/admin/ | lib/admin/, components/admin/ |
| Customer | /customer/... | /api/customer/ | lib/customer/, components/customer/ |
| Infra | — | /api/infra/ | lib/cron/, lib/webhooks/, lib/kernel/mail/ |
Legacy URL’ler (/api/payment/*, /api/cron/*, /api/webhooks/*) 307 route stub ile
yeni prefix’lere yonlenir. GET-only legacy media/vehicles stub’lari next.config.mjs
redirect’lerine tasindi (/api/brands|gallery|hero-images|vehicles).
Stripe webhook (manuel): Dashboard’da endpoint URL’yi su sekilde guncelleyin:
https://ecutuningportal.com/api/landing/payment/webhook
(Eski /api/payment/webhook 307 redirect paralel calisir; yine de dashboard’i guncelleyin.)
Ortak Kernel (tek DB)
Bölüm başlığı “Ortak Kernel (tek DB)”Asagidaki moduller tum katmanlar tarafindan kullanilir:
lib/kernel/prisma.ts— PostgreSQL / Prismalib/kernel/redis.ts,lib/kernel/rate-limit.tslib/kernel/mail/,lib/kernel/sms/lib/kernel/payment/confirm-*— landing + customer checkout ortak mantik
Domain kodu asla lib/ kokunde kalmamali; deprecation shim’ler gecici.
Edge Routing
Bölüm başlığı “Edge Routing”proxy.ts— orchestratorproxy/admin.ts— admin cookie gateproxy/customer.ts— iron-session dogrulamaproxy/landing.ts— i18n delocalize, hero A/B, metadata image rewritelib/edge/hero-hash.ts— FNV-1a (proxy + hero-variant senkron)
SEO (Landing)
Bölüm başlığı “SEO (Landing)”Dokunulmaz kontratlar lib/architecture/landing-seo-boundaries.test.ts ile korunur:
- Ingilizce root:
https://ecutuningportal.com/(/en/prefix yok) - hreflang 24 dil + x-default
- robots: admin/customer/api disallow
- sitemap: yalnizca public landing rotalari
Build / Deploy
Bölüm başlığı “Build / Deploy”Tam monolith (varsayilan)
Bölüm başlığı “Tam monolith (varsayilan)”npm run buildchown -R yigit:yigit .next .envpm2 restart ecutuningportalnpm run cf:purge:warmKatman bazli smoke (CI / staging)
Bölüm başlığı “Katman bazli smoke (CI / staging)”npm run architecture:checknpm testETP_E2E_BASE_URL=http://49.12.188.137:3000 npm run test:e2eGelecek: DEPLOY_LAYER (planlanan)
Bölüm başlığı “Gelecek: DEPLOY_LAYER (planlanan)”DEPLOY_LAYER=landing|admin|customer ile build-time route exclusion henuz
otomatik degil. Ayri deploy icin onerilen yol:
- nginx path-based routing (
/admin→ admin instance,/customer→ customer instance) - Landing instance yalnizca
(landing)route group +/api/landing+/api/infra - Paylasilan DB ve
lib/kernelher instance’ta ayni kalir
Kalite Kapilari
Bölüm başlığı “Kalite Kapilari”CI (.github/workflows/ci.yml):
npm run architecture:check— 350+ katman guard testinpm test— unit + integrationnpm run lint,npx tsc --noEmit,npm run i18n:check
Yeni API route eklerken lib/architecture/api-route-inventory.test.ts allowlist’ini
kucultun; hedef unscoped route sayisi sifir.