← Blog sayfasına dön

Blog

WordPress için Docker: İzole Konteynerler Neden Her Şeyi Değiştiriyor

Bir istemci diğerini çökertemez. Bir site diğerini enfekte edemez. PAGEnza'nın barındırma platformunun arkasındaki mimari budur.

Geleneksel WordPress barındırma, birden fazla siteyi tek bir sunucuda barındırır. PHP'yi, dosya sistemi erişimini ve genellikle bir veritabanı sunucusunu paylaşırlar. Bu, işe yaradığı sürece sorun yoktur - işe yaramadığı zaman ise ciddi bir sorundur.

PAGEnza, her WordPress sitesini kendi Docker konteynerinde barındırır. Bu gönderi, bunun pratikte ne anlama geldiğini ve birden fazla istemci sitesini yöneten ajanslar için neden önemli olduğunu açıklıyor.

Paylaşımlı barındırma sorunu

Tipik bir paylaşımlı barındırma planında veya birden fazla WordPress kurulumu olan temel bir VPS'de bile:

Kaynak çekişmesi: bir sitenin trafik artışı yaşaması, sunucudaki diğer tüm siteleri yavaşlatır. Site A'daki optimize edilmemiş bir eklenti, Site B'deki performansı düşürür.

Güvenlik sızıntısı: bir WordPress kurulumu (güvenlik açığı olan bir eklenti, zayıf bir şifre veya güncel olmayan bir çekirdek sürümü aracılığıyla) ele geçirilirse, dosya sistemi erişimi kazanan bir saldırgan genellikle aynı sunucudaki diğer sitelerin dosyalarını okuyabilir.

PHP sürüm çakışmaları: Site A, eski bir eklenti için PHP 7.4'e ihtiyaç duyar. Site B, daha yenisi için PHP 8.2'ye ihtiyaç duyar. Paylaşımlı barındırmada birini seçersiniz.

Veritabanı maruziyeti: paylaşımlı veritabanı sunucuları, yanlış yapılandırılmış bir kullanıcı izninin diğer sitelerin verilerini açığa çıkarabileceği anlamına gelir.

Docker konteynerleri, altyapı düzeyinde tüm bu sorunları çözer.

Bir konteyner aslında nedir?

Bir Docker konteyneri, kendi içinde şunlara sahip hafif, izole bir işlemdir:

  • Dosya sistemi (konteyner, sınırlarının dışındaki dosyaları göremez)
  • Ağ yığını (kendi IP adresi, kendi portları)
  • İşlem alanı (diğer konteynerlerin işlemlerini göremez)
  • Kaynak sınırları (CPU ve bellek üst limitleri)

Ana bilgisayar çekirdeğini diğer konteynerlerle paylaşır, ancak çekirdeğin üzerindeki her şey izole edilmiştir. Tam bir sanal makine değildir - saniyeler içinde başlar, dakikalar değil ve kaynakların çok küçük bir kısmını kullanır.

WordPress için tek bir konteyner şunları çalıştırır: Nginx, PHP-FPM ve WordPress dosyaları. Veritabanı, yalnızca o belirli WordPress konteynerine bağlı ayrı bir konteynerde çalışır.

PAGEnza bir siteyi nasıl barındırır?

PAGEnza'da yeni bir istemci sitesi oluşturduğunuzda, 45 saniyeden kısa sürede şunlar olur:

  1. Temel bir WordPress görüntüsünden yeni bir Docker konteyneri başlatılır
  2. WordPress, paylaşımlı MariaDB örneğinde yeni bir veritabanı ile yapılandırılır (o konteynerin kimlik bilgilerine izole edilmiştir)
  3. PAGEnza eklentisi otomatik olarak yüklenir ve etkinleştirilir
  4. İstemcinin alt alan adına sahip bir Nginx sanal ana bilgisayarı yapılandırılır
  5. Let's Encrypt aracılığıyla SSL verilir
  6. Konteyner, doğru yönlendirme kurallarıyla ters proxy'ye kaydedilir

