デプロイメントのベストプラクティス

ビルドおよびデプロイスクリプトは、コードをリモート環境に結合する際にアクティベートされます。 これらのスクリプトは、環境 設定ファイルとアプリケーションコードを使用して、クラウドインフラストラクチャに適切なデータとサービスをプロビジョニングします。 また、これらのスクリプトは、クラウド環境でAdobe Commerce アプリケーション、サードパーティのサービスおよびカスタム拡張機能をインストールまたは更新するために使用されます。

ビルドとデプロイのプロセスは、計画ごとに少し異なります。

  • スタータープラン – 統合環境の場合、アクティブなすべてのブランチは、アクセスとテストのために完全な環境にビルドおよびデプロイされます。 staging 分岐に結合した後、コードを完全にテストします。 サイトを起動するには、stagingmaster にプッシュして、実稼動環境にデプロイします。 Cloud Console および CLI コマンドを使用して、すべてのブランチに対するフル アクセスが可能です。

  • Pro プラン:統合環境では、アクティブな各ブランチが構築され、アクセスとテスト用の完全な環境にデプロイされます。 ステージング環境と実稼動環境に結合する前に、コードを integration ブランチに結合します。 Cloud Console を使用するか、SSH および magento-cloud CLI コマンドを使用して、ステージング環境と実稼動環境に結合できます。

プロセスのトラッキング

ターミナルまたは Cloud Console Status メッセージ(in-progresspendingsuccessfailed)を使用して、ビルドおよびデプロイのアクションをリアルタイムで追跡できます。これらのメッセージは、デプロイメントプロセス中に表示されます。 ログファイルに詳細を表示できます。 ログを表示を参照してください。

外部 GitHub リポジトリを使用している場合、操作のログは GitHub セッションに表示されません。 ただし、外部リポジトリと Cloud Console のインターフェイスでアクティビティをフォローすることはできます。 統合を参照してください。

NOTE
統合環境では、Cloud Console ーバーからデプロイログを表示することはできません。 この機能は、実稼動環境とステージング環境でのみ使用できます。 ただし、 ビルドとデプロイログを使用して、任意の環境のデプロイメントの各フェーズのログを表示できます。 トラブルシューティング情報については、 デプロイメントエラーリファレンスを参照してください。

New Relicでデプロイメントを追跡を有効にして、デプロイメントイベントを監視し、デプロイメント間のパフォーマンスを分析できます。

ビルドとデプロイメントのベストプラクティス

デプロイメントプロセスに関する以下のベストプラクティスと考慮事項を確認します。

  • ece-tools パッケージの最新バージョンを実行していることを確認してください

    ECE ツールのリリースノートを参照してください。

  • ビルドおよびデプロイプロセスに従う

    環境間でコードを結合する際に設定が上書きされるのを避けるために、各環境に正しいコードが用意されていることを確認します。 例えば、設定の変更をすべての環境に適用するには、リモート統合環境にデプロイする前に、ローカル環境で変更を変更およびテストします。 次に、実稼動環境にデプロイする前に、ステージング環境で変更をデプロイしてテストします。 ある環境から別の環境に結合すると、環境固有の設定を除き、デプロイメントによって環境内のすべてのコードが上書きされます。

  • 環境全体で同じ変数を使用する

    これらの変数の値は、環境によって異なる場合があります。ただし、通常は各環境で同じ変数が必要です。 ストア設定の設定の管理を参照してください。

  • 環境固有の変数に機密性の高い設定値とデータを保持する

    これらの値には、Cloud CLI や Cloud Console を使用して指定された変数、または env.php ファイルに追加された変数が含まれます。 変数レベルを参照してください。

  • 環境ブランチですべてのコードが使用可能であることを確認します

    プライベートブランチなどの他のブランチからコードを参照すると、ビルドおよびデプロイプロセス中に問題が発生する可能性があります。 例えば、非公開ブランチからテーマを参照する場合、テーマにはアクセスできず、アプリケーションコードを使用してテーマを作成することもできません。

  • 反復されたブランチへの拡張機能、統合およびコードの追加

    変更をローカルで作成およびテストし、integration にプッシュしてから、stagingproduction にプッシュします。 更新を次の環境に結合する前に、各環境の問題をテストして解決します。 一部の拡張機能と統合は、依存関係により、特定の順序で有効にして設定する必要があります。 グループで追加とテストを行うと、ビルドとデプロイのプロセスがはるかに容易になり、問題が発生する場所を判断するのに役立ちます。

  • サービスのバージョンと関係、および接続機能の確認

    アプリケーションで使用可能なサービスを確認し、最新の互換性のあるバージョンを使用していることを確認します。 インストールガイドサービスの関係および 必要システム構成 を参照してください。

  • ステージング環境および実稼動環境にデプロイする前に、ローカルおよび統合環境でテストする

    ステージング環境および実稼動環境にデプロイする際にダウンタイムが長くならないように、ローカル環境と統合環境の問題を特定し修正します。

    note tip
    TIP
    クラウドプロジェクト設定が、静的コンテンツのデプロイメント(SCD)戦略を含む、ビルドおよびデプロイメント設定のベストプラクティスに従っていることを検証するために使用できる スマートウィザードコマンドがあります。
  • ローカル環境と統合環境でのテストが完了したら、ステージング環境でデプロイしてテストします

    ステージングと実稼動のテストを参照してください。

  • 実稼動環境の設定の確認

    実稼動環境にデプロイする前に、次のタスクを実行します。

    • SSH を使用して、実稼動環境の 3 つのノードすべてに接続できることを確認します。

    • インデクサーが スケジュールに従って更新 に設定されていることを確認します。 拡張機能開発者ガイド 🔗 の インデックスモード を参照してください。

    • 実稼動コードで環境固有の変数を更新し、サービスの可用性と互換性を確認し、その他の必要な設定変更を行って、環境を準備します。

  • デプロイプロセスの監視

    デプロイメントステータスメッセージを確認し、必要に応じて問題を軽減します。 詳細なログメッセージについては、クラウドの logs を確認してください。

統合のビルドとデプロイメントの 5 つのフェーズ

統合環境およびローカル開発環境では、次のフェーズが行われます。 Pro プランの場合、これらの初期フェーズでは、コードはステージング環境または実稼動環境にデプロイされません。

フェーズ 1:コードと設定の検証

プロジェクトを最初に設定するときは、 クラウドインフラストラクチャテンプレートがコードファイルの基礎となります。 このコードリポジトリは、master ブランチとしてプロジェクトに複製されます。

  • スターターの場合 -master のブランチは実稼動環境です。
  • Pro の場合:master は統合環境のオリジンブランチとして開始されます。

カスタムコード、拡張機能およびモジュール、サードパーティの統合用に、master からブランチを作成します。 クラウド内のコードをテストするためのリモート統合環境があります。

コードをローカルワークスペースからリモートリポジトリにプッシュすると、ビルドスクリプトとデプロイスクリプトの開始前に、一連のチェックとコード検証が完了します。 組み込みの Git サーバーが、プッシュ内容の検証と変更を行います。 例えば、OpenSearch サービスを追加すると、組み込みの Git サーバーによって、クラスターのトポロジが適切に変更されたかどうかが確認されます。

設定ファイルに構文エラーがある場合、Git サーバーはプッシュを拒否します。 保護ブロックを参照してください。

このフェーズでは、composer install も実行して依存関係を取得します。

フェーズ 2:構築

NOTE
ビルドフェーズでは、サイトはメンテナンスモードではなく、エラーや問題が発生しても停止しません。 前のビルド以降に変更されたコードのみをビルドします。

このフェーズでは、コードベースを構築し、.magento.app.yamlbuild セクションでフックを実行します。 デフォルトのビルドフックは php ./vendor/bin/ece-tools のコマンドで、次の操作を実行します。

  • vendor/magento/ece-patches でパッチを適用し、m2-hotfixes でオプションでプロジェクト固有のパッチを適用します
  • bin/magento setup:di:compile を使用して、コードおよび 依存関係の挿入設定(generated/codegenerated/metapackage を含む generated/ ディレクトリ)を再生成します。
  • コードベースに app/etc/config.php ファイルが存在するかどうかを確認します。 Adobe Commerceは、ビルドフェーズでこのファイルが検出されず、モジュールと拡張機能のリストが含まれている場合、このファイルを自動生成します。 存在する場合、ビルドフェーズは通常どおり続行され、静的ファイルは GZIP で圧縮されてデプロイされるので、デプロイメントフェーズでのダウンタイムが短縮されます。 ファイル圧縮のカスタマイズまたは無効化については、 ビルドオプションを参照してください。
WARNING
この時点では、クラスタは作成されていないので、データベースに接続しようとしたり、アクティブなデーモンプロセスがあると仮定したりしないでください。

アプリケーションのビルド後、アプリケーションは 読み取り専用のファイルシステム にマウントされます。 読み取り/書き込み可能にする特定のマウントポイントを設定できます。 サーバーに FTP で接続したり、モジュールを追加したりすることはできません。 代わりに、ローカルリポジトリにコードを追加して、環境のビルドとデプロイを行う git push を実行する必要があります。 プロジェクト構造については、 ローカルプロジェクトディレクトリ構造を参照してください。

フェーズ 3:スラグを準備する

ビルドフェーズの結果、slug と呼ばれる読み取り専用のファイルシステムが生成されます。 このフェーズでは、アーカイブが作成され、スラグが永続的なストレージに配置されます。 次回コードをプッシュするときに、サービスが変更されなかった場合は、アーカイブのスラグが使用されます。

  • 変更されていないコードを再利用することで、継続的な統合ビルドを迅速に実行
  • コードが変更された場合、再利用するために次のビルド用にスラグを更新します
  • 必要に応じて、デプロイメントを即座に元に戻すことができます。
  • コードベースに app/etc/config.php ファイルが存在する場合、静的ファイルを含める

スラグには、magento.app.yaml で設定されたすべてのファイルとフォルダー 以下を除く マウントが含まれます。

  • "var": "shared:files/var"
  • "app/etc": "shared:files/etc"
  • "pub/media": "shared:files/media"
  • "pub/static": "shared:files/static"

フェーズ 4:スラグとクラスターのデプロイ

アプリケーションとすべての バックエンドサービスは、次のようにプロビジョニングされます。

  • Web サーバー、OpenSearch、RabbitMQ などのコンテナ内の各サービスをマウントします
  • 読み取り/書き込み可能なファイル・システムをマウントする(高可用性の分散ストレージ・グリッドにマウント)
  • サービスが相互に(そして互いに対してのみ)見ることができるようにネットワークを設定します。
NOTE
すべてのビルドおよびデプロイメントが完了したら、Git ブランチで変更を行い、再度プッシュします。 すべての環境ファイル・システムは 読み取り専用 です。 読み取り専用システムは、ファイルシステムに書き込みを行うプロセスがないため、決定的なデプロイメントを保証し、サイトのセキュリティを大幅に向上させます。 また、統合、ステージング、実稼動環境でもコードが同じであることを確認します。

フェーズ 5:デプロイメントフック

NOTE
このフェーズでは、デプロイメントが完了するまで、Commerce アプリケーションをメンテナンスモードにします。

最後の手順では、デプロイメントスクリプトを実行します。このスクリプトを使用して、開発環境のデータの匿名化、キャッシュのクリア、外部の継続的統合ツールのクエリを行うことができます。 このスクリプトを実行すると、Redis などの環境内のすべてのサービスにアクセスできます。

app/etc/config.php ファイルがコードベースに存在しない場合、静的ファイルは gzip を使用して圧縮され、このフェーズでデプロイされます。これにより、デプロイフェーズとサイトメンテナンスの長さが長くなります。

NOTE
ファイル圧縮のカスタマイズまたは無効化については、 変数のデプロイを参照してください。

デプロイフックは 2 つあります。 pre-deploy.php フックは、ビルドフックで生成されたリソースとコードの必要なクリーンアップと取得を完了します。 php ./vendor/bin/ece-tools deploy フックは、一連のコマンドとスクリプトを実行します。

  • Adobe Commerceが インストールされていない 場合は、bin/magento setup:install と共にインストールされ、デプロイメント設定、app/etc/env.php および指定した環境用のデータベース(Redis や Web サイト URL など)が更新されます。 重要: セットアップ中に 初回のデプロイメントを完了すると、Adobe Commerceがインストールされ、すべての環境にデプロイされました。

  • Adobe Commerce インストール済み の場合は、必要なアップグレードを実行します。 デプロイメントスクリプトは、bin/magento setup:upgrade を実行してデータベーススキーマとデータを更新します(これは、拡張機能またはコアコードの更新後に必要です)。また、デプロイメント設定、app/etc/env.php、お使いの環境のデータベースも更新します。 最後に、デプロイメントスクリプトによって Adobe Commerceのキャッシュがクリアされます。

  • スクリプトはオプションで、コマンド magento setup:static-content:deploy を使用して静的 web コンテンツを生成します。

  • 静的コンテンツ -s プロイメント戦略で、デフォルト設定が quick のスコープ(ビルドスクリプトのフラグ)を使用します。 環境変数 SCD_STRATEGY を使用して、戦略をカスタマイズできます。 これらのオプションと機能について詳しくは、 静的ファイルのデプロイメント戦略および 静的表示ファイルのデプロイ-s フラグを参照してください。

NOTE
デプロイスクリプトは、.magento ディレクトリの設定ファイルで定義された値を使用してから、ディレクトリとその内容を削除します。 ローカル開発環境は影響を受けません。

Postのデプロイメント:ルーティングの設定

デプロイメントの実行中、プロセスはエントリポイントでの受信トラフィックを 60 秒間停止し、新しく作成したクラスターに web トラフィックが到達するようにルーティングを再設定します。

デプロイメントが成功すると、メンテナンスモードが削除され、通常のアクセスが可能になり、app/etc/env.phpapp/etc/config.php の設定ファイルのバックアップ(BAK)ファイルが作成されます。

SCD_ON_DEMAND 変数を使用して静的コンテンツ生成を有効にし、post_deploy フックを設定します。これによりキャッシュがクリアされ、コンテナが接続の受け入れを開始し、送信中 通常の受信トラフィックがキャッシュに事前に読み込まれ ウォーム します。

ビルドおよびデプロイのログを確認するには、 ログの表示を参照してください。

recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26