winserを使用してnode.jsアプリをWindowsサービスに登録・実行する
koa
で作成したWebアプリをWindowsサービスとして実行したかったので winser
というモジュールを使用してみました。
概要
- winser を使用すると、node.jsのアプリを Windows Service に登録できる
- winserは NSSM をラッピングしている
- npm script にインストール・アンインストールのコマンドを登録する
-
package.json
のname
がサービス名として使用される - インストール後はWindowsの SC コマンドを使用してサービスを起動・停止する
- 登録したサービスを実行すると
npm start
に登録した内容が実行される
詳細
1. winserのインストール
普通に npm install winser
でOK。
2. package.jsonの修正
-
name
をWindowsサービスに登録したい名前にする -
npm start
でアプリが実行されるように修正する -
npm run install-service
で winser を使用してサービスをインストールするよう修正する -
npm run uninstall-service
で winser を使用してサービスをアンインストールするよう修正する
{
"name": "hoge-service",
"version": "1.0.0",
"description": "Hogehoge Front-End Service",
"main": "app.js",
"scripts": {
"start": "node.exe app.js",
"test": "gulp",
"install-service": "winser -i -a",
"uninstall-service": "winser -r -x"
},
:
}
各オプションの意味は、以下のとおり。
-
-i
: サービスのインストール -
-a
: サービス登録後に自動的に実行する -
-r
: サービスの削除 -
-x
: サービス削除前に停止する
winser の README にあるように、 postinstall にインストールコマンドを指定すれば、 npm install
完了後に続けてサービス登録するようにできますが、今回は本番環境でのみサービス登録したかったので、明示的にコマンドを叩くようにしました。
3. サービス登録
2. package.jsonの修正 で登録した install-service
を実行してインストールを行います。
実際にサービス実行されるとき、 npm start
の内容が実行されます。
Local System の権限で動くので、システム環境変数で node.exe
に PATH
が通るように設定しておく必要があります。
- コマンドプロンプトを 管理者として実行 します。
-
npm run install-service
でインストールが実行されます。
C:\App\workspace\web-app>npm run install-service
> hoge-service@1.0.0 install-service C:\App\workspace\web-app
> winser -i -a
Use start command "node.exe app.js".
The program "hoge-service" was installed as a service.
The service for "hoge-service" was started.
4. サービス削除
- コマンドプロンプトを 管理者として実行 します。
-
npm run uninstall-service
でインストールが実行されます。
C:\App\workspace\web-app>npm run uninstall-service
> hoge-service@1.0.0 uninstall-service C:\App\workspace\web-app
> winser -r -x
The service for "hoge-service" was removed.