Çok Siteli İçerik Platformu
Beşinci müşteri sitesini kurarken belli oldu: her site için ayrı uygulama kurmak sürdürülebilir değildi. Beş uygulamayı bire indirdik.
Önceki hali neden tıkandı
Her müşteri sitesi kendi Next.js uygulamasıydı: kendi deposu, kendi sunucu servisi, kendi dağıtım hattı. İlk üç sitede sorun çıkmadı. Sonra şu oldu: bir güvenlik güncellemesi beş depoda ayrı ayrı yapılmak zorunda kaldı. Bir arayüz iyileştirmesi diğer sitelere hiç geçmedi. Yeni site açmak yarım günlük sunucu işiydi.
Şimdiki mimari
Tek bir render motoru var; sunucuda tek bir servis, tek bir port. Gelen
isteğin Host başlığından hangi müşteriye ait olduğu çözülüyor, o kiracının
içeriği ve teması veritabanından okunuyor. nginx her müşteri alan adını aynı motora
yönlendiriyor.
Yazma tarafı ayrı bir uygulama: yönetim paneli. İkisi aynı veritabanını kullanıyor — panel yazıyor, motor okuyor. Yeni site açmak artık sunucu kurulumu değil, panelde bir kayıt.
Kiracı ayrımı
Çok kiracılı bir sistemde en pahalı hata, bir müşterinin diğerinin verisini görmesidir. Bunu kod disiplinine bırakmadık: bütün sorgular tek bir kapıdan geçiyor ve kiracı kimliğini oradan alıyor. İstemciden gelen bir kiracı kimliği hiçbir koşulda kullanılmıyor — oturumdan çözülüyor. Müşteri rolündeki kullanıcı kendi sitesine kilitli; yalnızca sahip rolü siteler arasında geçiş yapabiliyor.
Sekiz tema
Temalar birbirinin renk varyantı değil. Her birinin kendi başlık, giriş bölümü, kategori ve hizmet bileşenleri, hatta kendi ana sayfa bölüm sırası var: sıcak, minimal, vitrin, kurumsal, canlı, atölye, galeri, zanaat. Panelden tema değiştirmek anında etkili; içerik yeniden girilmiyor.
Yaşadığımız üç tuzak
- Görsel iyileştirme çok kiracıda kırılıyor. Next'in görsel bileşeni tek bir yükleme dizini varsayıyor. Açık bırakıldığında bütün logolar ve görseller gitti. Optimizasyonu kapatıp görselleri kendimiz boyutlandırdık.
- Dağıtım yükleme dizinini siliyordu. Senkronizasyondaki silme bayrağı, müşterilerin yüklediği görselleri de temizliyordu. Yükleme dizini artık hariç tutuluyor — ve yedekten dönülebildiği bir kez denendi.
- Bakım sayfası yanlış kod dönüyordu. Ara katman kaldırılınca bakım kontrolü veritabanına erişemeyen bir çalışma ortamına düştü. Bakımdaki site 503 yerine 200 dönüyordu; arama motoru bakım metnini gerçek içerik sanabilirdi. Sayfaya arama motoruna kapalı işareti eklendi.
- MOTOR
- Next.js (App Router) · sunucu tarafında oluşturma · tek servis
- PANEL
- Ayrı uygulama · rol bazlı erişim · tema seçici · yayın durumu
- VERİ
- PostgreSQL · Prisma · tek kapıdan kiracı süzgeci
- ALTYAPI
- nginx alan adı yönlendirmesi · systemd · certbot ile otomatik sertifika
- KİRACILAR
- selintasarim.com · artinetdijital.com
Siteniz de bu motorda dursun
Hazır temayla bir iki hafta. Alan adı, sunucu ve sertifika dahil.