node.jsアプリの本番運用に便利なPM2。その基本的な利用方法と応用(自分ニーズ)のメモ。
基本操作
インストール
npm install -g pm2
環境によってはsudoする必要があります。
起動
pm2 start index.js
リスト
pm2 list
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬──────────┬────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼──────────┼────────┼──────────┤
│ index │ 0 │ fork │ 47551 │ online │ 0 │ 0s │ 2% │ 9.8 MB │ hoge │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴──────────┴────────┴──────────┘
restart
pm2 restart index #app name
delete
pm2 delete index #app name
logを見る
pm2の場合、console.log()の出力はログファイルに出力されるようです。
pm2 logs
pm2 --lines 100 #行数指定
pm2 flush #全ログのクリア
pm2 logs app_name という感じでアプリ名を指定することもできるようです。
応用1:環境により動作を切り替えたい
素のnodeなら、下記のようにすればいいのですが、PM2だと設定ファイルを用意する必要があります。
NODE_ENV=development node index.js
なお、素のnodeで環境変数を設定・利用する方法についてはこちらを参考にしてください。
設定ファイル
例えば、下記のような設定ファイルを用意します。
pm2.config.json
{
"name" : "app",
"script" : "index.js",
"env" : {
"NODE_ENV" : "development",
},
"env_production" : {
"NODE_ENV" : "production",
}
}
設定ファイルを利用した起動
設定ファイルを利用して下記のように起動できます。
pm2 start pm2.config.json --env production
応用2:環境により起動App nameを変更したい(管理上の問題)
設定ファイルは便利なのですが、環境毎に起動アプリ名を指定する方法がわからなくて調べました。
下記のようにname変数も環境毎の変数として記述すればよいようです。
pm2.config.json
{
"script" : "index.js",
"env" : {
"NODE_ENV" : "development",
"name" : "app_test"
},
"env_production" : {
"NODE_ENV" : "production",
"name" : "app_pro"
}
}
起動
pm2 start pm2.config.json --env production
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬──────────┬────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼──────────┼────────┼──────────┤
│ app_pro │ 0 │ fork │ 48616 │ online │ 3 │ 0s │ 0% │ 9.8 MB │ hoge │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴──────────┴────────┴──────────┘
App nameが環境に応じたものになっています。
同じポートを利用していたらエラーとなります。状況にもよりますが、実際は環境により起動ポートを変えたりします。