Magento 2の導入プロセス


8

現在composer.lock、リポジトリにコミットしてからcomposer install --no-dev、本番サーバーで実行します。composerがすべてのファイルを生成するのに数分かかり、危険を伴うため、これが最良の方法だとは思いません。

本番モードで実行するために必要なすべてのファイルをリポジトリにコミットする方が良いのではないでしょうか。

他の人はどのようにしてmagento 2で展開プロセスを管理しますか?


なぜ危険なのですか?インストール/セットアップごとに1回だけ実行する必要があり、Composerがキャッシュしたパッケージをダウンロードすると、それが実行されます。
user3668514 2016

多分私は何かが足りないかもしれませんが、リポジトリにベンダーフォルダがない場合、どのようにcomposer installして本番環境で実行せずに新しいモジュールをインストールしますか?letscodejavascript.com/v3/blog/2014/03/the_npm_debacle
Claudiu Creanga

ポイントは走ること composer installです。プロセスを自動化するためにgitフックを調べましたか?
user3668514 2016

@ user3668514本番環境でcomposerインストールを実行すると、npmで発生したように、一部のリモートパッケージがダウンしている場合はどうなりますか?
Claudiu Creanga

それはどのくらいの頻度で起こりますか?Magento2には、特に/ vendorを明示的に無視する.gitignoreが付属しています。これは新しい「Magentoの方法」
なので

回答:


5

ベンダーをコミットしないこと、および本番環境でcomposerインストールを実行しないことについて、claudiu-creangaと100%同意します。

これを処理する方法は、ライブフォルダーとリリース候補フォルダーを持つことです。git pullコマンドとcomposer install --no-devを実行するのはリリース候補フォルダーです。私たちのプロセスは次のように要約できます:

  1. リリース候補フォルダー:

    • 予期しない変更を確認する
    • リポジトリを更新
    • Composerのインストール
  2. ファイルをライブサイトフォルダーに同期

  3. ライブサイトフォルダー:
    • 静的ファイルをデプロイする
    • メンテナンスモードを有効にする
    • モジュールを有効にする
    • セットアップスクリプトを実行する
    • コンパイルDI
    • キャッシュの消去
    • メンテナンスモードを無効にする
    • 権限を更新する

私は実際のコマンドとこれの背後にある理由を提供するより長いブログ記事を書きました:https : //www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/

更新:ライブデータベースをステージングデータベースにコピーし、これを使用してセットアップスクリプトを実行し、静的ファイルを展開し、DIをすべてオフラインでコンパイルします。これは、pub / staticファイルとvarを含めてライブにデプロイできます。セットアップスクリプトが実行されている場合は、サイトを一時的に停止しますが、それ以外の場合はサイトをそのままにしておきます。詳細については、https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/をご覧ください。

更新:ベンダーフォルダーのコミットについて私の考えを変更しました-フォルダーをコミットすることで、これらのファイルの変更履歴を追跡する機能が得られ、誤って何かを変更したかどうかを確認できます。最も重要なのは、composerを実行する必要がないことです。展開時。リポジトリの外部サプライヤーに依存している今、後者は非常に重要です。それらの1つが利用できない場合はどうなりますか?突然展開できなくなります。欠点は、リポジトリが大きくなり、コアハックを行うリスクがあり、私のような開発者がひどく嫌いになることです:)


app / etc / config.phpのコミットも開始しました。これはデフォルトでMagento 2の.gitignoreによって無視されますが、このコミットを有効化および無効化することは開発中に行われ、その決定はコミットされ、CIを介して伝達およびテストできます。
Robert Egginton、2016年

あなたは真剣にあなたのウェブサイトをオフラインにしますか?それは私たちの選択肢ではありません。私たちの会社は実際にお金を稼いでいます
TheBlackBenzKid

現在のところ、ユーザーが部分的に稼働しているサイトが表示されないことが100%確実ではないため、サイトを一時的にオフラインにしています。M1の経験が豊富なため、サイトを停止することなくどのような変更を有効にできるかを高い確信度で知っています。M2ではまだそうではありません。
Robert Egginton 2016

賛成票。ただし、@ TheBlackBenzKidのように、特にDIコンパイルには少し時間がかかるため、ウェブサイトをオフラインにしないものが見たいです。DIコンパイルが実際に行うことを理解することが重要だと思います。そのステップをリリース候補フォルダーで実行できればすばらしいと思います。この@Robertを投稿してからしばらくの間、何か進展はありますか?
Erfan

1
興味深い編集@RobertEgginton-私は現在これを調査していて、あなたの投稿とディスカッションをフォローしています。デプロイ時のcomposerの使用とサードパーティのリポジトリの潜在的な利用不可能性についての予約を共有しますが、これはパッケージのリポジトリではそれほど問題ではないと思います。./vendorのコミットも理想的とは言えませんが、少なくともサードパーティのリポジトリとは別に展開できる完全なリリースを提供します。Capistrano Magento2拡張機能を試しましたか?これはcomposerインストールを使用しますが、私はキャップワークフローが好きですgithub.com/davidalger/capistrano-magento2
BlueC

