Packer:PHP開発者ツールボックスの強力なツール?それはあなた次第です!
要するに、PHP開発者として、Packerはあなたのツールボックスに不可欠なツールですか?答えは、あなたが何のために働いているかによって異なります。
サーバー側の作業(クライアントまたは企業向け)に関与し、同時に開発作業を行う場合、答えはイエスです。パッカーはあなたをとても助けることができます。
しかし、あなたが単なる開発者であり、サーバー側の作業に直接対処することはめったにない場合、パッカーはあなたをあまり助けません。
それでも、サーバー環境を作成することの基本を学ぶことは、どのPHP開発者にとっても大きな利益をもたらすでしょう。あなたはあなたのキャリアを通じて多かれ少なかれこれらのテクノロジーに遭遇します(あなたが作成するすべてはそれらの上で実行されます!)。これらの専門知識を習得することは、間違いなくあなたのキャリアの見通しを改善するでしょう!少なくとも、DevOpsの同僚の仕事をよりよく理解することができます。
これに興味がある場合、または頻繁に手動サーバー側の作業をしている場合は、読み続けてください。
キーポイント:
さらに、開発チームが協力するためには、それほど遠くないことで、何らかの形の同時バージョン制御システムがある可能性があり、チームは自動展開を設定することさえできます。変更がリポジトリにコミットされると、ステージングまたは生産システムに自動的に展開されます。この状況は、実際には当時のWebアプリケーション開発に最適なテクノロジーでした。
素晴らしい昔では、継続的な統合、仮想マシン、クラウドコンピューティング、インフラストラクチャオーケストレーション、データセンターの自動化、さらには「DevOps」という用語は基本的に不明です。彼らは生まれたばかりです。 Amazonは、インターネットサービスビジネスを開始しました。覚えておいてください、これはわずか10年前でした!
ああ、時間はどれほど簡単だよね?
いいえ、そうではありません。当時、開発はより遅く、面倒で、エラーが発生しやすくなりました。また、サーバーは常にテストのために「有効」する必要があります。これは通常、開発者が最新のPHPバージョンなどの使用準備が整ったサーバーがあるまで待つ必要があることを意味します。多くの場合、これはしばしば戦いであり、「ネットワーク人」にとって、サーバーを「操作」することは、火を消すようなものです。
コンピューティングと仮想化今日:
今、コンピューターテクノロジーが指先で、開発者はより複雑な開発インフラストラクチャを携帯することができます。今日、ラップトップまたはPCのコンピューティングパワーは、10年前のWebサーバーのコンピューティングパワーよりもはるかに大きい。
実際、今日のスマートフォンの多くは、10年前のサーバーよりも強力です。
テクノロジーは素晴らしいですね。
利用可能なコンピューティング能力の増加に伴い、このコンピューティングパワーが別々の「マシン」に分解できることをますます多くの人々が認識し始めています。これにより、完全に異なる操作を同時に実行できます。さらに重要なことは、コンピューティングパワーをより適切に利用して、リソースを節約できることです。これらは、コンピューティングパワー仮想化の主なドライバーです。
言い換えれば、今日、仮想マシンを作成する機能により、開発者は独自の開発環境を運ぶことができ、適切な職場環境を提供しなければならない他の人に限定されなくなりました。さらに重要なことは、完全な開発環境をローカルに構築し、完全なWebサーバーをシミュレートできることです。これにより、開発者がより自律的になるだけでなく、このローカル開発環境にはもう1つの大きな利点があります。それは「開発プロダクションの一貫性」と呼ばれます - 私たちは初心者に優しい本「ジャンプスタートPHP環境」にいます。これについて詳しく説明しました。開発プロダクションの一貫性は、基本的に、開発者がアプリケーションが最終的に生産環境に展開されるのとほぼ同じシステムで開発できることを意味します。
生産の一貫性の利点 - 開発者は、正しいことを初めて実行できるため、開発者が高品質のコードを書くことができます。今、開発者は、非常に複雑な開発環境を含むバックパックで非常に複雑なアプリケーションを開発するために必要なすべてを持つことができます。
明らかに、この能力は複雑さももたらします。仮想サーバーを構築する必要があり、ソフトウェアをインストールして構成する必要があります。これらはすべて非常に時間がかかり、時間はお金です。これはまた、開発者がそのような環境を実行するために多くを学ぶ必要があるかもしれないことを意味します。これも時間がかかります。
vagrantの外観:
開発者が開発環境の「建物」を完了するのを支援するために、Hashicorp Inc.はVagrantというプログラムを開始しました。 Vagrantを使用すると、開発環境構成はコードであり、簡単に共有し、ロールバックし、前方に転がすことができます。開発者は、サーバーがセットアップに数時間かかるか、失敗が解決するのに数時間かかる場合があることを心配することなく、PHPの最新バージョンなど、新しいことを無料で試すことができます。開発者は、誰もがこの環境を作成するのを待つ必要はありません。また、環境が完全にクラッシュした場合、誰も気にしません。
Vagrantの詳細 - Vagrantへの再導入:PHPを使用する正しい方法
この時間消費は、Vagrantが一度に単一の仮想化システム(「プロバイダー」と呼ばれる)用に1つのボックスのみを構築できるという事実を悪化させます。たとえば、環境をローカルに構築し、AWSに環境を構築する場合は、2つの異なるVagrantファイルを作成して個別に実行する必要があります。これは実際には実用的ではありません。要するに、Vagrantは単一の開発環境を構築するのが非常に得意であり、それだけです。しかし、解決すべき別の問題がまだあります。 Vagrantは開発環境を構築するのに最適ですが、特に多くの構成を使用して、実行するのに時間がかかります(構成の詳細については以下を参照してください)。関係するソフトウェアによっては、ボックスを構築してソフトウェアを構成するのに2〜20分かかることがあります。
パッカーの外観:
続行するには、DevOpsの役割をもっとプレイする必要があります。 Packerは、仮想化されたマシンイメージを比較的単純な中央構成に作成するタスクを配置するため、自動開発環境でVagrantの同じ利点を得ることができますが、基本画像の開発にも使用できます。
仮想マシンの画像は、仮想デバイスとも呼ばれます。これは、新しい仮想マシンの作成に使用できる仮想マシンの事前に構築されたコピーです。 Vagrantの用語では、これらの画像は「ボックス」と呼ばれます。
独自のミラーを作成するプロセスを理解している場合、手動操作は非常に面倒であることがわかります。わからない場合は、手動でそれらを構築する手間をスキップでき、パッカーの使用を開始できるため、幸運です。ただし、ミラー/サーバーの構築の基本を学ぶ必要があります。繰り返しになりますが、これは開発者にとって貴重な知識であり、開発者はすべての時間をかけて基本を学ぶ必要があります。
Packerの使用を開始し、すでにVagrantを使用している場合、最初の質問は「PackerとVagrantの違いは何ですか?」最終的に、PackerはVagrantが開発環境を構築するために使用できる画像を作成します。 HashicorpのVagrant Boxを以前に使用したことがある場合は、Packerで構築されている可能性があります。
Packerを使用しているDevOpsの人として、開発チームに、使用できる生産環境の画像を提供できます。これは再び開発プロダクションの一貫性をサポートし、開発プロセスを簡素化します。
前に節約時間を節約しました。パッカーは、これらの画像を並行して構築および展開することもできます。そのため、さまざまなホスト、プライベートクラウド、およびVagrantの画像をほぼ同時に作成できます。さらに、これらの「事前に焼かれた」ミラーは、Vagrantで構成されたボックスよりもはるかに速く始まります。はるかに速い!チームが「有効」され、ボックスを破壊した場合、パッカーで作成された事前焼きソフトウェアと構成された画像は、チームを大幅に節約できます。
パッカープロセスにより、基本的な画像の作成が再現可能になります。これは、VMの画像再構成を事前にテストおよび自動化できるため、生産システムの品質が高いことを意味します。言い換えれば、パッカーはヒューマンエラーを減らすのに役立ちます。
ミラーを構築するときは、いくつかのサブプロセスを制御することもできます。後で説明します。 Packerのドキュメントで、Packerの概念と機能の詳細についても読むこともできます。多くの異なるプラットフォームの画像を作成できることに注意してください。また、多くの構成プログラム(シェフ、パペット、アンシブルなど)やシェルスクリプト構成ソフトウェアを使用することもできます。また、Vagrantボックスの作成やDockerレジストリ(およびその他多く)に画像を押すなど、後処理を行うことができます。
すごい...理論が多すぎますね。
パッカーの概念とそれの使用方法を明確にするのに役立つ実用的なことをしましょう。
いくつかのパッカーワークフロー:
これは、私たちがやろうとしていることの視覚的な表現です。
パッカーは画像を作成するためにVagrantを必要としませんが、上記のグラフにVagrantが追加され、「パイプ」のどこにあるかをよりよく理解することができます。
パッカーの基本を学び始めるために、次の演習の目標は、RackspaceとVirtualBoxの「ボックス」ファイルで実行できる画像を作成することです。目標は、(理論的)生産サーバーで開発と使用のための同じ画像と構成を生成できることを示すことです。
Rackspaceは、コンピューティングインフラストラクチャを管理するための非常にシンプルなバックエンドを備えており、インフラストラクチャ管理の標準システムであるOpenStackを使用しているためです。
また、VirtualBoxは、無料で広く使用されているローカル仮想化システムであるため、VirtualBoxも使用しています。必要に応じて、AWSやVMwareなどの他のシステムを使用できますが、両方のシステム専用に作成されているため、このチュートリアルで提供される資料を変更する必要があります。注意:この記事で作成した仮想サーバーは、決して「生産準備ができている」ことではありません。彼らはデモンストレーションのみを目的としています。
パッカーで構築する最初の画像は、NginxとPHP7がプリインストールされたDebian Jessie(64ビット)画像になります。
要件:開始する前に、コンピューターにVagrant and Virtualization Software VirtualBox(バージョン5.0)をインストールする必要があります。 64ビットコンピューターも必要です。 Windowsシステムを使用している場合は、Bashコンソールを使用できるようにWindows用のGitもインストールする必要があります。
上で述べたように、このチュートリアルではRackspaceを使用しているため、アカウントを作成する必要があります。アカウントの設定は比較的高速で簡単です。
また、VirtualBoxは非常に大きな画像ダウンロード(約250MB)を構築するため、比較的速いインターネット接続も必要です。最後に、プロセス全体を完了するには、コンピューターに約12GBの無料ディスクスペースが必要です。
この記事では、Vagrant、SSH、およびShellコマンドの使用に関する基本的な知識を知っており、Linuxと仮想マシンの基本的な知識があることも想定しています。
パッカーを実行するようにコンピューターを設定します
執筆時点で、Packer 0.11.0がリリースされました。
インストールが完了したら、(git bash)コンソールにパケットを入力します。あなたはこのようなものを見るはずです。
次に、Rackspaceにアクセスしてサーバーを起動してベースイメージを作成します。注:BuilderプラットフォームのクラウドホストとしてAWSまたはその他のパッカーサポートがある場合、実行する必要がある手順は似ています。このチュートリアルでRackspaceを紹介します。また、サーバーを作成すると、ホストアカウントにいくつかの料金が請求されることに注意してください。ただし、金額は小さくなります。このチュートリアルに従うコストは、1ドルを超えてはなりません。
Jessie 8サーバーの構築を続け、「パッカーテスト」と名付けます。 Rackspaceは非常に直感的で理解しやすいです。 1GBサーバーを起動して、そこから画像を作成します。
サーバーがアクティブになったら、新しく作成されたサーバー(右上隅の「操作」ボタン)のミラーを作成します。画像を作成して保存した後、サーバーを削除できます。
「サーバー> mirror」に移動すると、新しい画像が表示されます。それをクリックして、ミラーの詳細ページに移動します。ミラーIDが必要です。
わかりました。基本的な画像がRackspaceで使用できるようになったので、独自の画像の構築を開始します。このプロセスは、特にサーバー環境とパッカーに関する知識が限られている人にとっては、実際には非常に複雑です。そのため、ヘルプを提供するために、ダウンロードできるデモパッカーリポジトリを作成しました。 (git bash)コンソールからこのリポジトリをクローンしてください。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
新しく作成された「PHP-Packer-Demo」ディレクトリに移動します。
<code>cd PHP-Packer-Demo </code>
お気に入りの編集者を使用してJessie64.jsonファイルを開き、Rackspaceユーザー資格情報とミラーIDを入力します。
クイックサイドノート:パスワードの代わりにRackspace APIキーを追加することもできます。実際にPackerの使用を開始する場合は、アクセス資格情報を移動してファイルを分離し、Gitを使用してそれらを無視することもできます。ただし、そうすることはこの記事の範囲を超えています。
jessie64.jsonファイルはパッカーの中核です。これは、アクションを実行するためにパッカーを制御する構成ファイルです。 Vagrantで使用されているVagrantFileに似ています(ダウンロードでVagrantFileも提供します)。
次のコマンドでパッカーを実行します。
<code>packer build jessie64.json</code>
<code> "builders": [ { "type": "openstack", "username": "ENTER_RACKSPACE_USERNAME_HERE", "password": "ENTER_RACKSPACE_PASSWORD_HERE", "region": "IAD", "identity_endpoint": "https://identity.api.rackspacecloud.com/v2.0", "ssh_username": "root", "image_name": "Test Packer Image", "source_image": "ENTER_YOUR_IMAGE_ID_HERE", "flavor": "2" }, { "type": "virtualbox-iso", "boot_command": [ "<esc><wait>", </wait></esc> "install <wait>", </wait> "preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/vanilla-debian-8-jessie-preseed.cfg <wait>", </wait> "debian-installer=en_US <wait>", </wait> "auto <wait>", </wait> "locale=en_US <wait>", </wait> "kbd-chooser/method=us <wait>", </wait> "netcfg/get_hostname={{ .Name }} <wait>", </wait> "netcfg/get_domain=vagrantup.com <wait>", </wait> "fb=false <wait>", </wait> "debconf/frontend=noninteractive <wait>", </wait> "console-setup/ask_detect=false <wait>", </wait> "console-keymaps-at/keymap=us <wait>", </wait> "keyboard-configuration/xkb-keymap=us <wait>", </wait> "<enter><wait>" </wait></enter> ], "disk_size": "10140", "guest_additions_mode": "disable", "guest_os_type": "Debian_64", "hard_drive_interface": "sata", "headless": true, "http_directory": "http", "iso_checksum": "dd25bcdde3c6ea5703cc0f313cde621b13d42ff7d252e2538a11663c93bf8654", "iso_checksum_type": "sha256", "iso_url": "http://cdimage.debian.org/cdimage/release/8.3.0/amd64/iso-cd/debian-8.3.0-amd64-netinst.iso", "shutdown_command": "sudo /sbin/halt -p", "ssh_password": "vagrant", "ssh_username": "vagrant", "ssh_port": "22", "ssh_wait_timeout": "10000s", "vm_name": "debian-jessie", "vboxmanage": [ ["modifyvm", "{{.Name}}", "--memory", "1024"], ["modifyvm", "{{.Name}}", "--cpus", "1"] ] } ], </code>
私たちの演習では、「OpenStack」と「VirtualBox-ISO」画像を組み合わせています。残念ながら、PackerはOpenStack画像を使用してVirtualBoxイメージを作成できないため、VirtualBoxイメージも作成しました。
上記のJSONコードの「boot_command」セクションに気付くでしょう。ここでは、実際には、Debian Jessie 8をVirtualBox VMのオペレーティングシステムとしてインストールするために必要なコマンドを入力するために自動化に参加しています。必要に応じて、Packerが構築しているときにVirtualBoxのインストールプロセスを視聴することもできます。
もちろん、ここでは多くの「魔法」が起こっています。このような仮想ボックス画像を手動で組み合わせるために、LinuxのインストールとPackerの内部メカニズムの内部メカニズムを本当に理解する必要があります。ありがたいことに、このようなPacker .JSONファイルを一般に提供する優れたDevOpsの人々がたくさんいます。構成プログラム
これは、構成ファイルの構成部分です。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
また、上記の「オーバーライド」セクションにも気付くでしょう。これにより、パッカーは、各画像ビルドに対してのみ特定のスクリプトを実行するように指示します。私たちの演習では、virtualboxイメージと「一貫した」にするために「openstack」画像での処理を減らす必要があるため、Setup.shスクリプトのみを処理する必要があります。
最後に、コンフィ分後のプロセッサパーツがあります。
これは、浮浪者ボックスを実際に構築する責任があります。
<code>cd PHP-Packer-Demo </code>
現在構成しているものはすべて、鏡に「事前に焼かれている」ことを覚えておくことが重要です。 Packerは、この自動化で多くの時間を節約します!
構築された画像
それだけです。パッカーはその仕事をしました!
Rackspaceイメージを使用して新しいサーバーを作成できるようになりました。試してみてください。サーバーセクションに移動し、[サーバーの作成]を選択し、保存されたミラーに移動します。削除されたサーバーの下に、新しく保存された画像が表示されるはずです。それを選択してサーバーを起動します。アクティブになったら、IPアドレスを指定してブラウザに入力できます。 nginxウェルカム画面が表示されます。
VirtualBox画像の場合、いくつかの作業にVagrantを使用する必要があります。今すぐ注意深く読んでください。これは非常に難しくなります!
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
VirtualBoxのUIでVMとして新しい画像を表示する必要があります。
上記の最初のコマンドは、新しいボックスをVagrantに追加するため、どこで使用するかを知っています。ボックスに「jessie64」と名付け、作成したばかりのボックスを使用します。 2番目のコマンドは、VirtualBoxで仮想マシンを作成して実行するようにVagrantに指示します。
また、ボックスの最初の起動には1分または2分しかかからないことに気付くでしょう。 Vagrantで構成を続けると、10〜20分かかります。これにより、時間を節約できます。
「Vagrant up」コマンドが完了したら、urlhttps://www.php.cn/link/14e676072a5b15381b6f7f33c3528215
urlをブラウザーに入力します。両方のシステムでは、「Vagrant」ユーザーとパスワード「Vagrant」をSSH接続に使用することもできます。これらのサーバーは安全ではありません!
まだ完全には完成していません!もっと面白いことをしましょう。
多くのSymfony開発作業を行ったと仮定しましょう。 Symfonyバージョンがインストールされ、自動的に準備が整うように、進んで画像を設定しましょう。
開始する前に、Rackspaceでサーバーを削除します。 (私たちは不必要なお金を使いたくありません。)
また、コンソールでは、ロードしたVagrantボックスを終了して削除しましょう。次のコマンドを入力してください:
symfony(およびdemo)を楽しみます(またはそうではありませんか?)
繰り返しますが、Symfonyを使用することが多い開発チームがあると仮定しましょう。 Symfony対応サーバーを自動化しましょう。 Symfony Demoアプリケーションのみをロードしますが、この追加の作業により、Packerが自動化における開発とインフラストラクチャのオーケストレーションの取り組みをサポートする方法についての良いアイデアが得られるはずです。
<code>cd PHP-Packer-Demo </code>
/scriptsディレクトリに移動し、お気に入りのエディターでsetup.shスクリプトを開き、次のシェルスクリプトコードを下部に追加します。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
上記のコードは、Symfony、PHP、およびNginxを適切にセットアップするために、基本的に行う必要があることです。
これらの構成手順で何が起こるかを説明するために、コメントが追加されました。
上記のコードを追加して保存した後、Packerに再び重い仕事をさせましょう。
ファイルシステムの1つのレベルをJessie64.jsonファイルを持っている場所に移動し、以前に入力したコマンドを入力します。
<code>cd PHP-Packer-Demo </code>
他のビジネスを処理したり、コーヒーをもう1杯持ったりすることができます(またはトレッドミルを歩き回ることができます)。新しいSymfonyデモイメージを構築するには時間がかかります。
完了したら、このような画面が表示されるはずです。
画像が構築されて準備が整ったので、OpenStack画像をRackspaceの新しいサーバーとして再び開始できます。
VirtualBox VMの場合、「VirtualBox VMの作成」に上記の2つのコマンドをもう一度入力します。
rackspaceサーバーの場合、新しいIPが取得されます。
を入力します<code>packer build jessie64.json</code>
Symfonyデモアプリケーションが実行されているのが表示されます。
地元のVMでは、次のように入力できます。
<code> "builders": [ { "type": "openstack", "username": "ENTER_RACKSPACE_USERNAME_HERE", "password": "ENTER_RACKSPACE_PASSWORD_HERE", "region": "IAD", "identity_endpoint": "https://identity.api.rackspacecloud.com/v2.0", "ssh_username": "root", "image_name": "Test Packer Image", "source_image": "ENTER_YOUR_IMAGE_ID_HERE", "flavor": "2" }, { "type": "virtualbox-iso", "boot_command": [ "<esc><wait>", </wait></esc> "install <wait>", </wait> "preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/vanilla-debian-8-jessie-preseed.cfg <wait>", </wait> "debian-installer=en_US <wait>", </wait> "auto <wait>", </wait> "locale=en_US <wait>", </wait> "kbd-chooser/method=us <wait>", </wait> "netcfg/get_hostname={{ .Name }} <wait>", </wait> "netcfg/get_domain=vagrantup.com <wait>", </wait> "fb=false <wait>", </wait> "debconf/frontend=noninteractive <wait>", </wait> "console-setup/ask_detect=false <wait>", </wait> "console-keymaps-at/keymap=us <wait>", </wait> "keyboard-configuration/xkb-keymap=us <wait>", </wait> "<enter><wait>" </wait></enter> ], "disk_size": "10140", "guest_additions_mode": "disable", "guest_os_type": "Debian_64", "hard_drive_interface": "sata", "headless": true, "http_directory": "http", "iso_checksum": "dd25bcdde3c6ea5703cc0f313cde621b13d42ff7d252e2538a11663c93bf8654", "iso_checksum_type": "sha256", "iso_url": "http://cdimage.debian.org/cdimage/release/8.3.0/amd64/iso-cd/debian-8.3.0-amd64-netinst.iso", "shutdown_command": "sudo /sbin/halt -p", "ssh_password": "vagrant", "ssh_username": "vagrant", "ssh_port": "22", "ssh_wait_timeout": "10000s", "vm_name": "debian-jessie", "vboxmanage": [ ["modifyvm", "{{.Name}}", "--memory", "1024"], ["modifyvm", "{{.Name}}", "--cpus", "1"] ] } ], </code>
かっこいいですよね?
結論:
2つのサーバーを正常に作成すると、PackerがDevOpsメンバーおよび開発者として提供できる利点を想像することもできます。これらの利点には、以下が含まれますが、これらに限定されません
生産の一貫性 - 開発環境は、生産環境とほぼ同じです。
パッカーは他の同様のツールとどのように比較されますか?
パッカーのインストール方法は?
パッカーを使用してマシンイメージを作成する方法は?
既存の構成管理ツールでPackerを使用できますか?
パッカーは、画像作成中にどのように障害を処理しますか?
継続的な統合/継続展開(CI/CD)パイプラインでPackerを使用できますか?
絶対に。パッカーは、CI/CDパイプラインに最適です。ビルドプロセス中に使用してマシン画像を作成し、これらの画像を生産環境に展開できます。Packerは、問題をデバッグするのに役立つ詳細なログを提供します。また、画像作成中にデバッグモードがより詳細な出力を取得できるようにすることもできます。
はい、パッカーはコミュニティの貢献を歓迎するオープンソースプロジェクトです。エラーを報告したり、機能を提案したり、ドキュメントを改善したり、プルリクエストを送信したりすることで、コードを貢献できます。
Packerの公式WebサイトとGitHubリポジトリは、学習を開始するのに最適な場所です。包括的なドキュメント、チュートリアル、および例を提供します。また、インターネット上のパッカーに関する多くのブログ投稿、ビデオ、オンラインコースを見つけることもできます。
以上がHashicorp&#x27; s Packer-それはPHP開発者にとって何かですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。