VDS (Sanal Özel Sunucu) üzerinde çalışan production ortamındaki web uygulamasını güncellemek, yeni sürümü dağıtmak veya kritik bir hata düzeltmek gerektiğinde, uygulamayı tamamen kapatıp başlatmak istemeyen geliştiriciler sıkça sorunla karşılaşırlar. Sunucu yeniden başlatılırsa, o esnada gelen kullanıcı istekleri kesilir, bağlantılar kopuklar ve müşteri deneyimi olumsuz etkilenir. Bu yazıda, VDS üzerinde sıfır kapalı kalma süresiyle (zero-downtime) uygulama güncellemesinin nasıl yapılacağını, hangi araçlar ve yöntemler kullanılacağını adım adım açıklayacağız.
Zero-Downtime Deployment Nedir?
Zero-downtime deployment, bir uygulamanın yeni sürümüne geçiş yapılırken, mevcut istekleri serve eden sunucunun kesintisiz çalışmaya devam etmesi anlamına gelir. Bu teknikte genellikle şu yöntemler kullanılır: parallel ortam kurma, reverse proxy ile traffic yönlendirme, graceful restart ve rolling deployment. VDS ortamında bu yöntemler, paylaşımlı hosting'den çok daha düşük maliyetle ve yüksek kontrol ile uygulanabilir.
Nginx Reverse Proxy ile Graceful Restart
Nginx'i reverse proxy olarak kullanmak, zero-downtime deployment'ın en pratik yoludur. Uygulamanız birden fazla worker process'i veya port üzerinde çalışırken, Nginx trafiği bunlar arasında dağıtır. Yeni sürümü ayrı bir port'ta başlatıp, Nginx konfigürasyonunu güncelledikten sonra nginx -s reload komutuyla yapılandırmayı yeniden yüklersiniz. Bu işlem devam eden bağlantıları kapatmadan gerçekleşir.
Örneğin, uygulamanız 3000 portunda çalışıyor olsun. Yeni sürümü 3001 portunda başlatın. Ardından Nginx upstream tanımını güncelleyin:
upstream app_servers { server 127.0.0.1:3000; server 127.0.0.1:3001; }
Bu yapılandırma ile Nginx, yeni gelen istekleri 3001'e yönlendirecek, eski bağlantılar 3000'de sorunsuz bitirilecektir.
Systemd Service ile Graceful Shutdown
VDS'de uygulamayı systemd service olarak tanımladıysanız, systemctl restart yerine systemctl reload komutu kullanmalısınız. Ancak bu sadece uygulama framework'ü reload sinyali destekliyorsa çalışır. Node.js uygulamalarında, SIGTERM sinyali yakalamanız gerekir:
process.on('SIGTERM', async () => { server.close(() => { process.exit(0); }); });
Bu kod, yeni bağlantıları kabul etmeyi durdurur, mevcut isteklerin tamamlanmasını bekler, sonra güvenli şekilde çıkış yapar. Systemd, graceful shutdown için varsayılan olarak 90 saniye bekletir; bu süre içinde process kapanırsa sorunsuz geçilir.
Load Balancer ve Rolling Deployment
Daha büyük uygulamalar için, VDS üzerinde birden fazla uygulama örneği çalıştırabilirsiniz. HAProxy veya Nginx load balancer'ını kullanarak, bu instances arasında trafiği dağıtın. Deployment sırasında:
- Load balancer'dan bir instance'ı çıkarın (drain connections)
- Yeni sürümü bu instance'ta dağıtın ve başlatın
- Healthcheck geçerse, instance'ı tekrar load balancer'a ekleyin
- Sonraki instance'ta aynı işlemi tekrarlayın
Bu yöntemde, hiç bir zaman bütün instances birlikte update edilmez, bu nedenle uygulama her zaman accessible kalır. Healthcheck mekanizması çok önemlidir; load balancer'a yapılandırdığınız endpoint, uygulamanın ready olduğunu gerçekçi biçimde raporlamalıdır.
Database Migration'ı Zero-Downtime ile Yapmak
Uygulama kodu güncellemesi kadar kritik olan nokta, veritabanı schema değişiklikleridir. Backward-compatible migrations yazmalısınız. Örneğin, yeni bir kolonu eklerken, eski kodla da uyumlu olacak şekilde yazın. Genel sıra şöyledir:
- Migration'ı deploy edin (uygulamayı update etmeden)
- Uygulamanın yeni kodu deploy edin
- Eski kodda kullanılan şemaları/sütunları ardından silin (bu ayrı bir migration)
Bu yaklaşım, old ve new uygulama versiyonlarının aynı anda çalışabileceği bir geçiş dönemini sağlar.
Deployment Aracı ve Orchestration
Kapıya kadar, Docker + Kubernetes, Dokku, Capistrano veya custom bash scriptleri kullanarak zero-downtime deployment otomatize edilir. VDS'de en hafif ve etkili çözüm, Dokku gibi mini PaaS'lar veya bash + systemd kombinasyonudur. Bu araçlar, yukarıdaki adımların birçoğunu otomatize eder ve human error'ını azaltır.
Sonuç
VDS üzerinde sıfır kapalı kalma süresiyle deployment yapmak, doğru araçlar ve disiplinli bir yaklaşımla tamamen mümkündür. Reverse proxy, graceful shutdown, rolling deployment ve backward-compatible migrations, production ortamında güvenilir ve stabil bir hizmet sunmaya yardımcı olur. Bogahost'un VDS çözümleri, bu tür advanced deployment stratejilerini rahatça uygulamak için gerekli kontrol ve esnekliği sağlar; kendi sunucunuzda istediğiniz teknoloji stack'ini ve orchestration sistemini kurabilirsiniz.
Web Siteniz Hızlansın!
Blogumuzu beğendiniz mi? Web siteniz için yüksek performanslı ve %99.8 uptime garantili hosting paketlerimize göz atın.
Hosting Paketlerini İncele →