Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8941

Nuxt を winser でサービス化する

$
0
0

Nuxt で作成したアプリケーションを WinSer でWindowsサービス化しようとしたらいろいろはまったので備忘録として対処を残しておく。

背景

nodejs で作成したアプリケーションを Windows環境でサービス化するためのツールとして、 WinSerがある。
start コマンドとして「node index.js」のように node.exe を直接叩く場合は特に設定をする必要はないが、 NuxtJS のような専用の起動コマンドが存在するような場合に、npm や yarn からは起動できてもWindowsサービスとして起動できないということが発生する。

対策

WinSer (で使用される nssm)は絶対パスか、パスが通ったコマンド出なければ実行できない(ように見える)。また「.cmd」拡張子のファイルは拡張子込みで記述する必要がある。

1. WinSer をインストールする

npm に上がっている WinSer はバグっているので修正されたものを拾う。

yarn add winser "git+https://github.com/LiberisLabs/winser.git"   

2. パスを通す

yarn へのパスを通す。
以下がもしないなら、サービスを実行するユーザーの環境変数の Path に追加する。そのユーザーで yarn をグローバルインストールしてあることが前提。

C:\Users\<username>\AppData\Roaming\npm

Local System アカウントで実行するなら、システム環境変数に追加する。

3. package.json に winser 要のタスクを追記する

package.json
"scripts":{"dev":"nuxt","build":"nuxt build","start":"nuxt start","generate":"nuxt generate","install-service":"winser -i -a --startcmd \"yarn.cmd nuxt start\" --set \"ObjectName .\\appuser password\"","uninstall-service":"winser -r -x"}

WinSer は標準では start をもとにサービスを作成するが、それでは動かないため --startcmd で start の代わりの実行コマンドを記述する。さらに、 --set で実行ユーザーとパスワードを指定する(Local System で実行するなら不要)。
やっていることは nuxt.cmd を叩いているだけだが、直接見つけられないため、yarn を叩くことで
nuxt.cmd を見つけている。

サービス化した場合、サービスの起動停止を自動化したくなる。UACを無効化したくなるが、その必要はなく、特定ユーザーにサービスに係る権限を与える方法はこの辺りを参照する。

参考

WinserでNode.jsのサーバーをサービス化してみる
NSSM
WinSer


Viewing all articles
Browse latest Browse all 8941

Trending Articles