Help us understand the problem. What is going on with this article?

Node.jsでホットデプロイ(Graceful Restart)をサポートするデーモンを作成しました。

More than 5 years have passed since last update.

Node.jsの弱点である「スクリプトが落ちる = サーバーが落ちる」、「スクリプトを更新したらサーバーを再起動する必要がある」という問題点をクリアするqilinというモジュールがnpmに登録されています。

このqilinモジュールを利用して以下の機能を提供するアプリケーション管理デーモンを作成しました。

  1. 指定されたファイル・ディレクトリを監視し、変更があった場合に自動でworkerを再起動する。

  2. httpでコマンドを送信する事により、workerの再起動や各workerのCPU・メモリ使用状況をJSON形式で取得したりできる(Windowsは未対応)。

  3. 管理デーモンにhttpでコマンドを送る際にベーシック認証が使用できる。

使用方法の雰囲気だけ軽く説明すると、

qilin-daemonで管理したいNode.jsアプリケーションに関するこんな感じの設定ファイルを作成して、

設定ファイルサンプル(qilin-daemon.json)
{
  "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

と、こんな感じでお手軽にホットデプロイ環境を導入する事ができます。

詳細・ダウンロードはこちらからどうぞ。

ktty1220
WEBサービス運営で食べていくことを夢見て修行中。
https://ktty1220.me/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away