9
8

More than 5 years have passed since last update.

Linux上のNodeJSサーバをローカルからリモートデバッグする方法

Last updated at Posted at 2016-07-18

Linux上のNodeJSサーバを実運用に使ってて
環境依存などあって、ローカルではなく
どうしてもサーバを直接デバッグしたいという場合に使える方法です。
(デバッガでブレークポイントかけると他の人のアクセスをブロックしちゃうのでチームで使う場合は注意です。)

説明のため、Mac OSXからAWS EC2上(Linux)のNodeJSサーバをデバッグすると仮定します。
ローカルからssh経由でリモート上にあるnode-inspectorデバッガー(サーバ)に
sshポートフォワーディングという方法でアクセスします。

参考:sshポートフォワーディング

サーバ上のdebug_webservice.shでnode-inspectorを起動し、
ローカルからsshポートフォワーディングでリモートサーバのnode-inspectorにアクセスします。
ついでにshellコマンドでChromeを開きます。
サーバ側にnode-inspectorのインストールとNodeJSは当然--debugモードで起動しておく必要があります。

ローカル側:
user、ip、keyは適宜書き換えてください

debug.sh
#!/bin/sh

user="ec2-user"
# サーバIPアドレス
ip="(ipアドレス)"
# ec2のログインssh key(pem)、カレントディレクトリに存在する想定
key="amazonEC2.pem"
account="${user}@${ip}"

# カレントディレクトリに移動
cwd=`dirname "${0}"`
expr "${0}" : "/.*" > /dev/null || cwd=`(cd "${cwd}" && pwd)`
cd $cwd


command="cd ./shell;./debug_webservice.sh > /dev/null ; exit "


remote_command ()
{
expect -c "
# timeoutをセット
set timeout -1
# sshコマンド
spawn ssh -i $key $account
# 期待されるserverからの応答メッセージ(一部が一致すればOK)
expect \"\$\"
# 以下,ログイン後のお決まりコマンドを列記した例
send \"$command\n\"
# 最後にinteract
interact
"
}

remote_command 


local_command ()
{
kill `lsof -t -i:8080`
ssh -f -N -L 8080:127.0.0.1:8080 -i $key $account
open -a "/Applications/Google Chrome.app" http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858
}

local_command

サーバ側:

debug_webservice.sh
#!/bin/sh
T=$(pgrep -f node-inspector)
kill -9 $T
node-inspector &

使い方

$./debug.sh

自分の場合、コマンドたたくのもめんどくさいのでdebug.commandファイルにしちゃってます。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8