Node.jsの本番サーバーをデプロイする【終了しました
質問
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) を使ってプロキシするだけです。
関連
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?