PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

たず、ちょっずした理論です。 どうしたの Twelve-Factor アプリ?

簡単に蚀えば、このドキュメントは SaaS アプリケヌションの開発を簡玠化するこずを目的ずしお蚭蚈されおおり、最新のアプリケヌションの開発で最も頻繁に遭遇する問題ず実践方法に぀いお開発者ず DevOps ゚ンゞニアに知らせるこずに圹立ちたす。

このドキュメントは Heroku プラットフォヌムの開発者によっお䜜成されたした。

Twelve-Factor アプリは、任意のプログラミング蚀語で蚘述され、バッキング サヌビス (デヌタベヌス、メッセヌゞ キュヌ、キャッシュなど) を任意に組み合わせお䜿甚​​するアプリケヌションに適甚できたす。

この方法論の基瀎ずなる芁玠に぀いお簡単に説明したす。

  1. コヌドベヌス – バヌゞョン管理で远跡される XNUMX ぀のコヌドベヌス – 耇数のデプロむメント
  2. 䟝存関係 – 䟝存関係を明瀺的に宣蚀しお分離する
  3. 蚭定 – 実行時に構成を保存する
  4. 支揎サヌビス – プラグむン リ゜ヌスずしおのバッキング サヌビスを怜蚎する
  5. ビルド、リリヌス、実行 – 組み立お段階ず実行段階を厳密に分離する
  6. ПрПцессы – アプリケヌションを XNUMX ぀以䞊のステヌトレス プロセスずしお実行する
  7. ポヌトバむンディング – ポヌト バむンディング経由でサヌビスを゚クスポヌトする
  8. 䞊列凊理 – プロセスを䜿甚しおアプリケヌションをスケヌルする
  9. 䜿い捚お性 – 高速起動ずクリヌンなシャットダりンにより信頌性を最倧化
  10. アプリケヌション開発/運甚の同等性 – 開発環境、ステヌゞング環境、実皌働環境を可胜な限り類䌌した状態に保ちたす
  11. ロギング – ログをむベントのストリヌムずしお衚瀺する
  12. 管理タスク – アドホックプロセスを䜿甚しお管理/管理タスクを実行する

12 の芁玠に぀いおの詳现は、次のリ゜ヌスから入手できたす。

ブルヌグリヌン展開ずは䜕ですか?

Blue-Green デプロむメントは、アプリケヌションを配信する方法です。 補造 ゚ンドクラむアントが自分偎の倉曎を認識しないような方法で。 ぀たり、れロでアプリケヌションをデプロむしたす。 ダりンタむム.

叀兞的な BG Deploy スキヌムは、以䞋の画像のようになりたす。

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

  • 開始時点では、たったく同じコヌド、アプリケヌション、プロゞェクトを持぀ 2 台の物理サヌバヌがあり、ルヌタヌ (バランサヌ) がありたす。
  • ルヌタヌは最初にすべおのリク゚ストをいずれかのサヌバヌ (グリヌン).
  • 再床リリヌスする必芁がある時点で、プロゞェクト党䜓が別のサヌバヌで曎新されたす (ブルヌ)、珟圚リク゚ストを凊理しおいたせん。
  • コヌドをオンにした埌 青 サヌバヌが完党に曎新されるず、ルヌタヌに切り替えるコマンドが䞎えられたす。 グリヌン Ма ブルヌ サヌバ。
  • これで、すべおのクラむアントにコヌドの実行結果が衚瀺されたす。 青 サヌバ。
  • しばらくの間、 グリヌン サヌバヌは、展開が倱敗した堎合のバックアップずしお機胜したす。 ブルヌ サヌバヌに接続し、障害やバグが発生した堎合、ルヌタヌはナヌザヌ フロヌを元のサヌバヌに切り替えたす。 グリヌン サヌバヌに叀い安定バヌゞョンがむンストヌルされ、新しいコヌドが改蚂ずテストのために送信されたす。
  • そしおプロセスの最埌に、同じ方法で曎新されたす グリヌン サヌバ。 曎新埌、ルヌタヌはリク゚スト フロヌを元の状態に切り替えたす。 グリヌン サヌバ。

どれもずおも良く芋えたすし、䞀芋するず䜕の問題もないはずです。
しかし、私たちは珟代䞖界に生きおいるため、叀兞的なスキヌムで瀺されおいるような物理的なスむッチングを䌎うオプションは私たちには適しおいたせん。 ずりあえず情報を蚘録しおおきたす。埌で確認したす。

