React + Webpack/Babel + Node/Expressアプリケーションがあり、AWSにデプロイしたい。
ReactとNode/Expressを個別にデプロイする必要がありますか?または、同時に一緒にデプロイできますか?
- 例えば。 React シングルページアプリ およびNode/Express API。
frontend(Reactアプリ) S3 および CloudFront ( チュートリアル )
別のオプションは、 Elastic Beanstalk または EC2 で両方の部分を一度にデプロイすることです。ただし、S3およびCloudFrontでのホスティングのメリット、つまりユーザーへの配信の高速化および安いコスト。私の意見では、Webアプリケーションのクライアント側とサーバー側を別々に更新してデプロイする方が、より便利で、予期しないエラーが発生しにくいと思います。
個別にデプロイする別の利点:フロントエンドとバックエンドで異なるチームを持つ組織の場合、各チームが自分のアプリケーションの側を自分でデプロイするのが簡単です他のチームに依存することなく。
4xx
エラーのリダイレクト(アプリでHTML5 History
ベースのルーターを使用する場合に必要)http2
およびhttp to https
リダイレクトさまざまなサブドメインを使用できます。
api.domain.com
Node/Express APIの場合app.domain.com
Reactアプリ用次に、APIで CORSを有効にします :
app.get('/api', cors({ Origin: 'https://app.domain.com' }), ...)
- 例えば。 Nodeビューを含むReactアプリ。
アプリケーション全体を Elastic Beanstalk または EC2 にデプロイする必要があります。
注:2つのサブプロジェクト(Reactアプリ用のフォルダーとNode API用の別のフォルダー)を含む単一のプロジェクトがあり、両方のサブプロジェクトが引き続き機能する場合それらが分離されたら、サブプロジェクトを個別にデプロイできます(回答の最初の部分を参照)。
Reactパーツをデプロイする前に、 Webpack build を実行します。手動(AWSにデプロイする前)または自動( [〜#〜] ci [〜#〜] / [〜#〜] cd [〜#〜] システム)。
aws s3
コマンドを使用してS3バケットとオブジェクトを管理します。eb
コマンドを使用してバックエンドを管理およびデプロイします。関連する質問に答えました AWSに限定されません。
手間をかけずにアプリを展開するには、3つの概念(マイクロサービス、コンテナー、プロセスマネージャー)について学ぶ必要があります。それらについてもう少し詳しく説明し、いくつかのリンクで説明します。
マイクロサービスは、アプリをより小さなサービスに分割できるアーキテクチャです。これには複数の利点があります:1-サービスは簡単にテストできます。 2-サービスは交換可能です。 3-サービスは個別に拡張できます。
ほとんどすべての便利なアプリには、少なくとも数十の依存関係があります。ターゲットマシンに依存関係をインストールできますが、ほとんど確実にいくつかの課題に直面します。 Dockerなどのプログラムを使用すると、アプリのコンテナーを作成し、そのコンテナーをクラウドに展開できます。 (クラウドプロバイダーに関係なく) 詳細...
プロセスマネージャーは、アプリがスムーズに実行され、すべての部分が正常であることを確認します。アプリがクラッシュした場合、アプリを簡単に再起動できます。
注:この方法は、ReactJSでサーバーレンダリングを実行している場合は機能しません。次のオプションに進みます。
アプリをビルドして、静的なS3 Webサイトに展開するだけです。このオプションは、マイクロサービスアーキテクチャを使用してAPIを反応アプリから分離する場合に機能します。
S3で静的Webサイトを作成するのは本当に簡単です。
詳細については、AWS handy documentation を確認してください。
マイクロサービスごとに異なるEC2インスタンスを起動できます。 (API、React appなど)) PM2 などのプロセスマネージャーを使用して、アプリがスムーズに実行されるようにする必要があります。
自動展開を作成するには、 Terraform と Ansible を組み合わせて使用することを好みます。 Terraformは非常に宣言的です。クラウドインフラストラクチャがどのように見えるかを説明し、Terraformがそれを構築します。
一方、Ansibleは非常に手続き型であり、新しいサーバーのプロビジョニングに最適です。
理想的には、バグのあるコードが本番環境に出荷されるのを防ぐために、単体テストが必要です。 (浅いレンダリングには Jest と supertest 、 Enzyme を使用します)。しかし、世界は不完全であり、クライアントで発生する可能性のあるバグを受け取るのは良いことです。 Enter Sentry