ノードのインストール
問題:リポジトリには、必要なバージョンのノードのパッケージがない場合があります。 または、異なるバージョンのノードを必要とする2つのプロジェクトを作成できます。
解決策:このような場合の開発マシンでは、nvmを使用します。 バトルサーバーでも簡単に使用できます。サーバーを起動するには、特別なスクリプトを作成するだけです。
ポート80へのアクセス
問題:ポート80を読み取るには、アプリケーションにスーパーユーザー特権が必要です(詳細については、CAP_NET_BIND_SERVICE、 man capabilitiesを参照してください)。 ただし、これらの権限でノードを起動することは安全ではないと見なされます。
ソリューション:
- NginxやHAProxyなどのプロキシサーバーを使用します。
-
iptables
を使用して、リクエストをポート80から多数にリダイレクトします。 ほぼ1つのコマンドで実行されます:iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
- 同じスーパーユーザー権限で開始しますが、ソケットに接続した直後に、プロセスはプログラムで特権を下げます。 詳細はこちら 。
負荷分散
問題:ノードはシングルスレッドであり、マルチコアプロセッサを効率的に使用できません。
ソリューション:
- 実際、彼ができることはすべて。 クラスターAPIを参照
- また、 node-http-proxyまたはfugueもあります 。
- Nginxを使用できます(ここでは、 one 、 twoと記述されています)。 またはHAProxy 。
ノードを直接使用するか、Nginxを使用しますか?
この問題は多くの場所で議論されていますが、コンセンサスはありません。 一方、nginxは長年にわたって信頼性が高く、実績のあるソリューションです。 一方、ノード自体も同じことができます。
原則として、これらのオプションの1つが提供されます。
- ノードは、静的ファイルの配布まですべてを処理します。
- ノードはhaproxyの略です。
- ノードはNginxの背後にあり、ページ生成にのみ使用されます。他のすべて(静的分散、バランシング、httpsの作業)はNginxによって行われます
落ちたプロセスの再起動
問題:サーバーが突然クラッシュした場合にサーバーを再開する方法
ソリューション:
- 例外を正しく処理すれば、実際にはクラッシュすることはありません。
- Upstart (サービスの開始に使用する可能性が最も高い)は、落ちたプロセスを再起動できます。
- さて、実際に監視と再起動のためのソリューションの束: forever 、 monit 、 Supervisord 、 daemontools 。
gitによるサービスの更新
ここで説明