ウェブ制作

バックエンド

pm2をサクッと使う。

お刺身@プログラマー

お刺身@プログラマー

#Oookey_blog_023

pm2をサクッと使う。

こんにちは。おさしみです。
今回はPM2を触ってみたので、PM2についてご紹介していきます

目次

PM2とは?
導入方法
pm2最小構成
便利だったコマンド
設定ファイルについて
まとめ
参考

PM2とは?

PM2は Node.jsアプリ用のプロセスマネージャです。 役割は主に3つ。

ざっくり説明すると、単発でしか動かないnpm script を「サーバー常駐」に昇格させる道具です。
使用場面としては、初期開発やローカルなどでとにかく速度を重視する時になります。 多くのプロセスを作っては消すを繰り返すような時は、場合によってはDockerよりも有効です。

導入方法

インストール 必ずインストール前に現在のバージョンを確認しておきましょう*1

Copied!

copyBtn

npm install -g pm2
pm2 -v # 確認

※1 = NVM等のNodeバージョン管理ツールを使用している場合、Nodeのバージョンごとに 「グローバルnpm環境」 が別物になるので、npm install -g pm2を実行したそのとき有効だったNodeにだけpm2 が入ります。

pm2最小構成

まずは、簡単に動くものを作ってみましょう!

Copied!

copyBtn

pm2 start app.js --name processName

npm scriptをそのまま起動することもできます。

Copied!

copyBtn

pm2 start npm --name processName -- run start

例ではpackage.jsonを想定していますが、pm2は任意のコマンドをプロセスとして管理できます。

便利だったコマンド

Copied!

copyBtn

# プロセス名を付ける
pm2 start app.js --name my-api

# ファイル変更を監視して、変更があれば再起動する
--watch

# メモリ使用量が閾値を超えたらアプリを再起動(リロード)する
--max-memory-restart <200MB>

# スクリプトに追加の引数を渡す(`--` 以降はスクリプト側に渡る)
-- arg1 arg2 arg3

# ログに時刻を付けて出力する
--time

# 表示
pm2 list                                  # 全プロセスの状態を表示
pm2 prettylist                       # プロセス一覧を整形済みJSONで出力
pm2 describe 0                     # 指定したプロセスの詳細情報をすべて表示
pm2 monit                             # 全プロセスをモニタリングする

# ログ
pm2 logs [--raw]                  # 全プロセスのログをストリーミング表示する(--rawで生ログ)
pm2 flush                              # 全ログファイルを空にする
pm2 reloadLogs                   # ログを再読み込みする

# Actions
pm2 stop <process>           # 指定したプロセスIDを停止する(allで全プロセスに)
pm2 restart <process>       # 指定したプロセスIDを再起動する(allで全プロセスに)
pm2 reload <process>        # ダウンタイム0秒でリロードする(allで全プロセスに)
pm2 delete <process>        # pm2の一覧から指定プロセスを削除する(allで全プロセスに) *管理対象から外れる

設定ファイルについて

複数のアプリケーションを管理するための「エコシステムファイル」と呼ばれる設定ファイルを作成することもできます。

Copied!

copyBtn

pm2 init simple

ecosystem.config.js ファイルが生成されます。

Copied!

copyBtn

module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }, {
    name: 'worker',
    script: 'worker.js'
  }]
}

上記ファイルの起動方法は下記コマンドです。

Copied!

copyBtn

pm2 start ecosystem.config.js

正直なところ、設定ファイル作成までやるならばDockerを作った方がよいと個人的には思います。
もっと詳細を知りたい方は、公式サイトで丁寧に説明されていますのでご確認ください。

https://pm2.keymetrics.io/docs/usage/application-declaration/

まとめ

最近はプロセスマネージャーならDockerを使用する機会が多いですが、
サクッと検証したい時や、とにかくプロセスを多く立ち上げては閉じるようなケースでは、
個人的にはPM2の方が効率的に進めることができると考えています。
みなさんもぜひ、ローカル環境等の手軽な環境で試していただけると嬉しいです。

参考