VDS (Sanal Özel Sunucu) kiralayan geliştiricilerin en büyük korkularından biri beklenmedik bir anda web uygulamasının çökmesidir. Özellikle production ortamında çalışan bir Node.js, Python, Java veya PHP uygulaması hata yüzünden kapanırsa, siz fark etmeden saatler boyunca siteniz erişilemez halde kalabilir. İşte bu noktada health check mekanizmaları ve otomatik restart stratejileri devreye girmesi gerekir. Bu rehberde, VDS üzerinde uygulamanızı canlı tutmak için pratik yöntemleri öğreneceksiniz.
Uygulamanız çökmek neden tehlikelidir?
VDS'de çalışan bir uygulamanın beklenmedik şekilde kapatılması, yalnızca web sitesi sorunuyla sınırlı değildir. Gerçek bir production senaryosunda bu durum:
- Müşteri kaybı ve güven sarsılması (özellikle e-ticaret sitelerinde)
- SEO sıralamasında düşüş (Google, uzun süreli erişilemezlik gördüğünde penaltı verebilir)
- Veri kaybı riski (eğer uygulamanız düzgün kapanmıyorsa işlem yarıda kalabilir)
- Siz uyku esnasında veya çalışmıyorken sistem çökmüş olabilir
Bu sorunların hiçbiri hoş değildir. Neyse ki, VDS seviyesinde çalışan sistem yöneticileri bunu çözmek için basit ama etkili araçlara sahiptir.
Systemd ile oto-restart kurulumu
Linux sunucularda çalışan modern uygulamalar genellikle systemd ile yönetilir. Systemd service dosyası oluşturarak, uygulamanız çökmesi durumunda otomatik olarak yeniden başlatılmasını sağlayabilirsiniz.
Örneğin, Node.js uygulamanız için /etc/systemd/system/myapp.service dosyası şöyle görünebilir:
[Unit]
Description=My Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /home/appuser/app.js
Restart=always
RestartSec=5
User=appuser
Environment="NODE_ENV=production"
[Install]
WantedBy=multi-user.target
Restart=always parametresi uygulamanın her kapatılması durumunda yeniden başlatılmasını sağlar. RestartSec=5 ise uygulamanın 5 saniye arayla yeniden başlatılacağını belirtir. Böylece ani çökmeler otomatik olarak giderilir.
Health check mekanizmasının kurulması
Bazı durumlarda uygulamanız sürüyor gibi görünebilir ama aslında yanıt vermiyor olabilir. Örneğin, veritabanı bağlantısı kopması veya memory leak nedeniyle application deadlock durumuna girebilir. Bu tür sorunları yakalamak için health check endpoint'i oluşturmalısınız.
Node.js örneğinde basit bir health check şöyle olabilir:
app.get('/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date() });
});
Ardından, Systemd ile beraber çalışan bir monitor scripti bu endpoint'i periyodik olarak kontrol edebilir. Eğer yanıt gelmezse, uygulamayı öldürüp systemd'nin yeniden başlatmasını sağlayabilirsiniz.
Supervisor ve PM2: Manuel kontrol seçeneği
Bazı geliştiriciler systemd yerine PM2 veya Supervisor gibi araçları tercih ederler. PM2 özellikle Node.js geliştirmeleri için oldukça popülerdir.
PM2 ile uygulamanızı başlatırken --auto-restart parametresini kullanabilirsiniz:
pm2 start app.js --auto-restart --watch
--watch parametresi, dosya değişikliklerinde uygulamayı otomatik olarak yeniden başlatır. Bunu production'da dikkatli kullanmalısınız, çünkü her dosya değişimi bir restart tetikleyebilir.
Monit ve Nagios ile gelişmiş izleme
Daha kapsamlı bir çözüm için Monit gibi sistemler kullanabilirsiniz. Monit, yalnızca process'i izlemekle kalmaz, CPU, memory ve disk kullanımını da kontrol eder. Belirli bir threshold'u aşarsa (örneğin process 500MB memory'den fazla kullanırsa), otomatik olarak restart edebilir:
check process myapp with pidfile /var/run/myapp.pid
start program = "/bin/systemctl start myapp"
stop program = "/bin/systemctl stop myapp"
if memory usage > 500 MB for 5 cycles then restart
if failed url http://localhost:3000/health for 3 cycles then restart
Bu ayarlar, bellek sızıntısı veya health endpoint'in down olması gibi durumları otomatik olarak düzeltir.
VDS seviyesinde log izleme ve alert
Restart'lar tamam, ama neden çöktüğünü bilmezseniz problem tekrar tekrar yaşanır. Bu yüzden uygulamanızın loglarını düzenli olarak izlemeli ve hata alındığında haberdar olmalısınız.
VDS'de gelen log dosyalarını tail -f ile izleyebilir veya ELK Stack (Elasticsearch, Logstash, Kibana) gibi bir log aggregation sistemi kuabilirsiniz. Ayrıca, uygulamanız crash'lendiğinde email veya Slack bildirim gönderecek scriptler yazabilirsiniz.
Best practice: Tüm bunları bir araya getirmek
Gerçek production ortamında birkaç katmanı aynı anda kullanmalısınız:
- Systemd service ile temel oto-restart mekanizması
- Health check endpoint ile başarısızlık tespiti
- Monit veya benzer araç ile resource kontrol
- Structured logging ve alert sistemi
- Düzenli VDS backup ve disaster recovery planı
Bu kombinasyon, uygulamanızın çoğu çökmeden kurtulmasını sağlar. Tabii ki en iyisi çökmemesidir, o yüzden kod kalitesi ve testing de önemli.
VDS kiralayıp production ortamı kurmaya başlıyorsanız, bu mekanizmaları ilk günden itibaren konfigüre etmelisiniz. Bogahost'taki managed VDS hizmetleri, bu tür kurulumlar ve monitoring sistemleri ile gelen özel paketler sunmaktadır.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yap