node.js のアプリを永続化(デーモン化)させる

のえる のえる
2022.08.03

夏の暑さに負けて自宅でエアコンフル稼働な私です。

 

最近は node.js のお仕事が出てきたのですが、通常通り動いてOKとなっても、サーバーのSSHが終了するとプログラムも停止してしまいます。

 

そこで今回は node.js を永続化させる方法をご紹介します。

デーモン化モジュール : PM2

今回は pm2 というモジュールを使い、node.js をデーモン化していきます。

 

これは通常のデーモン化ではなく、pm2のサービスとして起動させるものです。

 

まずはインストールしていきましょう。

 

 

この時、プロジェクトに追加するのではなく、システムとして稼働させるため 「-g」 をつけることを忘れないでください。

 

また、インストールは必ず node.js のファイルを実行させるユーザーで行ってください。

 

さらに、このままでも機能するのですが、実運用を考えてログファイルをローテートさせる機能もインストールします。

 

 

続いて、デーモン化させるための設定ファイル(service.json)をnode.jsのプロジェクト内に作成します。
(内容は適宜読み替えてください)

 

 

起動ファイルが作成できたら、サービスを起動するコマンドを実行します。

 

 

下記のようになれば成功です。

 

自動再起動

このままではサーバーが再起動した場合、デーモンが復旧しません。

 

そこで、サーバー起動と同時に起動する設定も行います。

 

起動スクリプトをコマンドで生成します。

 

 

画面にコマンドが表示されますので、それをそのままコピーして、内容を読み替えて実行します。

 

そして、再起動時に復元する設定を保存します。

 

 

こちらについては各自の環境によって異なりますので、詳しくは下記公式ドキュメントを確認してみてください。

 

公式ドキュメント
PM2 – Startup Script

ログローテート設定

ログファイルをローテーションさせる設定を行います。

 

ログの設定は様々ありますが、下記のコマンドは必ずやっておいたほうがいいでしょう。

 

 

ほかにも日付フォーマットやファイル最大サイズなどが設定できますので、環境に合わせて設定したほうが良いと思います。

 

公式ドキュメント
npm / pm2-logrotate

pm2を使用する

一覧表示

pm2 のサービス一覧を見るには、下記のコマンドを実行します。

 

 

画面にインストール時と同じような情報が表示されます。

 

表示内容のポイントは idnamenamespace です。

 

このどちらかを使用してコマンドを実行します。

再起動する・停止する

pm2 のサービスを再起動するには、下記のコマンドを実行します。

 

 

そして pm2 のサービスを停止するには、下記のコマンドを実行します。

 

 

サービスを再起動/停止するには、そのサービスを指定する必要があります。

ログを確認する

pm2 で利用しているプログラムのログを確認するには、下記のコマンドを実行します。

 

 

また、pm2自体のログを確認する場合は、idなどをつけずに使用することで確認できます。

さいごに

node.js のプログラムやモジュールに関する情報は溢れていますが、実際のデーモン化に伴う情報はあまり見られませんでしたので記載してみました。

 

ちなみに、HTMLなどと異なり、実行しているファイルを更新しても自動で変更されたりはしません。

 

そのため、pm2コマンドで再起動をする必要があり、その際 node.js 内の変数はもちろん揮発します。

 

なのでデータを復元する方法は別途用意する必要があります。

 

その話はまた機会があれば。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer