systemd で Node.js アプリをバックグラウンドサービスとして実行する
Node.jsアプリをバックグラウンドサービスとして実行する方法
nohupコマンドは、ターミナルが閉じてもプロセスが続行するようにします。
メリット
- 手軽に実行できる
- プロセスの終了処理がうまくいかない場合がある
- ログ管理が難しい
- クラッシュ時の復旧が難しい
使用方法
nohup node app.js &
pm2を使う
pm2は、Node.jsアプリケーションをデーモン化し、それを管理するためのツールです。
- クラッシュ復旧
- ログ管理
- ダウンタイムなしのリロード
- 設定が少し複雑
npm install pm2 -g
pm2 start app.js
systemdは、Linuxディストリビューションで使用されているサービス管理ツールです。
- 高度な設定が可能
- 他のサービスとの連携
- systemdサービスファイルを作成
- サービスファイルを有効化
- サービスを起動
詳細は、systemdのドキュメントを参照してください。
Foreverは、pm2と似たような機能を持つツールです。
- pm2よりも軽量
- 設定が簡単
- pm2ほど機能が豊富ではない
npm install forever -g
forever start app.js
- 手軽に実行したい場合は、nohupコマンドを使う。
- クラッシュ復旧やログ管理が必要な場合は、pm2を使う。
- 高度な設定が必要な場合は、systemdを使う。
- 軽量なツールを使いたい場合は、Foreverを使う。
- バックグラウンドサービスとして実行する場合は、ログファイルの出力方法を検討する必要があります。
- アプリケーションがクラッシュした場合に備えて、復旧方法を検討する必要があります。
注意
- 使用する前に、各ツールのドキュメントをよく読んでください。
app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000);
npm install pm2 -g
pm2 start app.js
systemdを使う場合
- 以下の内容で
/etc/systemd/system/app.service
ファイルを作成します。
[Unit]
Description=My Node.js App
[Service]
Type=simple
ExecStart=node app.js
[Install]
WantedBy=multi-user.target
- 以下のコマンドを実行してサービスファイルを有効化します。
systemctl enable app.service
systemctl start app.service
nohupコマンドを使う場合
nohup node app.js &
Foreverを使う場合
npm install forever -g
forever start app.js
上記以外にも、Node.jsアプリをバックグラウンドサービスとして実行する方法があります。 詳細については、上記の参考資料を参照してください。
注意事項
- 上記のコードは、あくまでもサンプルです。 実際の環境に合わせて変更する必要があります。
Node.jsアプリをバックグラウンドサービスとして実行するその他の方法
Windows サービスとして実行する
Windows では、Node.jsアプリをWindowsサービスとして登録することで、バックグラウンドサービスとして実行することができます。
- Windows標準機能で実現できる
- 設定ファイルを手動で編集する必要がある
- 他のOSでは使用できない
- Node.jsアプリをサービスとして実行するためのモジュールをインストールします。
- サービス設定ファイルを作成します。
- サービスをインストールします。
Dockerは、アプリケーションとその環境をまとめてパッケージ化できるツールです。 Dockerを使ってNode.jsアプリをイメージとして作成し、コンテナとして実行することで、バックグラウンドサービスとして実行することができます。
- 環境構築が容易
- 他のOSでも実行できる
- 拡張性が高い
- Dockerfileを作成します。
- イメージをビルドします。
Herokuは、PaaS (Platform as a Service) と呼ばれるサービスで、サーバーの管理や運用をせずにアプリケーションを開発・実行することができます。 Herokuを使ってNode.jsアプリをデプロイすることで、バックグラウンドサービスとして実行することができます。
- サーバー管理が不要
- 簡単にデプロイできる
- スケーラブル
- 無料プランでは機能が制限されている
- カスタマイズ性が低い
- Herokuアカウントを作成します。
- Heroku CLIをインストールします。
- アプリケーションをHerokuにデプロイします。
AWS Lambdaは、サーバーレスコンピューティングサービスです。 AWS Lambdaを使ってNode.jsコードを実行することで、バックグラウンドサービスとして実行することができます。
- 従量課金制
- コードの複雑さが制限される
- すべてのユースケースに適しているわけではない
- AWS Lambdaコンソールを開きます。
- Lambda関数を作成します。
- 手軽に実行したい場合は、Windowsサービスとして実行するか、Herokuを使う。
- 環境構築が容易で、他のOSでも実行したい場合は、Dockerを使う。
- サーバー管理が不要で、スケーラブルな環境を求めている場合は、AWS Lambdaを使う。
- 使用する前に、各方法のドキュメント
node.js process background