Linux'ta Node.js ile Amansız TCP Sunucu Kurulumu - 1 | Koray Al
Ben ise bu işler için Node.js kullanıyorum. Hızlıca bir şeyler yapmaya kalkıştığımız için de bazen aldığımız paketlerden dolayı yazdığımız script göçebiliyor. Bunu da Linux ortamında pek sevilen Monit ve Node.js scriptimizi /etc/init klasörüne ekleyeceğimiz birkaç satırlık bir dosya ile servis haline geterek çözebiliyoruz.
Node.js ve npm - Kurulum
İlk adımımız Node.js ve npm kurulumunu gerçekleştirmek. Bunun için Ubuntu'da şu satırları çalıştırıyoruz12:
npm Node.js kullanırken zaman zaman ihtiyacımız olan eklentileri kolaylıkla projemize eklememizi sağlayan bir paket yöneticisi. Uygulamamıza özel olarak istediğimiz eklentiyi3:
Şeklinde ekleyebilir, ya da eğer bu eklenti sürekli karşımıza çıkacak ise:
komutunu kullanarak global kütüphanemize ekleyebiliriz.
Node.js ve NPM - Uygulama Testleri
Kurulumumuzu tamamladığımıza göre artık ilk testlerimizi yapabiliriz. Önce bir modül kuralım. Ben socket.io'yu zaten kurmuş olduğum için, bolca kullanılan coffee-script4 eklentisini yüklüyorum.
[root@vnklnx korayal]# npm install coffee-script -g
Evet, gördüğümüz üzere kurulum başarılı bir şekilde gerçekleşti.
[root@vnklnx korayal]# node
> [root@vnklnx korayal]#
(İki kez *CTRL+C ile node konsolundan çıkış yapabiliyoruz.)*
Evet, Node.js de sorunsuz çalışıyor. Bundan sonra bir ornek-dosya.js dosyası oluşturup konsolda:
komutunu göndererek istediğimiz scripti çalıştırabiliriz. (node.js otomatik olarak js uzantılarını göz ardı edebiliyor.)
Node.js - Örnek TCP Sunucu Uygulaması
Buraya da hemen şuradaki örneği kırpıp /var/www/apps/haydar/haydar.js dosyamıza koyuverelim:
(Türkçeleştirme ve port değişikliği)
Node.js Uygulamasının Servis Haline Getirilmesi
Diyelim ki uygulamamızı hazırladık ve bunu arka planda servis olarak çalıştırmak istiyoruz. Bu işlemi Ubuntu ile birlikte gelen Upstart5'ı kullanacağız.
Bunun için öncelikle /etc/init klasörüne haydar.conf dosyamızı aşağıdaki içerikle ekliyoruz:
author      "Koray Al"
echo $$ > /var/run/haydar.pid
exec sudo -u root /usr/local/bin/node /var/www/apps/haydar/haydar.js >> /var/log/haydar/haydar.sys.log 2>&1
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/haydar/haydar.sys.log
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/haydar/haydar.sys.log
Yine özetlemek gerekirse:
OS açılımında start komutunu, kapandığında da stop komutunu çalıştır.
Uygulama başlatıldığında script bölümünü çalıştır. ( sudo -u root /usr/local/bin/node /var/www/apps/haydar/haydar.js >> /var/log/haydar/haydar.sys.log 2>&1 )
Uygulama başlamadan önce pre-start bölümünü, kapandığında da pre-stop bölümünü çalıştır.
Yukarıdaki satırların güzelliği, aynı zamanda Node.js uygulamanızın tüm çıktısını da haydar.sys.log dosyasına aktarıyor olması. Bu sayede arka planda çalışan uygulamanız göçtüğünde, ne olmuş ne bitmiş görmeniz de mümkün. (Tabi son üründe bu tip bir log dosyası tutmak çok saçma olacaktır, o durumlarda node.js uygulamanızın log düzeyini de kısmakta fayda var.)
Monit - Kurulum
Monit, aslında oldukça kapsamlı bir takip servisi. Ben ise çoğu diğer yazılımlarda olduğu üzere kendime lazım olan kadarını bilmeye gayret gösteriyorum.
Bu örnekte tek yaptığım kontrol, uygulamamın çalıştığı TCP portunu kurcalayıp, bağlantı yok ise uygulamayı yeniden başlatmak.
Kurulum için tek yapmanız gereken aşağıdaki komutu çalıştırmak6:
Kurulum bittikten sonra şu komut ile monit kurulumunun tamamlanıp tamamlanmadığını kontrol edebilirsiniz:
[root@vnklnx korayal]# service monit restart
Monit - Konfigürasyon
Monit, /etc/monit/monitrc dosyasının son satırında da görüleceği üzere /etc/monit.d/ klasöründe bulunan bütün dosyaları include ediyor. Böylece uygulamalarımıza özel olarak ayrı ayrı dosyalarda konfigürasyonları tutabiliyoruz. Benim kullanacağım dosya adı: /etc/monit.d/haydar
Evet, uygulamamızın adı Haydar olacak. Dosyamızın içeriği ise şu şekilde:
check process haydar with pidfile "/var/run/haydar.pid"
start program = "/sbin/start haydar"
stop program  = "/sbin/stop haydar"
if failed port 11337 type tcp with timeout 10 seconds then restart
Bu uygulamamız adım adım:
/var/run/haydar.pid dosyasına sahip haydar işleminin çalışıp çalışmadığını kontrol ediyor.
Uygulamanın başlatma komutunu tanımlıyor.
Uygulamanın kapatma komutunu tanımlıyor.
11337 numaralı TCP portuna 10 saniye sonunda timeout olması durumunda yeniden başlatıyor.
Bu kontrolü ise /etc/monit/monitrc dosyasındaki "set daemon 60" satırına göre 60 saniyede bir yapıyor.