Node.jsで作成したアプリケーションはそのままの状態では、接続を切った後にサーバーも終了してしまいます。
このため、WEB上に公開している場合は接続を切ったと同時に、URLにアクセスしてもサーバーエラーでページが表示されなくなってしまいます。
これを防ぐために、常時Node.jsを起動し続けるようにするのが一般的です(常駐化といいます)。
ここでは、foreverを使ったNode.jsの常駐化についてまとめています。
foreverとは何か?
今回使用するforeverとは、node.jsをデーモン化(常に起動)しておくためのパッケージのことです。
foreverのインストール
foreverは次の2行(3行)のコマンドでインストールと起動が可能です。
#foreverのインストール
$ npm install -g forever
#forever起動
cd [node.jsの設定ファイルがあるフォルダパス]
forever start -w [設定ファイル名.js]
「-w」オプションをつけると、ファイルの変更内容を自動検知して再起動します。
インストール時のエラーと対応方法
foreverのインストール時に発生した下記のようなエラーが発生することがあります。
pm WARN engine forever@2.0.0: wanted: {"node":">=6"} (current: {"node":"5.0.0","npm":"3.3.6"})
npm WARN engine forever@2.0.0: wanted: {"node":">=6"} (current: {"node":"5.0.0","npm":"3.3.6"})
npm WARN engine forever-monitor@2.0.0: wanted: {"node":">=6"} (current: {"node":"5.0.0","npm":"3.3.6"})
npm WARN deprecated path-is-absolute@2.0.0: This package is no longer relevant as Node.js 0.12 is unmaintained.
npm ERR! Linux 4.14.173-137.229.amzn2.x86_64
npm ERR! argv "/home/ec2-user/.nvm/versions/node/v5.0.0/bin/node" "/home/ec2-user/.nvm/versions/node/v5.0.0/bin/npm" "install" "-g" "forever"
npm ERR! node v5.0.0
npm ERR! npm v3.3.6
npm ERR! code EMISSINGARG
nodeのバージョンは6以上が必要なのに、現在のバージョンは5なので対応していませんというエラーです。
現在の最新版がバージョン14なので、バージョンがかなり古いことがわかります。
エラー対応方法
nodeのバージョン管理ソフトnvmを使って、nodeのバージョンをアップデートすればエラーは改善します。
nvmのインストール
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
nvmへのパスを通す
$ . ~/.nvm/nvm.sh
nodeとnpmの最新版をインストール
$ nvm install node
##インストール完了(現在の最新版はv14.2.0)
Downloading and installing node v14.2.0...
Downloading https://nodejs.org/dist/v14.2.0/node-v14.2.0-linux-x64.tar.xz...
Checksums matched!
Now using node v14.2.0 (npm v6.14.4)
以上でnodeの最新版インストール完了です。
デフォルトで使用するバージョンの切り替え
一度サーバーから出て再度入ると、元の古いバージョンに戻ってしまうので、新しいバージョンをデフォルトに設定します。
#インストールされているnodeのバージョンを確認
$ nvm ls
-> v5.0.0
v14.2.0
default -> 5.0.0 (-> v5.0.0)
#デフォルトのバージョンを変更(この例では v14.2.0)
$ nvm alias default v14.2.0
default -> v14.2.0
foreverをインストール
$ npm install -g forever
##下記のようなメッセージが出て完了
npm WARN deprecated path-is-absolute@2.0.0: This package is no longer relevant as Node.js 0.12 is unmaintained.
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
/home/ec2-user/.nvm/versions/node/v14.2.0/bin/forever -> /home/ec2-user/.nvm/versions/node/v14.2.0/lib/node_modules/forever/bin/forever
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/forever/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ forever@2.0.0
added 264 packages from 180 contributors in 11.002s
※基本的にオプションの「-g」をつけるようにしてください。
これがないと、インストールしたディレクトリ以外ではfoerverを実行できなくなります。
foreverの起動
#cdでnode.jsの設定ファイルのあるディレクトリに移動
$ forever start -w ファイル名.js
以上で完了修正は完了です。
お疲れさまでした。