レンタルサーバーでNode.jsアプリを永続化する

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サーバーではムリでした😣

Xサーバーのサポートに「ユーザーレベルでのsystemdの使用は許可されていないのですか?」的な問い合わせをしたら、以下のような回答でした。

共有サーバーにて提供しているサーバーにおいてはroot権限を付与しておりませんし、「sudo」コマンドなどを付与せずでの対応であっても、ご利用のサーバー領域より上位層への試用はかなわないとお考えください。

 

なので、最悪cronを使って5分毎とかに「pm2のプロセスが死んでないか?」を確認し、もし死んでいた場合は立ち上げ直すという処理をするしか無い気がします。

具体的には、以下のようなスクリプトをcronとして登録すればいい気がします。

pgrep -f "node index.js" > /dev/null || (cd index.jsがあるパス && node index.js)

(ほかに何か良い方法あれば、コメントなどで教えていただきたいです)

 

おわり

Node.js
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました