LoginSignup
19
19

More than 3 years have passed since last update.

インスタンスが起動したら自動的にNode.jsアプリが起動するようにする

Posted at

Node.jsアプリの自動起動をしたい

はじめに

AWSでインスタンスを再起動するたびにアプリケーションを再起動するのが非常に面倒だったため、インスタンスが起動したら自動的にアプリケーションが起動するようにしました。

今回はPM2というプロセスマネージャーを利用してアプリの自動起動を行う方法を、作業メモを兼ねて紹介します。

PM2とは

PM2はデーモンプロセスマネージャーです。

プロセスをデーモン化しておらず、シェルを抜けたらアプリケーションが終了していた、といった経験はみなさんあるのではないでしょうか。

PM2を利用するとプロセスをデーモン化することで、アプリケーションを起動した状態に保つことができます。

そのため、Node.jsアプリケーションの本番運用などに利用されているようです。

公式サイト: PM2

導入

下記コマンドでインストールできます。

Node.jsやnpmは事前にnvmなどを利用してインストールしておきましょう。

$ npm install pm2@latest -g
# or
$ yarn global add pm2

下記コマンドでアプリケーションを開始できます。

$ pm2 start app.js

また、PM2は.jsファイル以外でも利用できます。
実はNode.jsアプリ以外も動かせます(

$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520

引用: PM2 QUICK START

システムの起動時にアプリケーションを開始する

PM2はスタートアップスクリプトを生成することで、マシンの再起動後もプロセスリストをそのまま保持することができます。

つまり、マシンの再起動時にスクリプトやアプリケーションを自動的に開始することができます。

注意点や詳細については公式ドキュメントに記載がありますので、こちらもご覧ください。

引用: PM2 STARTUP SCRIPT

スタートアップスクリプトの生成

スタートアップスクリプトを生成するには下記コマンドを入力します。

$ pm2 startup

上記コマンドを入力すると下記のようなメッセージが表示されます。

$ pm2 startup
[PM2] You have to run this command as root. Execute the following command:
      sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v4.3/bin pm2 startup <distribution> -u <user> --hp <home-path>

メッセージに従って、コマンドをコピーして実行してください。

現在のプロセスリストの保存

マシンの再起動時に再生成したいアプリケーションをすべて起動したら、現在のプロセスリストを保存する必要があります。

$ pm2 save

ちなみに、プロセスリストは下記コマンドで確認できます。

$ pm2 list
┌────┬───────────┬─────────┬─────────┬──────────┬────────┬──────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name      │ version │ mode    │ pid      │ uptime │ ↺    │ status   │ cpu      │ mem      │ user     │ watching │
├────┼───────────┼─────────┼─────────┼──────────┼────────┼──────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ server    │ 1.0.0   │ fork    │ 2476     │ 1h     │ 1    │ online   │ 0.3%     │ 192.8mb  │ foobar   │ disabled │
└────┴───────────┴─────────┴─────────┴──────────┴────────┴──────┴──────────┴──────────┴──────────┴──────────┴──────────┘

以上です。

EC2インスタンスや仮想環境を再起動したら、自動的にスクリプトが実行されているはずです。

.tsファイルって実行できる?

TypeScriptでアプリケーションを作成していたので、下記コマンドを試してみたところ、エラーを吐きました。

$ pm2 start app.ts # ts-nodeが入っていないとエラー

どうやら、トランスパイル後のjsファイルを実行するか、別途ts-nodeのインストールが必要なようです。

$ pm2 install typescript ts-node
$ pm2 start app.ts # OK

PM2とts-nodeの細々としたことについては、このIssueが参考になりそう。

さいごに

今回はアプリケーションの自動起動のためにPM2を利用してみました。

systemdを利用する方法(具体例)など他にもやり方はあります。foreverもよく紹介されていましたしね。
例:Expressアプリケーション用のプロセス・マネージャー

PM2はアプリケーションを管理する機能が豊富で、もっといろいろなことができるようです。例えばログを見たり、アプリをモニタリングしたり。
私もいろいろ触ってみようと思います。

公式: PM2

19
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
19