pm2の導入 〜Node.jsアプリの自動起動〜
pm2を利用して、Node.jsアプリをOSの起動時にバックグラウンド・プロセス(デーモン)として自動的に起動させるまでの個人的メモです。
環境
- Ubuntu 18.04.4 LTS
- Node.js v14.2.0
- pm2 4.4.0
なお、pm2はグローバル・インストールしている。 即ち、
$ npm install pm2 -g
概要
pm2を利用したOS起動時のNode.jsアプリの自動起動は、
- OSの起動
- pm2の起動
- Node.jsアプリの起動
という流れで進む。
そのため、pm2を利用してOS起動時にNode.jsアプリを自動的に起動させるためには、
の設定が必要となる。
また、以下の手順によると、ログインしているユーザとしてpm2及びNode.jsアプリが自動起動するように設定される。 そのため、前提として、適切なユーザとしてログインしておくことが必要である。
pm2の自動起動設定
$ pm2 startup
これにより、pm2
の自動起動設定方法が示される。今回は、以下のメッセージが表示された。
[PM2] Init System found: systemd ubuntu [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/home/ubuntu/.nodebrew/node/v14.2.0/bin /home/ubuntu/.nodebrew/node/v14.2.0/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu
従って、
$ sudo env PATH=$PATH:/home/ubuntu/.nodebrew/node/v14.2.0/bin /home/ubuntu/.nodebrew/node/v14.2.0/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu
なお、これにより以下のメッセージ(一部)が表示された。
Target path /etc/systemd/system/pm2-ubuntu.service Command list [ 'systemctl enable pm2-ubuntu' ] [PM2] Writing init configuration in /etc/systemd/system/pm2-ubuntu.service [PM2] Making script booting at startup... [PM2] [-] Executing: systemctl enable pm2-ubuntu... Created symlink /etc/systemd/system/multi-user.target.wants/pm2-ubuntu.service → /etc/systemd/system/pm2-ubuntu.service. [PM2] [v] Command successfully executed.
どうやら、手動でsudo systemctl enable ...
を実行する必要はないようである。
また、これにより以下のメッセージ(一部)も表示された。
[PM2] Remove init script via: $ pm2 unstartup systemd
どうやら、これによりインストールされたファイルは、sudo pm2 unstartup systemd
によりアンインストールできるようである(未確認)。
Node.jsアプリの自動起動設定
まずは、
$ cd ${pathToApp} $ pm2 ecosystem
${pathToApp}
はNode.jsアプリのベース・ディレクトリのパス。
これにより、${pathToApp}
にpm2による起動用の設定ファイルecosystem.config.js
が作成されるので、適宜編集する。
次に、
$ pm2 start ecosystem.config.js
これにより、Node.jsアプリがバックグラウンドで起動する。
最後に、
$ pm2 save
これにより、現在起動しているNode.jsアプリが記憶される。
記憶されたNode.jsアプリは、次回のOS起動時のpm2の自動起動時に、自動的に起動する。