LinuxにおけるNode.jsアプリケーションのための4つのプロセスマネージャー
Node.jsプロセスマネージャーは、Node.jsプロセスまたはスクリプトが継続的に(永遠に)実行されるようにするための便利なツールであり、システム起動時に自動的に起動できるようにします。
それは、実行中のサービスを監視することを可能にし、一般的なシステム管理作業(失敗時の再起動、停止、ダウンタイムなしの設定の再読み込み、環境変数/設定の変更、パフォーマンスメトリクスの表示など)を容易にします。また、アプリケーションのログ記録、クラスタリング、負荷分散、その他多くの便利なプロセスマネジメント機能もサポートしています。
関連情報: 2019年の開発者向けNodeJSフレームワーク14選
パッケージマネージャーは、特に本番環境でのNode.jsアプリケーションのデプロイに役立ちます。この記事では、LinuxシステムにおけるNode.jsアプリケーション管理のための4つのプロセスマネージャーをレビューします。
1. PM2
PM2はオープンソースで、高度で機能豊富、クロスプラットフォームの、最も人気のあるプロダクションレベルのプロセスマネージャーで、Node.jsに組み込みのロードバランサーを備えています。これにより、すべての起動したNode.jsプロセスをリスト、監視、および操作することができ、クラスターモードもサポートしています。
アプリケーションモニタリングをサポートしています:アプリケーションのリソース(メモリとCPU)使用状況を監視するための簡単な方法を提供します。プロセスファイルを使用して各アプリケーションの動作を構成および調整することにより、プロセス管理ワークフローをサポートします(サポートされているフォーマットにはJavascript、JSON、およびYAMLが含まれます)。
アプリケーションのログは、プロダクション環境では常に重要です。この点で、PM2はアプリケーションのログを簡単に管理できるようにします。ログを処理し表示するためのさまざまな方法と形式を提供しています。リアルタイムでログを表示したり、ログをフラッシュしたり、必要に応じて再読み込みすることができます。
重要なことに、PM2はスタートアップスクリプトをサポートしており、期待されたまたは予期しないマシンの再起動時にプロセスを自動的に開始するように設定できます。また、現在のディレクトリやそのサブディレクトリ内のファイルが変更されたときにアプリケーションを自動再起動することもサポートしています。
さらに、PM2 にはモジュールシステムが搭載されており、ユーザーは Nodejs プロセスマネジメント用のカスタムモジュールを作成することができます。例えば、ログローテーション用のモジュールやロードバランシング用のモジュールなど、さまざまなものを作成できます。
最後に、Dockerコンテナを使用している場合、PM2はコンテナ統合を可能にし、プログラム的に使用できるAPIシステムを提供します。
2. StrongLoop PM
StrongLoop PMは、組み込みの負荷分散機能を持つオープンソースの高度なプロダクションプロセスマネージャーであり、Node.jsアプリケーションのために作られています。PM2と同様に、コマンドラインまたはグラフィカルインターフェースを介して使用することができます。
アプリケーションモニタリング(イベントループ時間、CPUおよびメモリ消費などのパフォーマンス指標の表示)、マルチホストデプロイメント、クラスターモード、ダウンタイムなしのアプリケーション再起動とアップグレード、障害時の自動プロセス再起動、およびログの集約と管理をサポートしています。
さらに、Docker サポートがあり、パフォーマンス メトリックを StatsD 互換サーバーにエクスポートし、DataDog、Graphite、Splunk などのサードパーティのコンソールや Syslog および生のログファイルで表示できる機能があります。
永遠に
Foreverは、指定されたスクリプトを継続的に(永遠に)実行するためのオープンソースでシンプルかつ構成可能なコマンドラインインターフェースツールです。これは、Node.jsアプリやスクリプトの小規模なデプロイメントの実行に適しています。foreverは、コマンドライン経由で使用するか、コードに組み込んで使用することができます。
これは、Node.js プロセスを管理(開始、リスト、停止、すべて停止、再起動、すべて再起動など)することを可能にし、ファイル変更の監視、デバッグモード、アプリケーションログ、プロセスの強制終了、終了シグナルのカスタマイズなど、多くの機能をサポートしています。また、コマンドラインから直接渡すことができるいくつかの使用オプションや、JSONファイル内に渡すことができるオプションもサポートしています。
4. SystemD - サービスおよびシステムマネージャー
Linuxでは、Systemdはプロセスやファイルシステムの他のコンポーネントなどのシステムリソースを管理するデーモンです。systemdによって管理されるリソースはユニットと呼ばれます。サービス、デバイス、ソケット、マウント、ターゲットなど、さまざまなタイプのユニットがあります。
Systemdはユニットをユニットファイルとして知られる設定ファイルを通じて管理します。したがって、他のシステムサービスのようにNode.jsサーバーを管理するには、そのためのユニットファイルを作成する必要があります。この場合、それはサービスファイルになります。
Node.jsサーバーのサービスファイルを作成したら、それを起動し、システム起動時に自動的に開始されるように設定し、そのステータスを確認し、再起動(停止して再度起動)したり、設定を再読み込みしたり、他のsystemdサービスのように停止することもできます。
詳細については、シェルスクリプトを使用してSystemdで新しいサービスユニットを作成および実行する方法を参照してください。
要約
Node.js パッケージマネージャーは、プロダクション環境でプロジェクトをデプロイするための便利なツールです。それはアプリケーションを永遠に稼働させ、制御を簡素化します。本記事では、Node.js 用の 4 つのパッケージマネージャーをレビューしました。追加の提案や質問がある場合は、下のフィードバックフォームを利用してご連絡ください。


