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