Xserverのようなレンタルサーバー上で、Node.jsのWebアプリを永続化する方法について調べたメモ。
Node.js=シングルプロセス・シングルスレッド
Node.jsは、シングルプロセス・シングルスレッドです。
なので、マルチコアなサーバー上でnode index.js
のように単純に動かしてしまうと、スペックを十分に発揮できません。
こういうときは、以下の方法などでマルチプロセス化します。
- pm2のようなツールを使う
- clusterモジュールを使って自前で実装する
Node.jsアプリ の 永続化
永続化とは、「そのアプリが停止したとしても自動的に再起動して再度動くようにすること」です。
Node.jsの場合は、以下のようなツールを使うことで簡単に永続化できます。
- pm2
- nodemon
- forever
pm2を使うと、マルチプロセスにもなるし、個人的にはこれでいいのでは?って思ってます🤔
永続化ツール の 永続化
pm2を使うと、Node.jsアプリの永続化はできますが
pm2自体が死んでしまうと、Node.jsアプリを復活させてくれる存在がいなくなってしまいます。
なので、pm2自体も永続化する必要があります。
Linux上で動くプロセスを永続化するには、systemdを使うのが(おそらく)一般的です。
systemdはsystemctlというコマンドで操作できて、systemctl --user enable hoge.service
のように–userというオプションをつけるとroot権限なしでsystemdに登録できるっぽいのです。
ただ、私が使用しているXサーバーではムリでした😣
なので、最悪cronを使って5分毎とかに「pm2のプロセスが死んでないか?」を確認し、もし死んでいた場合は立ち上げ直すという処理をするしか無い気がします。
具体的には、以下のようなスクリプトをcronとして登録すればいい気がします。
pgrep -f "node index.js" > /dev/null || (cd index.jsがあるパス && node index.js)
(ほかに何か良い方法あれば、コメントなどで教えていただきたいです)
おわり
コメント