3

これまでのところ、ベンダーフォルダーもコミットしています。もちろん、これにより、リポジトリにたくさんのファイルが追加されます。(ベンダーコンポーザーファイル内の.gitフォルダーは必ず削除してください。そうしないと、フォルダーの内容がコミットされません。たとえば、firegentoなど)。しかし、vendorフォルダーのシンボリックリンクは機能せず、vendor_path.phpファイルのパスを編集することも機能せず、これまでのところ、より良い解決策を探す時間がありませんでした。

ビルドサーバーがなく、サーバーでcomposerを実行していません。すべての更新をローカルで実行してテストし、コミットします。これにより、デプロイメントスクリプトがトリガーされます。

配備スクリプトはenv.phpファイルを置き換え、いくつかのカスタム処理を実行してから、ライブリンクを新しいフォルダーに切り替える前にトリガーsetup:upgradesetup:static-content:deployます。

シンボリックリンクする唯一のフォルダはpub / mediaです。


入力いただきありがとうございます。env.phpを変更する以外に、どのような変更を加えたいですか?
Claudiu Creanga

それはすべてあなたのサーバーとプロジェクトの設定に依存していると思います。dev&stagingブランチの場合、.htaccessを削除し、独自の.htaccess&htpasswordファイルをディレクトリにコピーします。cliコマンドを実行する前の予防策として、bin / magentoが実行可能であることを確認します。 magentoファイルの所有者(展開ユーザーはroot)として実行し、メディアフォルダーをpubフォルダーにシンボリックリンクします。もちろん、以前よりもデプロイするときに好きなことを追加することもできます。
tecjam 2016

/ vendorでファイルをコミットすることは、コンポーネントマネージャの目的に反するため、通常はお勧めしません。composerのドキュメントを参照してください。
user3668514 2016

それだけは明らかです。では、どのように展開を管理しますか?
tecjam 2016

1
@ user3668514の注意-composerのインストールを意味すると思います。コンポーネントをインストールするのではなく、誤って更新を実行し、実際にコンポーネントを変更するのは簡単です。
Robert Egginton 2016年

2

最後にdeploybothttp://deploybot.com/)のようなサービスをオプトアウトしました。capistrano無料で使用できます。Deploybotは、composerのインストールの実行中にDockerコンテナーを作成し、コマンドが成功した場合はコードをデプロイします。それ以外の場合は何もデプロイしないため、運用環境は安全です。

私はこれが最良のアプローチであると考えています:

1)gitリポジトリにベンダーフォルダーを置くことは、正当な理由により、作曲家たちにはお勧めできません。

The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to .gitignore/svn:ignore/etc.

詳細:https : //getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

2)composer install in productionセーフティネットなしでの実行は危険です。パッケージがダウンしている可能性があります(npmを参照)。メモリの問題が発生したり、composerがファイルを生成しているときにエラーが発生したり、壊れた本番環境に対処したりする必要があります。


1

私もこれを調べています、これまでに取ったアプローチは次のとおりです:

サーバーのブートストラップ:

  1. セットアッププロジェクトcomposer --create-project ... --no-devsrcフォルダ(私はまだ通じてくるのdevの嫌なものの多くを見るが)
  2. アプリのセットアップ、静的ファイルのコンパイル、dbのアップグレードなど。
  3. すべての正しい権限を設定する

私のsrcディレクトリからストック、実行中のストアを取得します(ただし、私のwebrootはそこを指していません)

次に、私の展開プロセス:

  1. 新しいリリースフォルダを作成する
  2. srcファイルを私のリリースにrsyncします(cruftを除く)
  3. カスタマイズを展開して展開します(少数のテーマファイルとモジュール)
  4. magento connectを介してサードパーティのmagentoモジュールをインストールします
  5. 私のホストのウェブルートが私の新しいリリースを指すようにします(シンボリックリンク付き)
  6. ウェブサーバーを適切に再読み込みします

これにより、Magentoコアコードを自分のものとは別に維持し、composerを使用して最新の状態に保つことができます。39,102を出荷する必要はありません!!! 各デプロイのファイル、またはデプロイ時にcomposerコマンドを実行します。

...他のアプローチやこれに関するベストプラクティスを聞きたがっています。また、idは、実際にどのファイルが本番環境に必要で、どのファイルが開発に必要かを知るのが大好きなので、ウェブルートをクリーンに保つことができます。

完了したら、ansibleプレイブックと、構成と展開を調整するためのいくつかのFabricコマンドがあります。

それが役に立てば幸い


プレイブックとスクリプトをぜひご覧ください。
JMベッカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.