Angular、PHP API、Ansibleプロジェクトに継続的デプロイメントを実装する方法は?


7

APIポイントとしてYii2(PHP / MySQL)を使用したAngular2プロジェクトに取り組んでいます。Angularアプリを顧客ごとに異なる言語でデプロイする必要があります(angular-cliからのAOTコンパイルを使用)。

これを達成するための最良の方法は何ですか?私はこの作業を行うためにDockerまたはAnsible(-container)を探しています。ただし、この例は主に1:1セットアップの場合です。しかし、次のような1:nが必要です。

deploy app-de new_costomer prod_server

さらに、アプリの新しいバージョンが利用可能になったときに、ネットワーク全体を新しいアプリで更新したい(Arcでコンパイルされたsrc /フォルダーのアップロード、およびYii2側のdb移行スクリプトが必要)。

理想的には、次のようになります。

deploy update network-all prod_server

何か案は?

明確にするために:私には多数の顧客がいますが、各顧客は独自のコンテナ(Docker、Ansibleコンテナを介して)を取得する必要があります。AOTでコンパイルされたAngularのもの(JSのみ)とMySQLを備えたPHPバックエンドがあります。

各顧客はサーバーでこの設定を取得します(つまり、3人の顧客= Angular + PHP + MySQLを備えた3つのdockerコンテナー)。

AngularとPHPの両方に非常に頻繁に更新をプッシュします(つまり、DISTフォルダー全体をアップロードするか、少なくともdiff、PHP / MySQLバックエンドの移行スクリプトを実行する必要があるなど)。

そして、これは1つのコマンドからです(SSHで各コンテナに半手動で実行したくないためです)。

これまでこのような設定を行ったことがないので、Ansible(など)を使用してこれをどのように実現できるかについて考えたいと思います。


あなたが何を求めているのかははっきりしていません。あなたの一般的な問題は国際化です。これは通常、配備の問題ではなく、アプリケーションの設計の問題です。異なる言語を個別のコンテナーとしてデプロイすることもできます、それが最も単純または最も効率的なソリューションになるかどうかはわかりません。
Dave Swersky 2017年

2
別のサイトからのコピー貼り付けされた質問のように見えます。SEリンクと質問の周りのアイコンが含まれています。書式を修正し、この質問を明確にして理解し、回答してください。
エフゲニー

1
こんにちは、@ Evgeny、そうです。Stackexchangeに関する私の投稿からコピーされました。誰かがこれにコメントし、ここに引き継ぐように私に言いました。したがって重複。上記の問題を更新しました。
axtho 2017

@axtho Cross-postingは一般的にお勧めしません —両方ではなく、このサイトまたはStack Overflowに投稿する必要があります。おそらくそれがあなたの質問があまりよく受け取られていない理由です。
Aurora0001 2017

editを使用する場合は、何が追加されたかを確認できるリビジョンを見て「edit」を指定しないでください。レビューキューでは、変更が強調表示されます。再開への投票
Tensibai

回答:


7

次のシナリオがあるとします。お客様は多数いますが、一部の構成変更を除いて、ほとんどがまったく同じアプリを使用しています。あなたはあなたの顧客のそれぞれにできるだけ早くアプリの最新版を手に入れたいと思っています。

これがシナリオの場合は、アプリ間で区別する必要があるすべてのものを構成変更にしてみてください。与えられた構成に基づいて顧客のいずれかを処理できる1つ(または1つのセット)のDockerコンテナーを構築します。次に、展開時に、各顧客に対してこのコンテナの適切な構成を提供するだけです。

このアプローチの利点は、新しい顧客が来たときに大きなオーバーヘッドが発生しないことです。それらの構成を生成し、新しいサーバーを作成し、インベントリファイルにいくつかのエントリを追加します。次にデプロイするときに、そこにも取得されます。CDパイプラインが適切に設定されているほど、このプロセスを自動化できます。

したがって、フローは一般的に次のようになります。

  1. すべての顧客に対応できるアプリケーションコードベースがある
  2. アプリケーション用のDockerコンテナーを構築します(フロントエンド用、バックエンド用の1つ、場合によってはさらにサポートするもの)
  3. 構成ファイルを使用して、どこに何を展開するかを決定する展開スクリプトがあります。
  4. この展開スクリプトを実行します。それはあなたのすべての顧客に行き渡り、適切な設定であなたのアプリの最新バージョンを単に配備します。

新しい顧客がいる場合、変更する必要があるのはデプロイメント構成ファイルだけです。おそらくansibleを使用している場合は、インベントリとvarsファイルを変更する必要があります。アプリをスペイン語ロケールで実行して、ベータ機能にアクセスできる新しい顧客を獲得したとします。この顧客の構成は、おそらく次のようになります。

config.js:

SETTINGS = { locale: 'es', beta: true };

config.php:

define('CUSTOMER_LOCALE','es');
define('CUSTOMER_BETA','true');

次に、デプロイメント時にコンテナーがこれらのファイルを起動時にマウントするようにします。


ありがとう。それは、主に、私が必要とするものであり、良い出発点です。好奇心から:なぜ1人の顧客に多くのDockerイメージを提案するのですか?
axtho 2017年

@axthoは必須ではありませんが、通常、各懸念事項(フロントエンド、バックエンド、データベースなど)を個別のコンテナーに分離して、個別にデプロイおよびスケーリングできるようにすることをお
勧め
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.