悪いアドバむスず良いアドバむス

免責事項: 以䞋の䟋は、私が䜿甚するナヌティリティ/方法論を瀺しおいたす。同様の機胜を持぀代替手段をたったく䜿甚できたす。

ほずんどの䟋は、䜕らかの圢で Web 開発 (これは驚くべきこずです)、PHP および Docker ず関連しおいたす。

以䞋の段萜では、特定の䟋を䜿甚しお、因子の䜿甚法に぀いお簡単に実践的に説明したす。このトピックに関する理論をさらに詳しく知りたい堎合は、䞊のリンクから元の゜ヌスを参照しおください。

1. コヌドベヌス

FTP ず FileZilla を䜿甚しおファむルを䞀床に XNUMX ぀ず぀サヌバヌにアップロヌドしたす。実皌働サヌバヌ以倖の堎所にはコヌドを保存しないでください。

プロゞェクトには垞に単䞀のコヌド ベヌスが必芁です。぀たり、すべおのコヌドは XNUMX ぀のコヌド ベヌスから来おいたす。 Gitの リポゞトリ。 サヌバヌ (本番、ステヌゞング、test1、test2...) は、XNUMX ぀の共通リポゞトリのブランチからのコヌドを䜿甚したす。 このようにしお、コヌドの䞀貫性を実珟したす。

2. 䟝存関係

フォルダヌ内のすべおのラむブラリをプロゞェクトのルヌトに盎接ダりンロヌドしたす。 新しいコヌドを珟圚のバヌゞョンのラむブラリが含たれるフォルダヌに転送するだけで曎新できたす。 さらに 20 個のサヌビスが実行されおいるホスト サヌバヌに、必芁なナヌティリティをすべお盎接むンストヌルしたす。

プロゞェクトには、垞に明確に理解できる䟝存関係のリストが必芁です (䟝存関係ずは環境のこずも意味したす)。 すべおの䟝存関係を明瀺的に定矩し、分離する必芁がありたす。
䟋ずしお芋おみたしょう 䜜曲家 О デッカヌ.

䜜曲家 — PHP にラむブラリをむンストヌルできるようにするパッケヌゞ マネヌゞャヌ。 Composer では、バヌゞョンを厳密たたは倧たかに指定し、明瀺的に定矩するこずができたす。 サヌバヌ䞊には 20 の異なるプロゞェクトを存圚させるこずができ、各プロゞェクトには、互いに独立したパッケヌゞずラむブラリの個人甚リストがありたす。

デッカヌ — アプリケヌションが実行される環境を定矩および分離できるナヌティリティ。 したがっお、composer の堎合ず同様に、アプリケヌションが䜕で動䜜するかをより培底的に刀断できたす。 特定のバヌゞョンの PHP を遞択し、プロゞェクトが動䜜するために必芁なパッケヌゞのみをむンストヌルし、䜙分なものは远加したせん。 そしお最も重芁なこずは、ホスト マシンや他のプロゞェクトのパッケヌゞや環境に干枉しないこずです。 ぀たり、Docker を介しお実行されおいるサヌバヌ䞊のすべおのプロゞェクトは、あらゆるパッケヌゞのセットずたったく異なる環境を䜿甚できたす。

3. 構成

構成を定数ずしおコヌドに盎接保存したす。 テスト サヌバヌ甚に別の定数、実皌働甚に別の定数。 if else 構造を䜿甚しお、環境に応じたアプリケヌションの操䜜をプロゞェクトのビゞネス ロゞックに盎接結び付けたす。

蚭定 - これが、プロゞェクトのデプロむメントが異なる唯䞀の方法です。 理想的には、蚭定は環境倉数 (env var) を介しお枡される必芁がありたす。

぀たり、耇数の構成ファむル .config.prod .config.local を保存し、展開時にそれらの名前を .config (アプリケヌションがデヌタを読み取るメむンの構成) に倉曎したずしおも、これは正しいアプロヌチではありたせん。この堎合、構成からの情報はすべおのアプリケヌション開発者に公開され、運甚サヌバヌのデヌタが危険にさらされるこずになりたす。 すべおの構成はデプロむメント システム (CI/CD) に盎接保存し、デプロむメント時に特定の環境に必芁なさたざたな倀を䜿甚しおさたざたな環境甚に生成する必芁がありたす。

4. 第䞉者サヌビス

環境に厳密に関連付けられ、特定の環境では同じサヌビスに察しお異なる接続を䜿甚したす。

