Bir konteyner, yazılımın paketlenme şeklini değiştirir. Ancak bu, yazılımın durumu nerede sakladığına veya başka bir örneğin çevrimiçi olduğunda nasıl davrandığına dair pek bir şey ifade etmez.
Yerel diske yükleme yapan, sayfaları tek bir süreç içinde önbelleğe alan ve arka planda web istekleri sırasında çalışan bir CMS, ne kadar şık bir şekilde konteynerleştirilmiş olursa olsun, hala tek bir makineye bağlıdır.
Cloud Native Computing Foundation, bulut yerel sistemleri ölçeklenebilirlik, gevşek bağlılık, dayanıklılık, yönetilebilirlik ve gözlemlenebilirlik açısından tanımlar. Bu özellikleri elde etmek için kullanılan tekniklerden biri olarak konteynerler ve mikro hizmetleri belirtir.
PagibleAI CMS, Laravel’in altyapı sözleşmeleri aracılığıyla bu modeli takip etmektedir. Veritabanı bağlantıları, dosya sistemi diskleri, önbellek depoları, kuyruklar ve yayınlama, CMS ile onu çalıştıran makine arasındaki sınırı oluşturur.
Bir site başlangıçta SQLite ve yerel dosyalarla başlayabilir, ardından çoğaltılmış uygulama düğümlerine, yönetilen bir veritabanına, nesne depolama, paylaşılan önbellek ve bağımsız kuyruk işçilerine geçebilir. Tüm bunları içerik modelini değiştirmeden yapar.
“Tamamen bulut yerel” burada, CMS’nin belirli bir web sunucusuna mimari bağımlılığı olmadığı anlamına gelir. Kubernetes, kullanılabilecek bir çalışma zamanı olmasına rağmen gereklilik değildir.
Bir uygulama, bir işletim modeli
Bir uygulama, bir işletim modeli
PagibleAI, bir Composer paketi olarak kurulur:
composer require aimeos/pagible
php artisan cms:install
php artisan migrate
Kurulum, mevcut bir Laravel uygulamasını CMS’ye dönüştürür. Bu, kendi kimlik doğrulama, dağıtım ve izleme modeli ile ayrı bir içerik hizmeti tanıtmaz.
PagibleAI, uygulamanın hizmet kapsayıcısını, Eloquent bağlantılarını, kimlik doğrulama, middleware, dosya sistemi disklerini, önbellek depolarını, kuyrukları ve günlükleme kanallarını kullanır. Geliştirme ve operasyon, Laravel yığını içinde kalır.
Laravel, yönetici panelinin altındaki çerçeve ve altyapı soyutlama katmanı olarak hizmet eder.
Clients → CDN → Load balancer → Laravel replicas
├── Managed database
├── Redis cache and locks
├── Object storage
└── Queue broker → workers
Aynı topoloji AWS, Google Cloud, Azure, Kubernetes, geleneksel sanal makineler veya yönetilen bir Laravel platformu üzerinde çalışabilir. Sağlayıcıya özgü ayrıntılar Laravel’in yapılandırmasında kalır.
Dayanıklı durum web düğümünün dışında kalır
Dayanıklı durum web düğümünün dışında kalır
Yatay çoğaltma, bir sonraki isteğin herhangi bir düğüme erişebileceğinde çalışır. PagibleAI, dayanıklı durumu web sürecinde değil, paylaşılan altyapıda tutar.
Veritabanında içerik
Veritabanında içerik
Sayfalar, yeniden kullanılabilir öğeler, dosyalar ve sürümler Eloquent modelleridir. PagibleAI, kompakt bir yerel kurulum için SQLite ve üretim dağıtımları için MySQL, MariaDB, PostgreSQL veya SQL Server’ı destekler.
Her düzenleme, değişmez bir versiyon anlık görüntüsü oluşturur. Editörler en son versiyon üzerinde çalışırken, ziyaretçiler yayınlanan versiyonu alır. Herhangi bir kopya, veritabanı durumu sahip olduğundan her iki görünümü de sunabilir. Laravel’in okuma/yazma bağlantıları, yönetilen bir ana ve kopyaları aynı CMS bağlantısının arkasına yerleştirebilir ve başka bir veritabanı katmanı eklemeden bunu yapar.
Medya bir dosya sistemi diskinde
Medya bir dosya sistemi diskinde
PagibleAI, yüklemeleri Laravel’in dosya sistemi soyutlaması aracılığıyla gönderir. Varsayılan genel disk bir dizüstü bilgisayar için kullanışlıdır, CMS_DISK=s3 ayarı sayesinde ise aynı medya işlemlerini Amazon S3 veya başka bir S3 uyumlu hizmete taşıyabilirsiniz. Laravel’in dosya sistemi sürücüleri Cloudflare R2, MinIO ve DigitalOcean Spaces gibi hizmetleri de kapsar.
Yüklenen medya, ardından web-konteynerinin yaşam döngüsünden bağımsız hale gelir. Yer değiştiren düğümler için kopyalanmış bir hacim gereksinimi yoktur ve bir CDN, dosyaları PHP aracılığıyla her byte’ı yönlendirmeden sunabilir.
Önbellek ve koordinasyon
Önbellek ve koordinasyon
PagibleAI’nin genel sayfa önbelleği, tamamlanmış HTML yanıtlarını saklar. Çok düğümlü bir dağıtımda, bu önbellek varsayılan dosya deposundan, paylaşılan ve kilit alabilen bir depoya, örneğin Redis’e aktarılır.
Kilit gibi önbellek içeriği de önemlidir. Popüler bir sayfa süresi dolduğunda, bir rendercı kiralamayı alır. Diğer istekler, her kopyada aynı sorgu ve render işini tekrarlamaktansa kısa bir doğrulama penceresi sırasında bayat girişi alabilir.
Taze yanıtlar, CDN’nin uygulamaya ulaşmadan önce genel trafiği absorbe etmesini sağlayan s-maxage gibi paylaşılmış önbellek direktiflerini taşır. Laravel oturumu veya bir Authorization başlığına sahip olan istekler, genel önbelleği geçerek, böylece kimlik doğrulanmış içeriğin yanlışlıkla paylaşılan bir yanıt olarak yükseltilmesini önler.
Bir yayım, silme veya erişim değişikliği taahhütleri gönderildikten sonra, PagibleAI hedefe yönelik geçersiz kılma işlemlerini kuyruklar. Eğer bu görev geciktirilirse, yapılandırılmış önbellek süresi, bir eski yanıtın ne kadar süreyle mevcut kalacağını belirler.
İlk olarak taahhüt et, ardından dağıt
İlk olarak taahhüt et, ardından dağıt
Veritabanı yazımları ve dağıtılmış yan etkiler bağımsız olarak başarısız olur. Bir taahhüt öncesinde yayımlanan bir etkinlik, daha sonra geri alınabilecek bir değişikliği tanımlayabilir; bir önbellek veya arama işi geçici bir kuyruk hatasından sonra çalışabilir.
PagibleAI, bu yan etkileri veritabanı işlemi taahhüt edildikten sonra başlatır:
- Arama uzlaşması, içerik işlemi başarılı olduktan sonra gönderilir.
- Render’dan sayfa geçersiz kılma talep edilir ve bu, bir kuyruk işçisi tarafından işlenir.
- İşbirliği olayları, taahhüt sonrası yayınlanır, böylece başka bir editör, veritabanı daha sonra red ederse bir değişiklik almaz.
Dolayısıyla, istemciler, önbellekler ve arama indeksleri, veritabanının daha sonra reddettiği yazımları gözlemlemez.
Görevler, Laravel’in kuyruk sözleşmesini kullanır, bu nedenle üretimde Redis veya Amazon SQS kullanılabilirken, geliştirme daha basit bir bağlantıda kalır. İşçiler, web katmanından bağımsız olarak ölçeklenir ve Laravel, yeniden deneme, başarısız görev yönetimi, denetim ve dağıtım yeniden başlatmalarını sağlar.
Yerleşik arama, dış motor isteğe bağlı
Yerleşik arama, dış motor isteğe bağlı
PagibleAI’nin Laravel Scout motoru, seçilen veritabanında zaten mevcut tam metin olanaklarını kullanır:
- FTS5 SQLite’de
-
MATCH ... AGAINSTMySQL ve MariaDB’de -
tsvectorPostgreSQL’de -
CONTAINSTABLESQL Server’da
Taslak ve yayınlanmış içerik ayrı indeks satırları alır ve CMS’de kullanılan aynı görünürlük sınırını korur.
Bu nedenle, ilk üretim dağıtımı ayrı bir arama kümesine ihtiyaç duymaz. Eğer daha sonraki bir iş yükü, dış bir motoru haklı çıkartırsa, Laravel Scout, uzantı noktası olarak kalır.
Başsız ve sunucu tarafından işlenmiş teslimat
Başsız ve sunucu tarafından işlenmiş teslimat
İçerik üç teslimat yüzeyi aracılığıyla mevcuttur:
- Vue editörü tarafından kullanılan, özel araçlara açık olan bir GraphQL yönetim API’si
- Web uygulamaları, mobil istemciler ve statik-site pipelineleri için yalnızca okunabilir JSON:API
- Doğrudan HTML teslimatından faydalanabilecek siteler için sunucu tarafından render edilen Blade temaları
Tüm üçü aynı içerik modelini kullanır. Düzenleyici ve GraphQL uç noktası, özel bir uygulama ağında kalabilir; yalnızca okunabilir API, bir API geçidinin arkasında oturabilir; ve Blade çıktısı kenarda önbelleğe alınabilir. Ön uç teslimat, düzenleme verisinin ikinci bir kopyasını tutma zorunluluğu olmadan bağımsız olarak ölçeklenebilir.
HTTP isteği ötesinde kiracı bağlamı
HTTP isteği ötesinde kiracı bağlamı
PagibleAI, tek veritabanı çok kiracılığı kullanır. CMS modelleri bir tenant_id taşır ve küresel bir Eloquent kapsamı, sorguları yönlendiren aktif kiracıyı sınırlayarak bu durumu kontrol eder. Çok alanlı yönlendirme, ayrı sayfa ağaçlarını ayrı alan adlarına eşleştirebilir.
Arama işleri, oluşturuldukları kiracıyı korur. Sayfa önbellek anahtarları, kiracı ve domain bilgilerini içerir. Gerçek zamanlı kanallar, hem uygun bir kiracı hem de ilgili görünüm yetkisini gerektirir.
Bu, SaaS ürünleri ve ajansların tek bir dağıtım ve bir paylaşılan veritabanı ile uygulama düzeyinde içerik izolasyonu elde etmesini sağlar. Bu, kiracı başına veritabanı izolasyonu değildir. Her müşteri için ayrılmış bir veritabanı gerektiren gereksinimler, farklı bir kiracılık mimarisi gerektirir.
Gerçek zamanlı ve uzun süreli işlemler
Gerçek zamanlı ve uzun süreli işlemler
Yayınlama etkinleştirildiğinde, PagibleAI Laravel Reverb ve Echo’yu kullanarak düzenleyicilere kaydedilen, yayınlanan, geri yüklenecek, taşınacak veya silinecek içerikler hakkında bildirimde bulunur.
Olaylar güncellenmiş bir listeyi güncellemek için gereken meta verileri taşır. WebSocket bağlantısını ikinci bir içerik dağıtım API’sine dönüştürmez. Açık detay görünümü, değiştirilen içeriği GraphQL aracılığıyla yeniden alır ve bir istemci, yeniden bağlanırken içeriğini yeniden yükler çünkü bağlantı kesik olduğu süre içinde etkinlikleri kaçırmış olabilir.
Laravel Octane ve kuyruk işçileri, uygulamanın istekler veya işler arasında canlı kalmasını sağlar. PagibleAI, kiracı ve erişim durumunu kapsamlı ömürlere bağlı olarak bağlar, GraphQL meta verisini istek üzerinde tutar ve küresel bir kullanıcı kimliği izin önbelleğini önler. Bu, bir yürütme durumunun bir sonraki yürütmeye sızmasını engeller.
İsteğe bağlı Pulse metrikleri, sayfa isteklerini, arama, iletişim formlarını, JSON:API, GraphQL ve MCP işlemlerini kapsar. Yapılandırılmış izleme kayıtları, uygulamanın günlükleme yığını kullanılarak yapılır ve Laravel’in sağlık yönü, bir yük dengeleyici veya Kubernetes projesi için kullanılabilir.
Dağıtımlı bir dağıtım yapılandırma
Dağıtımlı bir dağıtım yapılandırma
PagibleAI’nın yerel varsayılanları tek bir işlemi hedefler. Dağıtımlı bir dağıtım, düğüm yerel bölümlerini paylaşılan hizmetlerle değiştirir.
| Konu | Küçük Kurulum | Dağıtılmış Kurulum |
|---|---|---|
| İçerik | SQLite | Yönetilen MySQL, MariaDB, PostgreSQL veya SQL Server |
| Medya | Yerel genel disk | S3-uyumlu nesne depolama ve CDN |
| Sayfa önbelleği ve kilitler | Dosya önbelleği | Paylaşılan Redis önbelleği |
| Oturumlar | Yerel veya veritabanı | Paylaşılan veritabanı veya Redis |
| İşler | Eşzamanlı veya veritabanı kuyruğu | Redis veya SQS ile bağımsız işçiler |
| Ağ runtime’ı | Bir PHP işlemi | Bölme arkasında replikalar |
| Gerçek zamanlı güncellemeler | Devre dışı | Paylaşılan üretim yapılandırması ile Reverb |
| Telemetri | Yerel günlükler | Merkezileştirilmiş günlükler ve isteğe bağlı Pulse metrikleri |
Bir üretim ortamı şu şekilde başlayabilir:
DB_CONNECTION=pgsql
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
CMS_DISK=s3
# Laravel Reverb'i yükleyip yapılandırdıktan sonra
CMS_BROADCAST=true
Tam sayfa önbelleği kendi deposunu seçtiğinden, Redis’i üretim için açıkça yapılandırın:
// config/cms/theme.php
'cache' => env() ? : ,
Altyapının ayrıca bazı standart işletme kurallarına ihtiyacı vardır:
- Uygulama kodunu, Composer bağımlılıklarını ve yayımlanan varlıkları değişmez bir sürüme inşa edin.
- Yüklenen medyayı geçici web disklerinden uzak tutun.
- Kuyruk işçilerini ayrı çalıştırın, dağıtımlar sırasında yeniden başlatın ve sadece bir zamanlayıcı çalıştırın.
- CDN’nin oturum ve kimlik doğrulama istekleri için genel HTML önbelleğini geçmesini sağlayın.
- Laravel’in sağlık son noktasını uygun olarak veritabanı ve önbellek tanılamaları ile genişletin.
PagibleAI, Laravel’in önbellek API’si, kuyrukları ve dosya sistemini doğrudan kullanır, böylece aynı operasyonel araçlar CMS ve uygulamanın geri kalanı için geçerlidir.
Kaynak, PagibleAI GitHub deposu‘nda mevcuttur ve kurulum kılavuzu ilk dağıtımı kapsamaktadır.
PagibleAI’nin dağıtıma bıraktıkları
PagibleAI’nin dağıtıma bıraktıkları
PagibleAI, bir VPC sağlamaz, PostgreSQL’i ayarlamaz, Redis topolojisi seçmez veya Kubernetes belgeleri yazmaz. Dağıtım ekibi bu seçimlerden sorumludur.
Bunlar, dağıtım sorumlulukları olarak kalır. PagibleAI, bunları içerik modelinin ve editoryal iş akışının dışına çıkarır, böylece durum yönetilen hizmetlere taşınabilir, işçiler web katmanından ayrılabilir ve halka açık yanıtlar kenara doğru hareket edebilir.
Görünür ürün, yapılandırılmış içerik, sürümleme, AI destekli düzenleme, GraphQL, JSON:API ve MCP araçlarını içerir. Dağıtım modeli, daha az görünür seçimlere dayanır: yetkili veritabanı durumu, değiştirilebilir depolama, paylaşılan önbellek koordinasyonu, taahhüttan sonraki yan etkiler, kuyruklu işler ve uzun süreli işlemlerde istek izolasyonu.
Aynı PagibleAI CMS paketi ve içerik modeli, tek bir işlemde veya bir küme üzerinden çalışabilir.
Bu HTML çıktısı, Türk yazılımcılar için rehber niteliğinde bir biçimde, belirtilen kurallara sadık kalınarak yeniden yazılmıştır.
- Bir uygulama, bir işletim modeli
- Dayanıklı durum web düğümünün dışında kalır
- İlk olarak taahhüt et, ardından dağıt
- Yerleşik arama, dış motor isteğe bağlı
- Başsız ve sunucu tarafından işlenmiş teslimat
- HTTP isteği ötesinde kiracı bağlamı
- Gerçek zamanlı ve uzun süreli işlemler
- Dağıtımlı bir dağıtım yapılandırma
- PagibleAI’nin dağıtıma bıraktıkları
Kaynak: Orijinal Makale


