2017-07-08 9 views
1

私は自分のプロジェクトにdockerをmy dev envとして使用しています。create-react-app + docker = QAとPROD Deploy

ここでは、私のプロジェクトをAWSに配備するベストプラクティス(私はドッカーを配備します)を知りたいと思います。

多分私の質問はダミーですが、私は本当にそれに固執しています。

私のドッカーファイルにはコマンドヤーンが始まっています... devのためには何もビルドする必要はありません。バンドルはメモリで実行されますが、QAやPRODではnpmを使ってビルドします。しかし私が知っているように、それはprod envで使用されるべきファイルを含む新しいフォルダを作成します。

私の質問は次のようなことです:このような状況のためのベストプラクティスは何ですか?

ありがとうございました。

答えて

2

これは私がやったことです:

  1. は、すべての静的ファイルを構築するためにnpm run buildを使用してください。
  2. _/nginxイメージを使用して、これらの静的ファイルを処理するHTTPサーバーをカスタマイズします。 (Dockerfile)
  3. Amazon EC2コンテナサービス(ECS)にカスタマイズしたイメージをアップロードします。
  4. イメージをECSタスクに読み込みます。次に、ELBv2を使用してロードバランスサーバを起動し、すべての外部要求をECSに転送します。
  5. (オプション)ELBv2でHTTPSを有効にします。

ワンタイムの事:ECSのメカニズムうち

  1. 図。 ECS用に少なくとも1つのホストサーバーを作成する必要があります。私はAmazon ECS-Optimized AMIを使用しました。
  2. カスタマイズしたDockerイメージをアップロードできるように、ECS上にDockerリポジトリを作成します。
  3. サービスのECSタスク定義を作成します。
  4. ECSクラスタを作成してタスクを追加します。
  5. 内部ECSダイナミックポートにトラフィックを転送できるようにELBv2を設定します。
  6. (オプション)毎日の展開を自動化するスクリプトを作成します。

誰かが私に彼女/彼のためにそれらのことをしたいと思うなら、私は支払われるでしょう。あるいは、あなたはそれらの手がかりに従って自分でそれを理解することができます。

ただし、あなたのウェブサイトが単純な静的サイトである場合は、Github pagesを使用することをおすすめします。それは無料で簡単です。私の解決策は、他のサービス(例えば、Redis、ElasticSearch)と毎日/毎時の展開が必要な複数の静的+動的アプリケーション用です。

2

npm run buildを実行し、結果のファイルをコンテナにコピーする必要があります。別のDockerfile.buildを使用してファイルを構築し、ファイルを抽出して最終コンテナに追加することができます。最終的なコンテナがファイルを提供できるはずです。あなたはそれをnginxや他のサーバー上に置くことができます。 data volume container in your existing server containerとして使用することもできます。

Dockerの最近のバージョンでは、この2つのDockerファイルを組み合わせることで、このプロセスが簡単になりました。ビルドコンテナを持つことができ、最後のコンテナを両方とも同じファイルに定義することができます。

は、ここでご利用の場合の簡単な例です:

FROM node:onbuild AS builder 
RUN npm run build 

FROM nginx:latest 
COPY --from=builder /usr/src/app/build /usr/share/nginx/html 

あなたはおそらく、あなた自身のnginxの設定ファイルを含めるようにしたいと思います。多段に

もっとここで構築します。

https://docs.docker.com/engine/userguide/eng-image/multistage-build/

+0

素晴らしい..私は..おかげでたくさんのことを試してみましょう。 – Carlos

関連する問題