この記事では、実際に機能するnode.jsサービスでVPSを取得するために解決しなければならない問題を説明します。 これらはすべて基本的なものですが、他の誰かが役に立つかもしれません。
ノードのインストール
問題:リポジトリには、必要なバージョンのノードのパッケージがない場合があります。 または、異なるバージョンのノードを必要とする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
- 同じスーパーユーザー権限で開始しますが、ソケットに接続した直後に、プロセスはプログラムで特権を下げます。 詳細はこちら 。
負荷分散
問題:ノードはシングルスレッドであり、マルチコアプロセッサを効率的に使用できません。
ソリューション:
ノードを直接使用するか、Nginxを使用しますか?
この問題は多くの場所で
議論されて
いますが、コンセンサスはありません。 一方、nginxは長年にわたって信頼性が高く、実績のあるソリューションです。 一方、ノード自体も同じことができます。
原則として、これらのオプションの1つが提供されます。
- ノードは、静的ファイルの配布まですべてを処理します。
- ノードはhaproxyの略です。
- ノードはNginxの背後にあり、ページ生成にのみ使用されます。他のすべて(静的分散、バランシング、httpsの作業)はNginxによって行われます
落ちたプロセスの再起動
問題:サーバーが突然クラッシュした場合にサーバーを再開する方法
ソリューション:
gitによるサービスの更新
ここで説明