Dağıtım Dizin Düzeni: Sürümleri Yan Yana Tutmak

Sürümlü dağıtım dizin yapısı, paylaşılan dizinler, yayın akışı, saniyeler süren geri alma ve izin yönetimi. Dağıtım Dizin Düzeni: Sürümleri Yan Yana Tutmak…

Dağıtım Dizin Düzeni: Sürümleri Yan Yana Tutmak
İçindekiler
  1. Klasik Yaklaşımın Sorunları
  2. Sürümlü Dizin Yapısı
  3. Paylaşılan Dizinler
  4. Yayın Akışı
  5. Geri Alma
  6. Eski Sürümleri Temizlemek
  7. İzinler ve Sahiplik
  8. Konteyner Kullananlar İçin
  9. Sonuç
  10. Sıkça Sorulan Sorular (SSS)
  11. Doğrudan kopyalamanın sorunu ne?
  12. Sürümlü yapı nasıl çalışıyor?
  13. Neleri sürüm klasörü dışında tutmalıyım?
  14. Geri alma her zaman güvenli mi?

Dağıtım Dizin Düzeni: Sürümleri Yan Yana Tutmak

Yeni sürümü yayına aldınız ve bir hata çıktı. Geri almak için depodan eski sürümü çekip tekrar kurmanız gerekiyor — ve bu on dakika sürüyor. Oysa eski sürüm hâlâ diskte dursaydı, geri alma bir saniye sürerdi.

Bu yazı, sunucudaki dağıtım dizin yapısını ele alıyor.

Klasik Yaklaşımın Sorunları

Doğrudan çalışan dizine yazmak yaygın ama sorunludur:

  • Yayın sırasında site tutarsız olur.
  • Geri alma yeniden kurulum gerektirir.
  • Eski dosyalar kalabilir.
  • Hangi sürümün çalıştığı belirsizleşir.

Birinci madde en görünür sorundur: dosyalar birer birer kopyalanırken gelen bir istek, yarısı yeni yarısı eski bir kod tabanıyla karşılaşır ve beklenmedik hatalar üretir.

Bu süre kısa olsa bile yoğun bir sitede yüzlerce isteği etkiler.

Üçüncü madde ise sinsi bir sorundur. Yeni sürümde silinmiş bir dosya, doğrudan kopyalama yönteminde diskte kalmaya devam eder ve eski kod hâlâ çalışabilir.

Sürümlü Dizin Yapısı

Dizin İçeriği
Sürümler Her yayın ayrı klasörde
Güncel Aktif sürüme bağlantı
Paylaşılan Yüklemeler, günlükler, ayarlar

İkinci satır tüm yaklaşımın anahtarıdır: web sunucusu sabit bir yolu gösterir, o yol ise bir sembolik bağlantıdır — sürüm değiştirmek, bağlantının hedefini değiştirmekten ibarettir ve anlık gerçekleşir.

Dosya kopyalama yayın öncesinde tamamlanmıştır; geçiş anı yalnızca bir işaretçi güncellemesidir.

Üçüncü satır ise kritik bir ayrımdır. Kullanıcı yüklemeleri ve günlükler sürüm klasörünün içinde olmamalıdır, aksi hâlde her yayında kaybolurlar.

Paylaşılan Dizinler

Sürümler arası taşınması gerekenler:

  1. Kullanıcı yüklemeleri.
  2. Günlük dosyaları.
  3. Ortam yapılandırması.
  4. Önbellek dizinleri.
  5. Oturum dosyaları.

Üçüncü madde güvenlik açısından da doğrudur: ortam yapılandırmasını sürüm klasörünün dışında tutmak, hem her yayında yeniden oluşturulmasını önler hem de o dosyanın depoya karışma riskini ortadan kaldırır.

Sürüm klasöründeki ilgili yollar bu paylaşılan konuma bağlantı olarak tanımlanır.

Dördüncü madde ise dikkat gerektirir. Bazı önbellekler sürüme özgüdür ve paylaşılmamalıdır; kod değiştiğinde eski önbellek geçersizdir.

Beşinci madde ise kullanıcıların yayın sırasında çıkış yapmasını önler.

Yayın Akışı

Adım Etki
Yeni sürüm klasörü oluştur Canlıyı etkilemez
Kodu yerleştir Canlıyı etkilemez
Bağımlılıkları kur Canlıyı etkilemez
Paylaşılan bağlantıları kur Canlıyı etkilemez
Kontrolleri çalıştır Canlıyı etkilemez
Bağlantıyı değiştir Geçiş anı
Servisleri yenile Yeni kod devrede

Bu akışın gücü ilk beş adımın risksiz olmasıdır: yayın hazırlığının tamamı canlı siteye hiç dokunmadan yapılır — bir adım başarısız olursa geçiş hiç yapılmaz ve kullanıcılar hiçbir şey fark etmez.

Beşinci adım özellikle değerlidir. Yeni sürümün açılıp açılmadığı, geçişten önce test edilebilir.

Yedinci adım ise çalışma zamanına göre değişir. Bazı ortamlar dosya değişikliğini otomatik algılar, bazıları yeniden başlatma gerektirir.

Geri Alma

Bu yapının en büyük kazancı budur:

  • Eski sürüm diskte durur.
  • Bağlantı geri çevrilir.
  • İşlem saniyeler sürer.

