Sef Yazılım Proje konuşalım

Ç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.