Node.js
forever
デバッグ

nodeのデバッグ実行を有効にしてforeverで稼働させる

nodejsを開発する際、デバッグ実行するためにはnodeをデバッグモードで実行する必要がありますが、foreverでnodeが稼働している環境での設定をしてみました。

なお、Visual Studio Codeでnodejsをデバッグする方法はこちら
Visual Studio Codeでリモートサーバー上のNodejsをデバッグする
になります。
ChromeでもChrome Debugging Protocolを利用してデバッグ可能です。

環境

MacOS 10.12.6 (Sierra)
Nodejs:7.10.1
npm:4.2.0

下準備

  • デバックしたいNodejsがforeverで稼働していること。
  • リモートサーバー等ローカル以外で稼働している場合、対象サーバーの下記で設定するデバッグ用のポートが開放されていること。

nodejsのデバッグ設定

nodejs単体でのデバッグ実行は下記のようなコマンドになります。

node --inspect[=[host:]port]

[=[host:]port]を指定しない場合、デフォルトでは127.0.0.1:9229に設定されます。

ローカルだけでなく、別サーバーで稼働中のnodeをデバッグしたい場合は
[=[host:]port]の部分に192.168.33.10:9229のように接続元のIPとポートを設定する必要があります。
また、特にIPを制限しない場合の設定は下記になります。
(デバッグモードにしないと思いますが、本番稼働中のサーバーの際は気をつけて下さい)

node --inspect=0.0.0.0:9229

起動すると下記のような起動時にログが流れます。

Debugger listening on port 9229.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
    chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=0.0.0.0:9229/bd58f05d-b341-4d0f-8a31-03640a747d62

のようなログが出ればデバック準備可能です。
※起動ログに実験的な機能と記載されています。将来仕様が変わる可能性があります。
また、記載されているURLを利用してchromeでもデバックできます。(IPの部分は稼働サーバーのアドレスに変更必要です)

foreverでnodejsのデバッグ設定

上記設定をfoeverの起動時に指定します。
通常foreverで起動する際には

forever start app.js

のようにfoeverのアクションとエントリーポイントのjsファイルのみの指定となります。

これをforeverのオプション-cを利用してnodeをオプション付きで指定します。

forever -c 'node --inspect=0.0.0.0:9229' app.js

この設定でnodeがinspectオプション付きで実行されます。
同様にログファイルの指定等も利用できるようになります。
下記はforeverのファイル監視オプションと同時にnodeのログファイル指定、デバッグモードの設定をつけた例です。

forever -w -l /var/log/node/forever.log -c 'node --inspect=0.0.0.0:9229' app.js

package.jsonのstart項目で指定する場合は下記のようになります。
※下記はforeverをグローバルインストールしていないのでmoduleまでのパスを追記しています。

{
  "name": "manjii_app",
  "scripts": {
    "start": "NODE_ENV=development node_modules/forever/bin/forever -w  -l /var/log/node/forever.log -c 'node --inspect=0.0.0.0:9229' server.js"
  },
  "dependencies": {
    "express": "4.13.3",
  }
}

なお、上記を利用しているサンプルは下記においています。
https://github.com/manjiii/Vagrant-samples/tree/master/Skeleton-nginx-nodejs-mongodb

参考サイト

nodejs公式
Node.js v8.5.0 Documentation
※8.5.0となっていますが--inspectオプショはv6.3.0から使えるようです。
githubのforever公式
foreverjs/forever