1. ホーム
  2. javascript

Node.jsの本番サーバーをデプロイする【終了しました

2023-09-28 08:06:43

質問

Node.jsアプリを書き、それを私たちの生産マシンの1つで動作させたいと思っています。これはかなり一般的な要求のように思えますが、私は適切なソリューションを見つけることができません。本番用 Node.js アプリケーションをデプロイするための確立されたソリューションはないのでしょうか?

アプリはシンプルですが (<100 LOC)、非常に効率的で信頼性が高く、再起動することなく何年も継続的に実行できることが必要です。大規模なサイトで、数十の接続/秒で実行される予定です。(このアプリはウェブサーバーとしては使用されず、JSON APIのみを持っています。)

以下は、私が検討したアプローチですが、まだ確信が持てないものです。

フレームワーク(例:Express)を使用する

アプリは高性能である必要があり、とてもシンプルなので、フレームワークの形で肥大化することは避けたいことです。

でサーバを起動し nohup

ここでの主な問題は例外処理で、私たちは (明らかに) 例外によってサーバー全体がクラッシュすることを望んでいません。私が理解したところでは、アプリ全体を try {} catch {} ループでラップしても、例外が発生した後に Javascript インタープリターが予測できない状態になるため、役に立ちません。これは正しいですか?

Foreverのようなものを使って

私たちのFreeBSDマシンにForeverをインストールしたことがありますが、非常にバグが多かったです。結局、Forever から終了させることができないプロセスを無限に生成してしまったのです。私は kill -9 を実行しなければならず、Forever 上で本番用アプリを実行することにあまり自信がありません。また、Upstart (類似のツールですが、より一般的です) は FreeBSD 上で実行できないようです。

ホスティングされたソリューション (例: Heroku、Rackspace、Amazon EC2、など)

これはおそらく最もシンプルなソリューションですが、私たちはすでに残りの Web サーバーのために本格的なハードウェアを所有しています。財務的な考慮からすると、それは意味がありません。

きっと、これに対する確立されたソリューションがあるに違いないでしょう?私は何かを見逃しているのでしょうか?

どのように解決するのですか?

  • セッション、クッキー、ミドルウェアなどを自分で処理したいのでなければ、フレームワーク(Express のような、戦場でテストされたものをお勧めします)を本当に本当に使うべきです。Express は本当に軽いです。
  • nohupでサーバを起動する:そんなことはしないで、通常の"node"コマンドで起動すればよい。また、Express はルートを try-catch でラップしているので、ルートでサーバーがクラッシュすることはありません。しかし、サーバーに深刻な問題が発生した場合、再起動を恐れる必要はありません(さらに、少なくとも2~3のプロセスがある場合、1つだけが死ぬので、少なくとも1~2が残り、ユーザーは何も感じないでしょう)。
  • 監視については、個人的には以下のような OS レベルのものを好みます。 アップスタート モニット .
  • ホスティングソリューション: あなたはすでに自分のハードウェアを持っているので、他の何かにお金を投資する必要はありません。ロードバランサー(多分 nginx か node-http-proxy) を使ってプロキシするだけです。