Packer:PHP開発者ツールボックスの強(qiáng)力なツール?それはあなた次第です!
要するに、PHP開発者として、Packerはあなたのツールボックスに不可欠なツールですか?答えは、あなたが何のために働いているかによって異なります。
サーバー側(cè)の作業(yè)(クライアントまたは企業(yè)向け)に関與し、同時(shí)に開発作業(yè)を行う場合、答えはイエスです。パッカーはあなたをとても助けることができます。
しかし、あなたが単なる開発者であり、サーバー側(cè)の作業(yè)に直接対処することはめったにない場合、パッカーはあなたをあまり助けません。
それでも、サーバー環(huán)境を作成することの基本を?qū)Wぶことは、どのPHP開発者にとっても大きな利益をもたらすでしょう。あなたはあなたのキャリアを通じて多かれ少なかれこれらのテクノロジーに遭遇します(あなたが作成するすべてはそれらの上で実行されます?。?。これらの専門知識を習(xí)得することは、間違いなくあなたのキャリアの見通しを改善するでしょう!少なくとも、DevOpsの同僚の仕事をよりよく理解することができます。
これに興味がある場合、または頻繁に手動サーバー側(cè)の作業(yè)をしている場合は、読み続けてください。
キーポイント:
- パッカーの適用性:パッカーは、一貫したサーバー環(huán)境の作成を簡素化するのに役立つサーバー管理と開発タスクに関與しているPHP開発者にとって特に役立ちます。
- 開発自律性:最新のコンピューティングテクノロジーの進(jìn)歩により、開発者は個(gè)人のデバイスで複雑な開発環(huán)境を直接管理し、それにより自律性を改善し、開発環(huán)境と生産環(huán)境の一貫性を高めることができます。 Vagrantとの統(tǒng)合:PackerとVagrantの両方が開発環(huán)境を強(qiáng)化しますが、Packerのユニークな機(jī)能は、さまざまなプラットフォームで使用できるマシン畫像を自動的に作成し、環(huán)境設(shè)定時(shí)間を節(jié)約することです。
- DevOpsコラボレーション:Packerは、DevOpsの専門家に、開発チームに生産整列環(huán)境を提供し、開発プロセスを簡素化し、セットアップエラーを削減するツールを提供します。
- 実用的なアクション:この記事では、パッカーのセットアップとそれを使用して仮想マシンイメージを作成するための実用的なチュートリアルを提供し、複雑な構(gòu)成タスクを効率的に処理するパッカーの能力を示します。
- 將來の開発:Packerなどのツールを使用することを?qū)Wぶことは、現(xiàn)在のプロジェクトのニーズを満たすだけでなく、將來のさまざまなチームとの技術(shù)的統(tǒng)合とコラボレーションのために開発者を準(zhǔn)備することもできます。
さらに、開発チームが協(xié)力するためには、それほど遠(yuǎn)くないことで、何らかの形の同時(shí)バージョン制御システムがある可能性があり、チームは自動展開を設(shè)定することさえできます。変更がリポジトリにコミットされると、ステージングまたは生産システムに自動的に展開されます。この狀況は、実際には當(dāng)時(shí)のWebアプリケーション開発に最適なテクノロジーでした。
素晴らしい昔では、継続的な統(tǒng)合、仮想マシン、クラウドコンピューティング、インフラストラクチャオーケストレーション、データセンターの自動化、さらには「DevOps」という用語は基本的に不明です。彼らは生まれたばかりです。 Amazonは、インターネットサービスビジネスを開始しました。覚えておいてください、これはわずか10年前でした!
ああ、時(shí)間はどれほど簡単だよね?
いいえ、そうではありません。當(dāng)時(shí)、開発はより遅く、面倒で、エラーが発生しやすくなりました。また、サーバーは常にテストのために「有効」する必要があります。これは通常、開発者が最新のPHPバージョンなどの使用準(zhǔn)備が整ったサーバーがあるまで待つ必要があることを意味します。多くの場合、これはしばしば戦いであり、「ネットワーク人」にとって、サーバーを「操作」することは、火を消すようなものです。
コンピューティングと仮想化今日:
今、コンピューターテクノロジーが指先で、開発者はより複雑な開発インフラストラクチャを攜帯することができます。今日、ラップトップまたはPCのコンピューティングパワーは、10年前のWebサーバーのコンピューティングパワーよりもはるかに大きい。
実際、今日のスマートフォンの多くは、10年前のサーバーよりも強(qiáng)力です。
テクノロジーは素晴らしいですね。
利用可能なコンピューティング能力の増加に伴い、このコンピューティングパワーが別々の「マシン」に分解できることをますます多くの人々が認(rèn)識し始めています。これにより、完全に異なる操作を同時(shí)に実行できます。さらに重要なことは、コンピューティングパワーをより適切に利用して、リソースを節(jié)約できることです。これらは、コンピューティングパワー仮想化の主なドライバーです。
言い換えれば、今日、仮想マシンを作成する機(jī)能により、開発者は獨(dú)自の開発環(huán)境を運(yùn)ぶことができ、適切な職場環(huán)境を提供しなければならない他の人に限定されなくなりました。さらに重要なことは、完全な開発環(huán)境をローカルに構(gòu)築し、完全なWebサーバーをシミュレートできることです。これにより、開発者がより自律的になるだけでなく、このローカル開発環(huán)境にはもう1つの大きな利點(diǎn)があります。それは「開発プロダクションの一貫性」と呼ばれます - 私たちは初心者に優(yōu)しい本「ジャンプスタートPHP環(huán)境」にいます。これについて詳しく説明しました。開発プロダクションの一貫性は、基本的に、開発者がアプリケーションが最終的に生産環(huán)境に展開されるのとほぼ同じシステムで開発できることを意味します。
生産の一貫性の利點(diǎn) - 開発者は、正しいことを初めて実行できるため、開発者が高品質(zhì)のコードを書くことができます。今、開発者は、非常に複雑な開発環(huán)境を含むバックパックで非常に複雑なアプリケーションを開発するために必要なすべてを持つことができます。
明らかに、この能力は複雑さももたらします。仮想サーバーを構(gòu)築する必要があり、ソフトウェアをインストールして構(gòu)成する必要があります。これらはすべて非常に時(shí)間がかかり、時(shí)間はお金です。これはまた、開発者がそのような環(huán)境を?qū)g行するために多くを?qū)Wぶ必要があるかもしれないことを意味します。これも時(shí)間がかかります。
vagrantの外観:
開発者が開発環(huán)境の「建物」を完了するのを支援するために、Hashicorp Inc.はVagrantというプログラムを開始しました。 Vagrantを使用すると、開発環(huán)境構(gòu)成はコードであり、簡単に共有し、ロールバックし、前方に転がすことができます。開発者は、サーバーがセットアップに數(shù)時(shí)間かかるか、失敗が解決するのに數(shù)時(shí)間かかる場合があることを心配することなく、PHPの最新バージョンなど、新しいことを無料で試すことができます。開発者は、誰もがこの環(huán)境を作成するのを待つ必要はありません。また、環(huán)境が完全にクラッシュした場合、誰も気にしません。
Vagrantの詳細(xì) - Vagrantへの再導(dǎo)入:PHPを使用する正しい方法
この時(shí)間消費(fèi)は、Vagrantが一度に単一の仮想化システム(「プロバイダー」と呼ばれる)用に1つのボックスのみを構(gòu)築できるという事実を悪化させます。たとえば、環(huán)境をローカルに構(gòu)築し、AWSに環(huán)境を構(gòu)築する場合は、2つの異なるVagrantファイルを作成して個(gè)別に実行する必要があります。これは実際には実用的ではありません。要するに、Vagrantは単一の開発環(huán)境を構(gòu)築するのが非常に得意であり、それだけです。しかし、解決すべき別の問題がまだあります。 Vagrantは開発環(huán)境を構(gòu)築するのに最適ですが、特に多くの構(gòu)成を使用して、実行するのに時(shí)間がかかります(構(gòu)成の詳細(xì)については以下を參照してください)。関係するソフトウェアによっては、ボックスを構(gòu)築してソフトウェアを構(gòu)成するのに2?20分かかることがあります。
パッカーの外観:
続行するには、DevOpsの役割をもっとプレイする必要があります。 Packerは、仮想化されたマシンイメージを比較的単純な中央構(gòu)成に作成するタスクを配置するため、自動開発環(huán)境でVagrantの同じ利點(diǎn)を得ることができますが、基本畫像の開発にも使用できます。
仮想マシンの畫像は、仮想デバイスとも呼ばれます。これは、新しい仮想マシンの作成に使用できる仮想マシンの事前に構(gòu)築されたコピーです。 Vagrantの用語では、これらの畫像は「ボックス」と呼ばれます。
獨(dú)自のミラーを作成するプロセスを理解している場合、手動操作は非常に面倒であることがわかります。わからない場合は、手動でそれらを構(gòu)築する手間をスキップでき、パッカーの使用を開始できるため、幸運(yùn)です。ただし、ミラー/サーバーの構(gòu)築の基本を?qū)Wぶ必要があります。繰り返しになりますが、これは開発者にとって貴重な知識であり、開発者はすべての時(shí)間をかけて基本を?qū)Wぶ必要があります。
Packerの使用を開始し、すでにVagrantを使用している場合、最初の質(zhì)問は「PackerとVagrantの違いは何ですか?」最終的に、PackerはVagrantが開発環(huán)境を構(gòu)築するために使用できる畫像を作成します。 HashicorpのVagrant Boxを以前に使用したことがある場合は、Packerで構(gòu)築されている可能性があります。
Packerを使用しているDevOpsの人として、開発チームに、使用できる生産環(huán)境の畫像を提供できます。これは再び開発プロダクションの一貫性をサポートし、開発プロセスを簡素化します。
前に節(jié)約時(shí)間を節(jié)約しました。パッカーは、これらの畫像を並行して構(gòu)築および展開することもできます。そのため、さまざまなホスト、プライベートクラウド、およびVagrantの畫像をほぼ同時(shí)に作成できます。さらに、これらの「事前に焼かれた」ミラーは、Vagrantで構(gòu)成されたボックスよりもはるかに速く始まります。はるかに速い!チームが「有効」され、ボックスを破壊した場合、パッカーで作成された事前焼きソフトウェアと構(gòu)成された畫像は、チームを大幅に節(jié)約できます。
パッカープロセスにより、基本的な畫像の作成が再現(xiàn)可能になります。これは、VMの畫像再構(gòu)成を事前にテストおよび自動化できるため、生産システムの品質(zhì)が高いことを意味します。言い換えれば、パッカーはヒューマンエラーを減らすのに役立ちます。
ミラーを構(gòu)築するときは、いくつかのサブプロセスを制御することもできます。後で説明します。 Packerのドキュメントで、Packerの概念と機(jī)能の詳細(xì)についても読むこともできます。多くの異なるプラットフォームの畫像を作成できることに注意してください。また、多くの構(gòu)成プログラム(シェフ、パペット、アンシブルなど)やシェルスクリプト構(gòu)成ソフトウェアを使用することもできます。また、Vagrantボックスの作成やDockerレジストリ(およびその他多く)に畫像を押すなど、後処理を行うことができます。
すごい...理論が多すぎますね。
パッカーの概念とそれの使用方法を明確にするのに役立つ実用的なことをしましょう。
いくつかのパッカーワークフロー:
これは、私たちがやろうとしていることの視覚的な表現(xiàn)です。
パッカーは畫像を作成するためにVagrantを必要としませんが、上記のグラフにVagrantが追加され、「パイプ」のどこにあるかをよりよく理解することができます。
パッカーの基本を?qū)Wび始めるために、次の演習(xí)の目標(biāo)は、RackspaceとVirtualBoxの「ボックス」ファイルで実行できる畫像を作成することです。目標(biāo)は、(理論的)生産サーバーで開発と使用のための同じ畫像と構(gòu)成を生成できることを示すことです。
Rackspaceは、コンピューティングインフラストラクチャを管理するための非常にシンプルなバックエンドを備えており、インフラストラクチャ管理の標(biāo)準(zhǔn)システムであるOpenStackを使用しているためです。
また、VirtualBoxは、無料で広く使用されているローカル仮想化システムであるため、VirtualBoxも使用しています。必要に応じて、AWSやVMwareなどの他のシステムを使用できますが、両方のシステム専用に作成されているため、このチュートリアルで提供される資料を変更する必要があります。注意:この記事で作成した仮想サーバーは、決して「生産準(zhǔn)備ができている」ことではありません。彼らはデモンストレーションのみを目的としています。
パッカーで構(gòu)築する最初の畫像は、NginxとPHP7がプリインストールされたDebian Jessie(64ビット)畫像になります。
要件:開始する前に、コンピューターにVagrant and Virtualization Software VirtualBox(バージョン5.0)をインストールする必要があります。 64ビットコンピューターも必要です。 Windowsシステムを使用している場合は、Bashコンソールを使用できるようにWindows用のGitもインストールする必要があります。
上で述べたように、このチュートリアルではRackspaceを使用しているため、アカウントを作成する必要があります。アカウントの設(shè)定は比較的高速で簡単です。
また、VirtualBoxは非常に大きな畫像ダウンロード(約250MB)を構(gòu)築するため、比較的速いインターネット接続も必要です。最後に、プロセス全體を完了するには、コンピューターに約12GBの無料ディスクスペースが必要です。
この記事では、Vagrant、SSH、およびShellコマンドの使用に関する基本的な知識を知っており、Linuxと仮想マシンの基本的な知識があることも想定しています。
パッカーを?qū)g行するようにコンピューターを設(shè)定します
指示に従って、コンピューターにパッカーをインストールしてください。
執(zhí)筆時(shí)點(diǎn)で、Packer 0.11.0がリリースされました。
インストールが完了したら、(git bash)コンソールにパケットを入力します。あなたはこのようなものを見るはずです。
次に、Rackspaceにアクセスしてサーバーを起動してベースイメージを作成します。注:BuilderプラットフォームのクラウドホストとしてAWSまたはその他のパッカーサポートがある場合、実行する必要がある手順は似ています。このチュートリアルでRackspaceを紹介します。また、サーバーを作成すると、ホストアカウントにいくつかの料金が請求されることに注意してください。ただし、金額は小さくなります。このチュートリアルに従うコストは、1ドルを超えてはなりません。
Jessie 8サーバーの構(gòu)築を続け、「パッカーテスト」と名付けます。 Rackspaceは非常に直感的で理解しやすいです。 1GBサーバーを起動して、そこから畫像を作成します。
サーバーがアクティブになったら、新しく作成されたサーバー(右上隅の「操作」ボタン)のミラーを作成します。畫像を作成して保存した後、サーバーを削除できます。
「サーバー> mirror」に移動すると、新しい畫像が表示されます。それをクリックして、ミラーの詳細(xì)ページに移動します。ミラーIDが必要です。
わかりました?;镜膜十嬒瘠琑ackspaceで使用できるようになったので、獨(dú)自の畫像の構(gòu)築を開始します。このプロセスは、特にサーバー環(huán)境とパッカーに関する知識が限られている人にとっては、実際には非常に複雑です。そのため、ヘルプを提供するために、ダウンロードできるデモパッカーリポジトリを作成しました。 (git bash)コンソールからこのリポジトリをクローンしてください。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
新しく作成された「PHP-Packer-Demo」ディレクトリに移動します。
<code>cd PHP-Packer-Demo </code>
お?dú)荬巳毪辘尉幖撙蚴褂盲筏艼essie64.jsonファイルを開き、Rackspaceユーザー資格情報(bào)とミラーIDを入力します。
クイックサイドノート:パスワードの代わりにRackspace APIキーを追加することもできます。実際にPackerの使用を開始する場合は、アクセス資格情報(bào)を移動してファイルを分離し、Gitを使用してそれらを無視することもできます。ただし、そうすることはこの記事の範(fàn)囲を超えています。
jessie64.jsonファイルはパッカーの中核です。これは、アクションを?qū)g行するためにパッカーを制御する構(gòu)成ファイルです。 Vagrantで使用されているVagrantFileに似ています(ダウンロードでVagrantFileも提供します)。
次のコマンドでパッカーを?qū)g行します。
<code>packer build jessie64.json</code>このビルドプロセスには數(shù)分かかります。チュートリアルに取り組んでいるので、実際にパッカーが完成するのを待っている間に何が起こっているのかを?qū)g際に理解しましょう。このプロセスは約30分を超えないでください。または、コンソールの出力が10分以上停止しないでください。これが本當(dāng)なら、エラーが発生しました。
最初に、Packerは、定義した基本畫像を使用してビルドプロセスを開始します。これらの畫像はサーバー自體として開始され、Jessie64.jsonファイルにこれらのサーバーも定義します。 jessie64.jsonファイルの上部にある「ビルダー」の特定のJSON値を見つけることができます。
<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>ビルダーは、ターゲットとしている環(huán)境と互換性のあるミラーを作成する責(zé)任があります。たとえば、AWS AMIを使用して、VagrantとAWSで使用するためにVirtualBoxイメージを?qū)g際に作成できます。
私たちの演習(xí)では、「OpenStack」と「VirtualBox-ISO」畫像を組み合わせています。殘念ながら、PackerはOpenStack畫像を使用してVirtualBoxイメージを作成できないため、VirtualBoxイメージも作成しました。
上記のJSONコードの「boot_command」セクションに気付くでしょう。ここでは、実際には、Debian Jessie 8をVirtualBox VMのオペレーティングシステムとしてインストールするために必要なコマンドを入力するために自動化に參加しています。必要に応じて、Packerが構(gòu)築しているときにVirtualBoxのインストールプロセスを視聴することもできます。
もちろん、ここでは多くの「魔法」が起こっています。このような仮想ボックス畫像を手動で組み合わせるために、LinuxのインストールとPackerの內(nèi)部メカニズムの內(nèi)部メカニズムを本當(dāng)に理解する必要があります。ありがたいことに、このようなPacker .JSONファイルを一般に提供する優(yōu)れたDevOpsの人々がたくさんいます。構(gòu)成プログラム
ビルダーがRackspaceおよびVirtualBoxのVMで畫像を起動すると、PackerはShellスクリプトで定義されたソフトウェアの構(gòu)成を開始します。 Packerを使用すると、Puppet、Chef、Ansibleなどのシステムを使用して、構(gòu)成を調(diào)整するために他の多くのシステムを使用することもできます。シェルスクリプトのみを使用し、これらのスクリプトを /scriptsディレクトリに見つけることができます。
これは、構(gòu)成ファイルの構(gòu)成部分です。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>「ファイル」構(gòu)成プログラムは、VMに構(gòu)成を追加する方法です。コンピューター上の構(gòu)成ファイルをVMの /TMPディレクトリにロードします。構(gòu)成プロセス中に、シェルスクリプトには、構(gòu)成ファイルをVMの正しい場所にコピーするコマンドがあります。 Nginxの「デフォルト」構(gòu)成ファイルや変更されたPHPなどのPHP.iniファイルがあります。 /transfer_filesフォルダーで使用しているファイルを見つけることができます。
また、上記の「オーバーライド」セクションにも気付くでしょう。これにより、パッカーは、各畫像ビルドに対してのみ特定のスクリプトを?qū)g行するように指示します。私たちの演習(xí)では、virtualboxイメージと「一貫した」にするために「openstack」畫像での処理を減らす必要があるため、Setup.shスクリプトのみを処理する必要があります。
最後に、コンフィ分後のプロセッサパーツがあります。
これは、浮浪者ボックスを?qū)g際に構(gòu)築する責(zé)任があります。
<code>cd PHP-Packer-Demo </code>
現(xiàn)在構(gòu)成しているものはすべて、鏡に「事前に焼かれている」ことを覚えておくことが重要です。 Packerは、この自動化で多くの時(shí)間を節(jié)約します!
構(gòu)築された畫像
PackerがJessie64.jsonファイルで構(gòu)成したすべてのソフトウェアを構(gòu)成した後、VMSを閉じて、これらのVMの新しい畫像を保存します。 Rackspace畫像の場合、Rackspace Managementコントロールパネルの保存された畫像セクションに新しい畫像があります。 VirtualBoxイメージの場合、現(xiàn)在のディレクトリに「jessie64.box」ファイルがあります。
それだけです。パッカーはその仕事をしました!
私は今何をすべきですか?
Rackspaceイメージを使用して新しいサーバーを作成できるようになりました。試してみてください。サーバーセクションに移動し、[サーバーの作成]を選択し、保存されたミラーに移動します。削除されたサーバーの下に、新しく保存された畫像が表示されるはずです。それを選択してサーバーを起動します。アクティブになったら、IPアドレスを指定してブラウザに入力できます。 nginxウェルカム畫面が表示されます。
VirtualBox畫像の場合、いくつかの作業(yè)にVagrantを使用する必要があります。今すぐ注意深く読んでください。これは非常に難しくなります!
virtualbox vm
を作成します Vagrantファイルを含むディレクトリに、次のコマンドを入力します。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>それだけです!わかりました、私たちはあなたのためにVagrantファイルを作成することであなたを助けます。利用可能なファイルを自分で作成するには、Vagrantの詳細(xì)について詳しく知る必要があります。前述のように、あなたが真剣な開発者であるならば、あなたはこれを?qū)Wぶべきです。
VirtualBoxのUIでVMとして新しい畫像を表示する必要があります。
上記の最初のコマンドは、新しいボックスをVagrantに追加するため、どこで使用するかを知っています。ボックスに「jessie64」と名付け、作成したばかりのボックスを使用します。 2番目のコマンドは、VirtualBoxで仮想マシンを作成して実行するようにVagrantに指示します。
また、ボックスの最初の起動には1分または2分しかかからないことに気付くでしょう。 Vagrantで構(gòu)成を続けると、10?20分かかります。これにより、時(shí)間を節(jié)約できます。
「Vagrant up」コマンドが完了したら、urlhttp://ipnx.cn/link/14e676072a5b15381b6f7f33c3528215
urlをブラウザーに入力します。両方のシステムでは、「Vagrant」ユーザーとパスワード「Vagrant」をSSH接続に使用することもできます。これらのサーバーは安全ではありません!
まだ完全には完成していません!もっと面白いことをしましょう。
次のステップを?qū)g行したときに、同様のことを何回行ったか想像してみてください。現(xiàn)在、ソフトウェアのインストールと構(gòu)成プロセスを自動化しています!
多くのSymfony開発作業(yè)を行ったと仮定しましょう。 Symfonyバージョンがインストールされ、自動的に準(zhǔn)備が整うように、進(jìn)んで畫像を設(shè)定しましょう。
開始する前に、Rackspaceでサーバーを削除します。 (私たちは不必要なお金を使いたくありません。)
また、コンソールでは、ロードしたVagrantボックスを終了して削除しましょう。次のコマンドを入力してください:
symfony(およびdemo)を楽しみます(またはそうではありませんか?)
繰り返しますが、Symfonyを使用することが多い開発チームがあると仮定しましょう。 Symfony対応サーバーを自動化しましょう。 Symfony Demoアプリケーションのみをロードしますが、この追加の作業(yè)により、Packerが自動化における開発とインフラストラクチャのオーケストレーションの取り組みをサポートする方法についての良いアイデアが得られるはずです。
<code>cd PHP-Packer-Demo </code>
/scriptsディレクトリに移動し、お?dú)荬巳毪辘违ē钎%咯`でsetup.shスクリプトを開き、次のシェルスクリプトコードを下部に追加します。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
上記のコードは、Symfony、PHP、およびNginxを適切にセットアップするために、基本的に行う必要があることです。
これらの構(gòu)成手順で何が起こるかを説明するために、コメントが追加されました。
上記のコードを追加して保存した後、Packerに再び重い仕事をさせましょう。
ファイルシステムの1つのレベルをJessie64.jsonファイルを持っている場所に移動し、以前に入力したコマンドを入力します。
<code>cd PHP-Packer-Demo </code>
他のビジネスを処理したり、コーヒーをもう1杯持ったりすることができます(またはトレッドミルを歩き回ることができます)。新しいSymfonyデモイメージを構(gòu)築するには時(shí)間がかかります。
完了したら、このような畫面が表示されるはずです。
畫像が構(gòu)築されて準(zhǔn)備が整ったので、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>同じコンテンツが表示されます。
かっこいいですよね?
結(jié)論:
私たちは過去を振り返り、それから現(xiàn)在に戻りました。うまくいけば、コンピューター仮想化の理由、VagrantやPackerなどのソフトウェアの作成、2つの間の接続を理解できるようになりました。
2つのサーバーを正常に作成すると、PackerがDevOpsメンバーおよび開発者として提供できる利點(diǎn)を想像することもできます。これらの利點(diǎn)には、以下が含まれますが、これらに限定されません
生産の一貫性 - 開発環(huán)境は、生産環(huán)境とほぼ同じです。
- 時(shí)間の節(jié)約 - ソフトウェアと構(gòu)成は畫像で「事前に焼き付けられている」ため、手動で追加する必要がなくなります。
- 環(huán)境テスト - 複製されたミラーは「完全」と見なされ、ヒューマンエラーを避けるためにテストすることができます。
- 環(huán)境バージョン化 - 環(huán)境を変更すると、GITを使用してさまざまなパッカービルドをバージョンできます。
- 「不変のアーキテクチャ」をサポートします - 既存のVM(これはエラーのソースである可能性がある)を構(gòu)築または変更する代わりに、VMインスタンスを「破壊」して新しいインスタンスを作成します。
- この記事と、パッカーと一緒に畫像を構(gòu)築するエクササイズを楽しんだことを願っています。以下のコメントで、パッカーに関するご意見をお聞かせください。
ハシコープのパッカーとは何ですか?また、PHP開発者にどのように利益をもたらしますか?
Hashicorpのパッカーは、あらゆる種類のマシン畫像の作成を自動化するオープンソースツールです。インフラストラクチャコードを作成してバージョン制御システムに保存できるようにすることにより、最新の構(gòu)成管理をサポートします。パッカーは、PHP開発者向けのゲームを変えるツールになることができます。これにより、同じ開発環(huán)境を作成することができ、「マシンでの実行」の問題を軽減できます。また、數(shù)時(shí)間や日ではなく數(shù)分で生産に展開できるすぐに使用できる畫像を作成することもできます。
パッカーは他の同様のツールとどのように比較されますか?
パッカーは、その汎用性と互換性を際立たせています。 AWS、DigitalOcean、Docker、Google Cloudなど、さまざまなプラットフォームをサポートしています。また、TerraformやVagrantなどの他のハシコープツールとうまく統(tǒng)合して、管理インフラストラクチャにシームレスなワークフローを提供します。
パッカーのインストール方法は?
パッカーは簡単にインストールできます。サポートされているすべてのプラットフォームとアーキテクチャのバイナリパッケージとして配布されます。 Packer Webサイトからシステムに合ったパッケージをダウンロードし、解凍し、パスに移動するだけです。
パッカーを使用してマシンイメージを作成する方法は?
パッカーを使用してマシン畫像を作成するには、JSON形式でテンプレートファイルを記述する必要があります。このファイルは、インストールするマシンとソフトウェアの種類を定義します。テンプレートの準(zhǔn)備ができたら、「パッカービルド」コマンドを使用して畫像を作成できます。
既存の構(gòu)成管理ツールでPackerを使用できますか?
はい、Packerはシェフ、人形、Ansibleなどの既存の構(gòu)成管理ツールとうまく連攜しています。これらのツールを使用して、Packerが作成したマシン畫像でソフトウェアを構(gòu)成できます。
パッカーは、畫像作成中にどのように障害を処理しますか?
パッカーには、強(qiáng)力なエラー処理メカニズムがあります。畫像作成中にエラーが発生した場合、パッカーは故障したときに畫像をマークし、作成されたすべてのリソースをクリーンアップします。これにより、半フィニッシュまたは一貫性のないミラーリングになりません。
継続的な統(tǒng)合/継続展開(CI/CD)パイプラインでPackerを使用できますか?
絶対に。パッカーは、CI/CDパイプラインに最適です。ビルドプロセス中に使用してマシン畫像を作成し、これらの畫像を生産環(huán)境に展開できます。パッカーで問題をデバッグする方法は?
Packerは、問題をデバッグするのに役立つ詳細(xì)なログを提供します。また、畫像作成中にデバッグモードがより詳細(xì)な出力を取得できるようにすることもできます。
パッカープロジェクトにコードを寄付できますか?
はい、パッカーはコミュニティの貢獻(xiàn)を歓迎するオープンソースプロジェクトです。エラーを報(bào)告したり、機(jī)能を提案したり、ドキュメントを改善したり、プルリクエストを送信したりすることで、コードを貢獻(xiàn)できます。
パッカーを?qū)Wぶためのリソースはどこで見つけることができますか?
Packerの公式WebサイトとGitHubリポジトリは、學(xué)習(xí)を開始するのに最適な場所です。包括的なドキュメント、チュートリアル、および例を提供します。また、インターネット上のパッカーに関する多くのブログ投稿、ビデオ、オンラインコースを見つけることもできます。
以上がHashicorp&#x27; s Packer-それはPHP開発者にとって何かですか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範(fàn)囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ?、外部変?shù)を変更する場合は、參照を渡す必要があります。これらのルールを習(xí)得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機(jī)能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時(shí)的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお勧めします。 2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時(shí)にネストを避ける必要があります。

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強(qiáng)調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進(jìn)します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

PHPでは、四角い括弧または巻き毛裝具を使用して文字列固有のインデックス文字を取得できますが、正方形のブラケットをお勧めします。インデックスは0から始まり、範(fàn)囲外のアクセスはnull値を返し、値を割り當(dāng)てることができません。 MB_SUBSTRは、マルチバイト文字を処理するために必要です。例:$ str = "hello"; echo $ str [0];出力h; MB_Substr($ str、1,1)などの漢字は、正しい結(jié)果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関數(shù)を均一に使用することをお勧めします。

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech
