Windows10でNode.jsアプリをPM2で自動起動(サービス化)する方法

投稿日: 2017/9/17 14:35

当社ではNode.jsで社内アプリなどを作っていることが多いのですが、
常時起動のWindows 10のサーバを再インストール作業したため、
Node.jsで組んでいたアプリの自動起動を再設定しようとしたら結構やり方を忘れていたため
忘備録的に今回やった内容を記載しておきます。

まずは当然Node.jsのセットアップ。
Node.jsの公式サイトからインストーラをダウンロードしてインストールします。

https://nodejs.org/ja/

今回は現時点での安定板の最新である6.11.3LTSをインストール。

続いてNode.jsをデーモン化するアプリであるPM2をインストール。
PM2を使うことで自動再起動やログ管理などサーバ側で便利な機能を使うことができます。
インストールはコマンドラインやPowershellから
npmコマンドでグローバルインストールすればOKです。

npm install -g pm2

PM2コマンドを使うときに管理者権限でなければ動かないことがあるため、
権限関係が疑われるエラーが出たら管理者モードでコマンドラインを動かしてみると
動くことがあります。
通常権限でも動いたりするのでこの辺はよくわからず。

pm2コマンドでnodeアプリを登録します。
常時起動したいNode.jsのアプリを登録します。
例えば C:\SampleApp の bin\sample-app.js を登録する場合は次のコマンドです。

cd C:\SampleApp
pm2 bin\sample-app.js

登録したアプリを覚えてもらうには次のコマンドです。

pm2 save

saveしたときの登録状態を復元するには

pm2 resurrect

で復元できます。

この状態ではpm2の自動起動は登録されていないため、
自動起動用に pm2 startup というコマンドが用意されているのですが、
困ったことにWindowsには対応していません。

そのため公式ドキュメントを見たところ、
pm2-windows-service か pm2-windows-startup を使えと書いてあったので、
両方試してみました、pm2-windows-service は自動起動はしてくれたのですが、
初期状態では pm2 resurrect を自動起動後に実行してくれなかったので
今回は pm2-windows-startup を使いました。

インストールはnpmコマンドでグローバルインストールで

npm install -g pm2-windows-startup

以後、コマンドライン上で pm2-startup というコマンドが使えるようになるので

pm2-startup install

で自動起動を登録したら次回再起動時には勝手にpm2が起動され、
saveしておいたアプリを自動的に起動してくれます。

自動起動を解除するときは

pm2-startup uninstall

でOKです。