実は、この点は蚭定に関する点ず非垞に重なりたす。この点がなければ通垞の蚭定デヌタを䜜成するこずができず、䞀般に蚭定機胜がれロになっおしたいたす。

キュヌ サヌバヌ、デヌタベヌス、キャッシュ サヌビスなどの倖郚サヌビスぞのすべおの接続は、ロヌカル環境ずサヌドパヌティ/運甚環境の䞡方で同じである必芁がありたす。 ぀たり、接続文字列を倉曎するこずで、アプリケヌション コヌドを倉曎せずに、い぀でもベヌス #1 ぞの呌び出しをベヌス #2 に眮き換えるこずができたす。 あるいは、今埌の䟋ずしお、サヌビスをスケヌリングするずきに、远加のキャッシュ サヌバヌに察しお特別な方法で接続を指定する必芁がなくなりたす。

5. ビルド、リリヌス、実行

サヌバヌ䞊にはコヌドの最終バヌゞョンのみが存圚し、リリヌスをロヌルバックする可胜性はありたせん。 ディスク容量を埋める必芁はありたせん。 ゚ラヌがあっおもコヌドを本番環境にリリヌスできるず考える人は、悪いプログラマです。

導入のすべおの段階は互いに分離されおいる必芁がありたす。

ロヌルバックするチャンスがありたす。 クむック アクセスで保存されたアプリケヌションの叀いコピヌ (すでに組み立おられ、戊闘の準備ができおいる) を䜿甚しおリリヌスを䜜成したす。これにより、゚ラヌが発生した堎合に叀いバヌゞョンを埩元できたす。 ぀たり、条件付きでフォルダヌが存圚したす リリヌス ずフォルダヌ 珟圚、展開ずアセンブリが正垞に完了するず、フォルダヌが 珟圚 内郚にある新しいリリヌスぞのシンボリック リンクによっおリンクされおいたす リリヌス 埓来のリリヌス番号の名前が付けられおいたす。

ここで、Blue-Green デプロむメントを思い出したす。これにより、コヌド間の切り替えだけでなく、すべおのリ゜ヌス間や、すべおをロヌルバックできる環境間の切り替えも可胜になりたす。

6. プロセス

アプリケヌションの状態デヌタをアプリケヌション自䜓内に盎接保存したす。 アプリケヌション自䜓の RAM 内のセッションを䜿甚したす。 サヌドパヌティのサヌビス間で可胜な限り共有を䜿甚したす。 アプリケヌションが持぀こずができるプロセスは XNUMX ぀だけであり、スケヌリングはできないずいう事実に䟝存しおください。

セッションに関しおは、サヌドパヌティ サヌビス (memcached、redis) によっお制埡されるキャッシュにのみデヌタを保存したす。そのため、20 個のアプリケヌション プロセスが実行されおいる堎合でも、キャッシュにアクセスしたプロセスのいずれかがクラむアントずの䜜業を継続できたす。ナヌザヌが別のプロセスでアプリケヌションを操䜜しおいたずきず同じ状態です。 このアプロヌチでは、䜿甚するサヌドパヌティ サヌビスのコピヌが䜕個であっおも、すべおが正垞に動䜜し、デヌタぞのアクセスに問題がないこずがわかりたす。

7. ポヌトバむンディング

Web サヌバヌのみがサヌドパヌティのサヌビスず連携する方法を知っおいる必芁がありたす。 さらに良いのは、サヌドパヌティのサヌビスを Web サヌバヌ内に盎接むンストヌルするこずです。 たずえば、Apache の PHP モゞュヌルずしお。
すべおのサヌビスは、いく぀かのアドレスずポヌト (localgost:5432、localhost:3000、nginx:80、php-fpm:9000) ぞのアクセスを通じお盞互にアクセスできる必芁がありたす。぀たり、nginx から php-fpm ずpostgres、php-fpmからpostgres、nginxに移行し、実際には各サヌビスから別のサヌビスにアクセスできたす。 こうするこずで、サヌビスの実行可胜性が別のサヌビスの実行可胜性に結び぀かなくなりたす。

8. 平行床

XNUMX ぀のプロセスで動䜜したす。そうしないず、耇数のプロセスが盞互に連携できなくなりたす。

スケヌリングのための䜙地を残しおおきたす。 Docker swarm はこれに最適です。
Docker Swarm は、異なるマシン間および同じマシン䞊の倚数のコンテナの䞡方でコンテナのクラスタを䜜成および管理するためのツヌルです。

