Çok Kiracılı CMS Nasıl Çalışır?

Tek bir Worker'dan birden fazla müşteri sitesini yönetmenin teknik detayları — domain tespiti ve izolasyon.

Çok kiracılı CMS mimari diyagramı

AstroForge'un belki de en sık sorulan sorusu şu: "Tek bir CMS sisteminden farklı müşteri sitelerini nasıl yönetiyorsunuz?" Cevap, Cloudflare Workers'ın çalışma prensibinde yatıyor.

Domain → Müşteri Tespiti

Her müşteri sitesi için Cloudflare Pages'te ayrı bir custom domain tanımlıdır. Müşteri /cms adresine gittiğinde, browser isteği Cloudflare Pages Functions üzerinden astrocms Worker'a iletilir. Bu sırada x-forwarded-host header'ı eklenir: örneğin musteri-a.com.

Worker bu header'ı okur, D1 veritabanında SELECT * FROM clients WHERE domain = 'musteri-a.com' sorgusunu çalıştırır. Eşleşme yoksa 404 döner. Eşleşme varsa, bu müşterinin GitHub repo bilgisi context'e set edilir.

İzolasyon Garantisi

Her istek için müşteri tespiti yeniden yapılır — oturum düzeyinde kalıcı bir kiracı bağlantısı yoktur. Müşteri A'nın geçerli oturum tokeni, Müşteri B'nin domain'inden gelen bir istekte çalışmaz.

GitHub PAT ise tüm kiracılar için ortaktır — bu bilinen bir sınırlılıktır. GitHub fine-grained PAT'lerle her müşteri reposu için ayrı token kullanımı mümkündür ve önerilir.

Yeni Müşteri Eklemek

Yeni bir müşteri eklemek için e:/astrocms/scripts/register-client.ts çalıştırılır. Bu script, D1'e eklenecek SQL çıktısını üretir. SQL Cloudflare Dashboard → D1 → Console'a yapıştırılır. Ardından Cloudflare Pages'te custom domain eklenir. Bir müşterinin sisteme eklenmesi 5 dakikadan kısa sürer.

Sonuç

Çok kiracılı mimari, ajansların her müşteri için ayrı CMS kurmaması gerektiği anlamına gelir. Tek Worker, tek D1, sınırsız müşteri — tam izolasyonla.