İstemci, "Site oluştur" düğmesine tıkladıktan sonra 45 saniye içinde yayında olan clientname.pagenza.com gibi bir URL alır. Manuel sunucu yapılandırması, SSH, DNS bekleme süresi (alt alan adı için - özel alan adı DNS yayılımı ayrıdır) yoktur.

Konteyner izolasyonu pratikte

Bellek sınırları: her konteynerin yapılandırılabilir bir bellek üst sınırı vardır. Çalışmayan bir eklenti bir istemcinin sitesinde bellek artışına neden olursa, diğer konteynerlere ayrılan belleği tüketemez. Site yavaşlayabilir veya 503 hatası verebilir - ancak diğer istemcileri etkilemez.

Dosya sistemi izolasyonu: İstemci A'nın WordPress dosyaları, İstemci B'nin konteyneri tarafından tamamen görünmezdir. İstemci A'nın sitesindeki ele geçirilmiş bir eklentinin, İstemci B'nin dosyalarına erişim yolu yoktur.

Ağ izolasyonu: konteynerler yalnızca tanımlanmış ağ köprüleri aracılığıyla iletişim kurar. İstemci A'nın veritabanı konteyneri, sistemdeki başka hiçbir konteynerden değil, yalnızca İstemci A'nın WordPress konteynerinden gelen bağlantıları kabul eder.

Konteyner başına PHP: her konteyner kendi PHP-FPM örneğini çalıştırdığı için, farklı istemciler için farklı PHP sürümleri çalıştırabilirsiniz. PHP 7.4 gerektiren İstemci A'nın eski eklentisi, PHP 8.2'deki İstemci B'nin modern yığınıyla birlikte sorunsuz çalışır.

Özel alan adları

Varsayılan kurulum her istemciye bir *.pagenza.com alt alan adı verir. Kendi alan adını isteyen istemciler için süreç şöyledir:

  1. İstemci, alan adının A kaydını PAGEnza sunucu IP'sine yönlendirir
  2. PAGEnza kontrol panelinde özel alan adını girersiniz
  3. Ters proxy yapılandırması otomatik olarak güncellenir
  4. Let's Encrypt aracılığıyla özel alan adı için SSL verilir

WordPress siteurl ve home seçenekleri buna uyacak şekilde güncellenir. İstemcinin bakış açısından, sitesi alan adında çalışır - ziyaretçilere görünen bir yönlendirme veya alt alan adı yoktur.

Ajanslar için bunun anlamı

Birden fazla istemci sitesi çalıştıran ajanslar için pratik faydalar:

Onboarding hızı: yeni bir istemci sitesi sağlamak bir dakikadan az sürer. Sunucu kurulumu, cPanel, manuel WordPress kurulumu yok.

İstemci ayrımı: her istemcinin sitesi gerçekten izole edilmiştir. Sorunlu bir eklenti yükleyen bir istemci yalnızca kendi sitesini etkiler.

Ölçeklenebilirlik: yeni bir istemci eklemek, yeni bir sunucu sağlamayı gerektirmez. Konteyner altyapısı, ana bilgisayarın kapasitesine göre ölçeklenir ve kapasite eklemek, daha fazla ana bilgisayar düğümü eklemek anlamına gelir.

Felaket kurtarma: her site konteynerleştirildiği için, yedekleme ve geri yükleme konteyner düzeyinde çalışır. Tek bir istemcinin sitesini geri yüklemek, diğer istemcileri etkilemez.

Dezavantajı, konteyner barındırmanın paylaşımlı barındırmadan site başına daha pahalı olmasıdır. Ancak site güvenilirliğinin ve istemci ayrımının pazarlık edilemez olduğu ajanslar için, özellikle onboarding süresi tasarrufu dikkate alındığında, ekonomi mantıklıdır.