swarm を䜿甚するず、各プロセスに割り圓おるリ゜ヌスの数ず、起動する同じサヌビスのプロセスの数を決定できたす。内郚バランサヌは、特定のポヌトでデヌタを受信するず、そのデヌタを自動的にプロセスにプロキシしたす。 したがっお、サヌバヌの負荷が増加したこずを確認しお、プロセスを远加しお、特定のプロセスの負荷を軜枛できたす。

9. 䜿い捚お可胜性

プロセスやデヌタを操䜜するためにキュヌを䜿甚しないでください。 XNUMX ぀のプロセスを匷制終了するず、アプリケヌション党䜓に圱響が及ぶはずです。 XNUMX ぀のサヌビスがダりンするず、すべおがダりンしたす。

各プロセスずサヌビスはい぀でもオフにするこずができ、これが他のサヌビスに圱響を䞎えるこずはありたせん (もちろん、これは、そのサヌビスが別のサヌビスで䜿甚できなくなるずいう意味ではありたせんが、このサヌビスの埌に別のサヌビスがオフにならないずいう意味ではありたせん)。 すべおのプロセスは正垞に終了する必芁がありたす。そうするこずで、プロセスが終了しおもデヌタが損傷せず、次回電源を入れたずきにシステムが正垞に動䜜したす。 ぀たり、緊急終了が発生した堎合でも、デヌタが損傷するこずはありたせん (トランザクション メカニズムはここで適切であり、デヌタベヌス内のク゚リはグルヌプでのみ機胜し、グルヌプからの少なくずも XNUMX ぀のク゚リが倱敗するか、゚ラヌが発生した堎合、グルヌプからの他のク゚リは実際には最終的に倱敗したせん)。

10. アプリケヌション開発/運甚の同等性

アプリケヌションの実皌働バヌゞョン、ステヌゞング バヌゞョン、およびロヌカル バヌゞョンは異なる必芁がありたす。 実皌働環境では Yii Lite フレヌムワヌクを䜿甚し、ロヌカルでは Yii を䜿甚するため、実皌働環境ではより高速に動䜜したす。

実際には、すべおのデプロむメントずコヌドの操䜜はほが同䞀の環境にある必芁がありたす (物理ハヌドりェアに぀いお話しおいるのではありたせん)。 たた、開発埓業員は必芁に応じおコヌドを実皌働環境にデプロむできる必芁がありたす。特別な蚓緎を受けた DevOps 郚門ではなく、特別な力のおかげでアプリケヌションを実皌働環境に移行できる必芁がありたす。

Docker もこれに圹立ちたす。 䞊蚘のすべおの点が守られおいる堎合、docker を䜿甚するず、本番環境ずロヌカル マシンの䞡方に環境をデプロむするプロセスが XNUMX ぀たたは XNUMX ぀のコマンドを入力するだけになりたす。

11. ログ

ログをファむルずデヌタベヌスに曞き蟌みたす。 ファむルやデヌタベヌスをログから消去するこずはありたせん。 9000 ペタバむトのハヌドドラむブを賌入したしょう。それで問題ありたせん。

すべおのログはむベントのストリヌムずしお考慮される必芁がありたす。 アプリケヌション自䜓はログの凊理に関䞎すべきではありたせん。 ログの操䜜によっおアプリケヌションに問題が発生しないように、ログは stdout に出力されるか、udp などのプロトコル経由で送信される必芁がありたす。 これにはgraylogが適しおいたす。 Graylog は udp 経由ですべおのログを受信したす (このプロトコルでは、パケットの受信成功に関する応答を埅぀必芁がありたせん) がアプリケヌションに干枉するこずはなく、ログの構造化ず凊理のみを凊理したす。 アプリケヌション ロゞックは、このようなアプロヌチで動䜜するために倉曎されたせん。

12. 管理タスク

デヌタやデヌタベヌスなどを曎新するには、APIで別途䜜成した゚ンドポむントを䜿甚したす。これを2回連続で実行するず、すべおが耇補されたす。 しかし、あなたは愚かではありたせん。2 回クリックするこずはありたせん。移行する必芁はありたせん。

すべおの管理タスクは、リリヌス レベルですべおのコヌドず同じ環境で実行する必芁がありたす。 ぀たり、デヌタベヌスの構造を倉曎する必芁がある堎合、列の名前を倉曎したり、ビゞュアルなデヌタベヌス管理ツヌルを䜿甚しお新しい列を远加したりするこずは手動では行われたせん。 このようなものに察しおは、移行ずいう個別のスクリプトを䜜成したす。これは、どこでも、すべおの環境で同じ方法で実行され、共通でわかりやすい結果が埗られたす。 プロゞェクトにデヌタを入力するなど、他のすべおのタスクに぀いおも、同様の方法論を䜿甚する必芁がありたす。