Bu hız, kriz anında belirleyicidir: bozuk bir yayını geri almanın saniyeler sürmesi, sorunu araştırmak yerine önce geri alıp sonra sakince incelemenizi mümkün kılar.

Geri alma pahalıysa ekipler onu yapmak yerine canlıda hata ayıklamayı tercih eder ve kesinti uzar.

Ancak bir sınır vardır ve bilinmelidir: veritabanı şema değişiklikleri geri alınmaz.

Bu yüzden şema değişiklikleri geriye uyumlu yapılmalıdır; eski kod yeni şemayla da çalışabilmelidir.

Eski Sürümleri Temizlemek

  1. Belirli sayıda sürüm saklayın.
  2. Aktif sürümü asla silmeyin.
  3. Temizliği otomatikleştirin.

Birinci madde disk yönetimi için gereklidir: her yayın bağımlılıklarıyla birlikte yüzlerce megabayt yer kaplayabilir ve temizlik yapılmazsa disk aylar içinde dolar.

Beş sürüm saklamak çoğu ekip için yeterlidir; daha eskisine dönme ihtiyacı nadirdir.

İkinci madde bariz görünür ama otomatik temizlik betiklerinde kazayla ihlal edilebilir. Bağlantının gösterdiği klasör her zaman korunmalıdır.

Üçüncü madde ise unutmayı önler. Temizlik, yayın akışının son adımı olarak tanımlanmalıdır.

İzinler ve Sahiplik

Dizin İzin
Kod dizinleri Salt okunur olabilir
Yükleme dizini Yazılabilir
Günlük dizini Yazılabilir
Yapılandırma dosyası Kısıtlı okuma

Birinci satır güçlü bir güvenlik önlemidir: kod dizinini web sunucusu kullanıcısına salt okunur yapmak, bir açıktan yararlanan saldırganın sunucuya dosya yazmasını engeller.

Bu, web kabuğu yerleştirme saldırılarının çoğunu etkisiz kılar.

Uygulamanın yazması gereken tek yerler paylaşılan dizinlerdir ve onlar da web kökünün dışında tutulmalıdır.

Konteyner Kullananlar İçin

  • İmaj zaten değişmezdir.
  • Sürüm etiketi bağlantının yerini alır.
  • Geri alma eski etikete dönmektir.

Konteyner tabanlı yapılarda bu desen zaten yerleşiktir: konteyner imajları değiştirilemez olduğu için her sürüm doğal olarak ayrı bir varlıktır ve geri alma önceki imajı çalıştırmaktan ibarettir.

Ancak paylaşılan veri konusu aynen geçerlidir; kalıcı veri konteyner dışında tutulmalıdır.

Dizin düzeni yaklaşımı, konteyner kullanmayan geleneksel kurulumlarda aynı faydayı sağlar.

Sürümleri yan yana tutmak ek disk alanı gerektirir; sanal sunucu barındırma altyapısı paketlerinde disk kapasitesini bu yapıya göre planlamak gerekir.

Sonuç

Doğrudan çalışan dizine yazmanın en görünür sorunu tutarsızlıktır: dosyalar kopyalanırken gelen bir istek, yarısı yeni yarısı eski bir kod tabanıyla karşılaşır. Sürümlü dizin yapısı bunu çözer — hazırlığın tamamı canlıya dokunmadan yapılır, geçiş anı yalnızca bir bağlantı güncellemesidir. Asıl kazanç ise geri almadadır: saniyeler süren bir geri alma, ekiplerin canlıda hata ayıklamak yerine önce geri alıp sakince incelemesini sağlar. Kullanıcı yüklemelerini ve günlükleri sürüm klasörünün dışında tutun.

Sıkça Sorulan Sorular (SSS)

Doğrudan kopyalamanın sorunu ne?

Dosyalar birer birer kopyalanırken gelen istekler, yarısı yeni yarısı eski bir kod tabanıyla karşılaşır ve beklenmedik hatalar üretir. Ayrıca yeni sürümde silinmiş dosyalar diskte kalmaya devam eder ve eski kod hâlâ çalışabilir.

Sürümlü yapı nasıl çalışıyor?

Web sunucusu sabit bir yolu gösterir, o yol ise bir sembolik bağlantıdır. Yeni sürüm ayrı bir klasöre hazırlanır — kod yerleştirme, bağımlılık kurma ve kontroller canlıya hiç dokunmadan yapılır. Geçiş anı yalnızca bağlantının hedefini değiştirmekten ibarettir ve anlık gerçekleşir.

Neleri sürüm klasörü dışında tutmalıyım?

Kullanıcı yüklemeleri, günlük dosyaları, ortam yapılandırması ve oturum dosyaları. Bunlar sürüm klasörünün içindeyse her yayında kaybolurlar. Yapılandırmayı dışarıda tutmak ayrıca o dosyanın depoya karışma riskini de ortadan kaldırır.

Geri alma her zaman güvenli mi?

Kod tarafında evet, veritabanı tarafında hayır — şema değişiklikleri bağlantı çevrilerek geri alınmaz. Bu yüzden şema değişikliklerini geriye uyumlu yapın; eski kod yeni şemayla da çalışabilmelidir. O zaman geri alma gerçekten saniyeler sürer.