Node.jsの弱点である「スクリプトが落ちる = サーバーが落ちる」、「スクリプトを更新したらサーバーを再起動する必要がある」という問題点をクリアするqilinというモジュールがnpmに登録されています。
このqilinモジュールを利用して以下の機能を提供するアプリケーション管理デーモンを作成しました。
-
指定されたファイル・ディレクトリを監視し、変更があった場合に自動でworkerを再起動する。
-
httpでコマンドを送信する事により、workerの再起動や各workerのCPU・メモリ使用状況をJSON形式で取得したりできる(Windowsは未対応)。
-
管理デーモンにhttpでコマンドを送る際にベーシック認証が使用できる。
使用方法の雰囲気だけ軽く説明すると、
qilin-daemonで管理したいNode.jsアプリケーションに関するこんな感じの設定ファイルを作成して、
{
"exec": "app.js",
"args": [],
"workers": 3,
"daemon_port": 9999,
"worker_disconnect_timeout": 5000,
"silent": false,
"watch": [ "libs", "routes", "views", "config/config.json" ],
"auth_username": "admin",
"auth_password": "admin"
}
qilin-daemonを実行します。
$ coffee /path/to/qilin-daemon.coffee /path/to/qilin-daemon.json
すると、こんなメッセージが出てworkerプロセスが起動します。
2013-10-13T02:50:34.795Z - info: Worker[2] is up: 6912
2013-10-13T02:50:34.803Z - info: Worker[1] is up: 3308
2013-10-13T02:50:34.818Z - info: Worker[3] is up: 8500
[daemon] app.js x 3 started (daemon_port: 9999)
curlでデーモンと通信して、アプリケーションのリソース使用状況を取得してみます。
$ curl http://localhost:9999/info
{
"result": {
"master": {
"pid": 7108,
"cpu": 6.35,
"mem": 22.68
},
"workers": [
{
"pid": 8276,
"cpu": 4.1,
"mem": 10.84
},
{
"pid": 7796,
"cpu": 4.11,
"mem": 10.85
},
{
"pid": 7660,
"cpu": 3.94,
"mem": 10.85
}
],
"total": {
"cpu": 18.5,
"mem": 55.22
}
},
}
※見やすくするためにJSONを展開しています。
管理対象であるapp.jsに何か変更を加えるとworkerプロセスが自動で再起動します。
[daemon] killed workers
2013-10-13T03:01:18.555Z - info: Worker[3] died: 7660
2013-10-13T03:01:18.559Z - info: Worker[1] died: 8276
2013-10-13T03:01:18.561Z - info: Worker[2] died: 7796
2013-10-13T03:01:18.631Z - info: Worker[4] is up: 8864
2013-10-13T03:01:18.656Z - info: Worker[5] is up: 7156
2013-10-13T03:01:18.670Z - info: Worker[6] is up: 9992
[daemon] restart workers
と、こんな感じでお手軽にホットデプロイ環境を導入する事ができます。
詳細・ダウンロードはこちらからどうぞ。