PHP、Laravel、Laradock、Docker-Compose での実装䟋

PS すべおの䟋は MacOS で䜜成されたした。 それらのほずんどは Linux にも適しおいたす。 Windows ナヌザヌの皆様、申し蚳ありたせんが、私は長い間 Windows を䜿っお仕事をしおいたせんでした。

PC にどのバヌゞョンの PHP もむンストヌルされおおらず、䜕もむンストヌルされおいない状況を想像しおみたしょう。
最新バヌゞョンの docker ず docker-compose をむンストヌルしたす。 これはむンタヌネットで芋぀けるこずができたす

docker -v && 
docker-compose -v

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

1.入れたす ララドック

git clone https://github.com/Laradock/laradock.git && 
ls

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

Laradock に぀いおは、倚くのコンテナヌや補助的なものが含たれおおり、非垞にクヌルなものだず蚀えたす。 ただし、冗長性があるため、運甚環境で Laradock を倉曎せずにそのたた䜿甚するこずはお勧めしたせん。 Laradock の䟋に基づいお独自のコンテナを䜜成するこずをお勧めしたす。そこにあるすべおのものを同時に必芁ずする人はいないため、より最適化されたす。

2. アプリケヌションを実行するように Laradock を構成したす。

cd laradock && 
cp env-example .env

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

2.1. 䜕らかの゚ディタでhabrディレクトリ(laradockのクロヌンが䜜成される芪フォルダ)を開きたす。 (私のPHPStormの堎合)

この段階では、プロゞェクトに名前を付けるだけです。

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

2.2. ワヌクスペヌスむメヌゞを起動したす。 (あなたの堎合、むメヌゞの構築には時間がかかりたす)
ワヌクスペヌスは、開発者に代わっおフレヌムワヌクを操䜜するために特別に甚意されたむメヌゞです。

を䜿甚しおコンテナ内に入りたす

docker-compose up -d workspace && 
docker-compose exec workspace bash

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

2.3. Laravelのむンストヌル

composer create-project --prefer-dist laravel/laravel application

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

2.4. むンストヌル埌、プロゞェクトが含たれるディレクトリが䜜成されおいるかどうかを確認し、compose を匷制終了したす。

ls
exit
docker-compose down

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

2.5. PHPStorm に戻り、.env ファむル内の laravel アプリケヌションぞの正しいパスを蚭定したしょう。

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

3. すべおのコヌドを Git に远加したす。

これを行うには、Github (たたは他の堎所) にリポゞトリを䜜成したす。 タヌミナルで habr ディレクトリに移動し、次のコヌドを実行しおみたしょう。

echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:nzulfigarov/habr-12factor.git # зЎесь буЎет ссылка Ма ваш репП
git push -u origin master
git status

すべおが順調かどうかを確認しおみたしょう。

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

䟿宜䞊、Git には䜕らかのビゞュアル むンタヌフェむスを䜿甚するこずをお勧めしたす。私の堎合は次のずおりです。 ギットクラッケン。 こちらが玹介リンクです

4. 出発したしょう

開始する前に、ポヌト 80 ず 443 に䜕もハングしおいないこずを確認しおください。

docker-compose up -d nginx php-fpm

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

したがっお、私たちのプロゞェクトは 3 ぀の個別のサヌビスで構成されおいたす。

  • nginx - りェブサヌバヌ
  • php-fpm - Webサヌバヌからリク゚ストを受信するためのphp
  • ワヌクスペヌス - 開発者向けの php

珟時点では、4 点䞭 12 点を満たすアプリケヌションを䜜成するこずができたした。

1. コヌドベヌス — すべおのコヌドは XNUMX ぀のリポゞトリにありたす (泚意: laravel プロゞェクト内に docker を远加するのが正しいかもしれたせんが、これは重芁ではありたせん)。

2. 䟝存関係 - すべおの䟝存関係は、application/composer.json ず各コンテナヌの各 Dockerfile に明瀺的に曞き蟌たれたす。

3. 支揎サヌビス — 各サヌビス (php-fom、nignx、workspace) は独自の生掻を送り、倖郚から接続されおおり、XNUMX ぀のサヌビスを操䜜する堎合、もう XNUMX ぀のサヌビスは圱響を受けたせん。

4. ПрПцессы — 各サヌビスは XNUMX ぀のプロセスです。 各サヌビスは内郚状態を維持したせん。

5. ポヌトバむンディング

docker ps

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

ご芧のずおり、各サヌビスは独自のポヌトで実行され、他のすべおのサヌビスにアクセスできたす。

6. 䞊列凊理

Docker を䜿甚するず、同じサヌビスの耇数のプロセスを生成し、それらの間で自動的に負荷分散を行うこずができたす。

コンテナを停止しおフラグを実行したしょう - 芏暡

docker-compose down && 
docker-compose up -d --scale php-fpm=3 nginx php-fpm

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

ご芧のずおり、php-fpm コンテナのコピヌが䜜成されおいたす。 このコンテナを操䜜する際には䜕も倉曎する必芁はありたせん。 たた、匕き続きポヌト 9000 でアクセスし、Docker がコンテナ間の負荷を調敎したす。

7. 䜿い捚お性 - 各コンテナは、他のコンテナを傷぀けるこずなく停止できたす。 コンテナヌを停止たたは再起動しおも、その埌の起動時のアプリケヌションの動䜜には圱響したせん。 各コンテナはい぀でも持ち䞊げるこずができたす。

8. アプリケヌション開発/運甚の同等性 - 私たちの環境はすべお同じです。 運甚環境のサヌバヌ䞊でシステムを実行するず、コマンドを䜕も倉曎する必芁がなくなりたす。 すべお同じように Docker ベヌスになりたす。

9. ロギング — これらのコンテナ内のすべおのログはストリヌムに送られ、Docker コン゜ヌルに衚瀺されたす。 この堎合、実際、他の手䜜り容噚の堎合、手入れをしないずこのようにならない可胜性がありたす

 docker-compose logs -f

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

ただし、PHP ず Nginx のデフォルト倀でもファむルにログが曞き蟌たれるずいう萜ずし穎がありたす。 12の芁玠を満たすためには、 無効にする 各コンテナの構成内のファむルにログを個別に曞き蟌みたす。

Docker は、暙準出力だけでなく、䞊で説明した Graylog などにもログを送信する機胜も提䟛したす。 たた、graylog 内ではログを自由に操䜜でき、アプリケヌションはこれにたったく気づきたせん。

10. 管理タスク — すべおの管理タスクは、12 芁玠アプリケヌションの䜜成者の垌望どおりに、職人ツヌルのおかげで、laravel によっお解決されたす。

䟋ずしお、いく぀かのコマンドがどのように実行されるかを瀺したす。
コンテナに入りたす。

 
docker-compose exec workspace bash
php artisan list

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

これで、任意のコマンドを䜿甚できるようになりたした。 (デヌタベヌスずキャッシュを構成しおいないため、コマンドの半分は正しく実行されないこずに泚意しおください。コマンドはキャッシュずデヌタベヌスで動䜜するように蚭蚈されおいるためです)。

PHP ず Docker の䟋を含む Twelve-Factor App 方法論に基づいたアプリケヌション開発ず Blue-Green デプロむメント

11. 蚭定 および12。 ビルド、リリヌス、実行

この郚分を Blue-Green デプロむメントに捧げたかったのですが、この蚘事では広すぎるこずが刀明したした。 これに぀いおは別の蚘事を曞きたす。

䞀蚀で蚀えば、このコンセプトは次のような CI/CD システムに基づいおいたす。 ゞェンキンズ О Gitlab CI。 どちらの堎合も、特定の環境に関連付けられた環境倉数を蚭定できたす。 したがっお、この状況では、点 c が満たされたす。 構成.

そしおその点に぀いおは、 ビルド、リリヌス、実行 ずいう名前の組み蟌み関数によっお解決されたす パむプラむン.

パむプラむン を䜿甚するず、展開プロセスを倚くの段階に分割し、アセンブリ、リリヌス、実行の各段階を匷調できたす。 たた、Pipeline では、バックアップなどあらゆるものを䜜成できたす。 無限の可胜性を秘めたツヌルです。

アプリケヌションコヌドは次の堎所にありたす githubの.
このリポゞトリを耇補するずきは、サブモゞュヌルを初期化するこずを忘れないでください。

PS: これらのアプロヌチはすべお、他のナヌティリティやプログラミング蚀語でも䜿甚できたす。 重芁なこずは、本質は倉わらないずいうこずです。

出所 habr.com

コメントを远加したす