亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
設(shè)置你的計算機(jī)以運(yùn)行Packer
構(gòu)建器
配置程序
已構(gòu)建的鏡像
現(xiàn)在怎麼辦?
創(chuàng)建Virtualbox VM
我們還沒有完全完成!
為了好玩(或者不是?)安裝Symfony(和演示)
結(jié)論:
關(guān)於HashiCorp的Packer的常見問題解答(FAQ),面向PHP開發(fā)者
什麼是HashiCorp的Packer,它如何使PHP開發(fā)者受益?
Packer與其他類似工具相比如何?
如何安裝Packer?
如何使用Packer創(chuàng)建機(jī)器鏡像?
我可以將Packer與我現(xiàn)有的配置管理工具一起使用嗎?
Packer如何在鏡像創(chuàng)建過程中處理故障?
我可以在持續(xù)集成/持續(xù)部署(CI/CD)管道中使用Packer嗎?
如何調(diào)試Packer中的問題?
我可以為Packer項目貢獻(xiàn)代碼嗎?
在哪裡可以找到更多學(xué)習(xí)Packer的資源?
首頁 後端開發(fā) php教程 Hashicorp的Packer-是PHP開發(fā)人員的東西嗎?

Hashicorp的Packer-是PHP開發(fā)人員的東西嗎?

Feb 10, 2025 pm 04:02 PM

Packer:PHP開發(fā)者工具箱裡的利器?這取決於你!

Hashicorp's Packer - Is It Something for PHP Developers?

Hashicorp's Packer - Is It Something for PHP Developers?

簡而言之:作為PHP開發(fā)者,Packer是否是你工具箱中必不可少的工具?答案取決於你的工作內(nèi)容。

如果你大量參與服務(wù)器端工作(為客戶或公司),同時進(jìn)行開發(fā)工作,那麼答案是肯定的。 Packer能極大地幫助你。

但如果你僅僅是開發(fā)者,很少直接處理服務(wù)器端工作,那麼Packer對你幫助不大。

即便如此,學(xué)習(xí)創(chuàng)建服務(wù)器環(huán)境的基礎(chǔ)知識對任何PHP開發(fā)者都大有裨益。你的職業(yè)生涯中或多或少會遇到這些技術(shù)(你創(chuàng)建的一切都運(yùn)行在這些技術(shù)之上!)。掌握這些專業(yè)知識無疑會提升你的職業(yè)發(fā)展前景!至少,你會更好地理解DevOps同事的工作。

如果你對此感興趣,或者你經(jīng)常進(jìn)行手動服務(wù)器端工作,請繼續(xù)閱讀。

Hashicorp's Packer - Is It Something for PHP Developers?

關(guān)鍵要點(diǎn):

  • Packer的適用性:對於既參與服務(wù)器管理又進(jìn)行開發(fā)任務(wù)的PHP開發(fā)者來說,Packer尤其有用,它有助於簡化一致性服務(wù)器環(huán)境的創(chuàng)建。
  • 開發(fā)自主性:現(xiàn)代計算技術(shù)的進(jìn)步使開發(fā)者能夠直接在個人設(shè)備上管理複雜的開發(fā)環(huán)境,從而提高自主性,增強(qiáng)開發(fā)與生產(chǎn)環(huán)境的一致性。
  • 與Vagrant的集成:Packer和Vagrant都能增強(qiáng)開發(fā)環(huán)境,但Packer獨(dú)有的功能是自動化創(chuàng)建可在各種平臺上使用的機(jī)器鏡像,從而節(jié)省環(huán)境設(shè)置時間。
  • DevOps協(xié)作:Packer為DevOps專業(yè)人員提供工具,以便為開發(fā)團(tuán)隊提供與生產(chǎn)環(huán)境一致的環(huán)境,簡化開發(fā)流程並減少設(shè)置錯誤。
  • 實(shí)踐操作:本文提供了一個關(guān)於設(shè)置Packer並使用它創(chuàng)建虛擬機(jī)鏡像的實(shí)用教程,演示了Packer高效處理複雜配置任務(wù)的能力。
  • 未來發(fā)展:學(xué)習(xí)使用Packer等工具不僅能滿足當(dāng)前項目需求,還能為開發(fā)者在未來與不同團(tuán)隊的技術(shù)集成和協(xié)作做好準(zhǔn)備。

回顧過去:

簡而言之#2:如果你精通Vagrant並理解其作為工具的目的,請?zhí)奖疚牡倪@一部分。

僅僅十年前,PHP應(yīng)用程序的開發(fā)基本上是這樣的:開發(fā)者通過FTP將一些代碼上傳到Web服務(wù)器上,然後查看是否有效。如果無效,他們會進(jìn)行故障排除,在某個文本編輯器中進(jìn)行更改,再次通過FTP重新加載受影響的文件,然後查看更改是否解決了問題。如果是這樣,他們就會繼續(xù)下一個功能或問題,重複這個過程(並祈禱他們剛剛完成的工作不會出錯)。他們也可能進(jìn)行一些FTP同步。

這是當(dāng)時平均水平的獨(dú)立PHP開發(fā)者將代碼推送到開發(fā)服務(wù)器(或者更糟糕的是,直接推送到生產(chǎn)服務(wù)器)的工作流程(實(shí)際上,如今一些開發(fā)者仍然使用相同的流程)。當(dāng)時,構(gòu)建Web服務(wù)器本身通常是其他人的工作。

此外,在那個不太遙遠(yuǎn)的過去,為了讓開發(fā)團(tuán)隊協(xié)同工作,可能存在某種形式的並發(fā)版本控制系統(tǒng),並且團(tuán)隊甚至可能設(shè)置了自動部署。當(dāng)更改提交到存儲庫時,它會自動部署到暫存或生產(chǎn)系統(tǒng)。這種情況實(shí)際上是當(dāng)時Web應(yīng)用程序開發(fā)的最佳技術(shù)。

在那些美好的舊時光裡,持續(xù)集成、虛擬機(jī)、雲(yún)計算、基礎(chǔ)設(shè)施編排、數(shù)據(jù)中心自動化,甚至“DevOps”這個術(shù)語基本上都是未知的。它們才剛剛誕生。亞馬遜才剛剛開始他們的網(wǎng)絡(luò)服務(wù)業(yè)務(wù)。記住,這僅僅是十年前的事!

啊,當(dāng)時的時光是多麼簡單,對吧?

不,並非如此。當(dāng)時,開發(fā)速度更慢、更繁瑣,而且更容易出錯。服務(wù)器也總是需要“啟用”進(jìn)行測試,這通常意味著開發(fā)者必須等到“網(wǎng)絡(luò)人員”準(zhǔn)備好一個服務(wù)器才能使用,比如最新的PHP版本。在很多情況下,這往往是一場爭鬥,而對於“網(wǎng)絡(luò)人員”來說,保持服務(wù)器“正常運(yùn)行”就像滅火一樣。

Hashicorp's Packer - Is It Something for PHP Developers?

今天的計算和虛擬化:

如今,隨著計算機(jī)技術(shù)觸手可及,開發(fā)者可以隨身攜帶更複雜的開發(fā)基礎(chǔ)設(shè)施。今天筆記本電腦或PC的計算能力遠(yuǎn)遠(yuǎn)超過十年前Web服務(wù)器上的計算能力。

事實(shí)上,我們今天擁有的許多智能手機(jī)都比十年前的服務(wù)器更強(qiáng)大。

Hashicorp's Packer - Is It Something for PHP Developers?

科技真是令人驚嘆,不是嗎?

由於可用的計算能力不斷增長,越來越多的人開始意識到,這種計算能力可以分解成單獨(dú)的“機(jī)器”。這使得它們能夠同時執(zhí)行完全不同的操作。更重要的是,可以更好地利用計算能力,從而節(jié)省資源。這些是計算能力虛擬化的主要驅(qū)動力。

換句話說,如今,憑藉創(chuàng)建虛擬機(jī)的能力,開發(fā)者可以隨身攜帶自己的開發(fā)環(huán)境,不再受限於必須為他們提供適當(dāng)工作環(huán)境的其他人員。更重要的是,他們可以在本地構(gòu)建一個完整的開發(fā)環(huán)境,模擬一個完整的Web服務(wù)器。

這不僅使開發(fā)者更加自主,這種本地開發(fā)環(huán)境還有另一個巨大優(yōu)勢:它被稱為“開發(fā)-生產(chǎn)一致性”——我們在新手友好的《Jump Start PHP Environment》一書中對此進(jìn)行了詳細(xì)討論。開發(fā)-生產(chǎn)一致性基本上意味著開發(fā)者可以在與應(yīng)用程序最終部署到生產(chǎn)環(huán)境中幾乎相同的系統(tǒng)上進(jìn)行開發(fā)。

Hashicorp's Packer - Is It Something for PHP Developers?

生產(chǎn)一致性優(yōu)勢——它允許開發(fā)者編寫更高質(zhì)量的代碼,因?yàn)樗麄兛梢缘谝淮尉鸵哉_的方式做正確的事情。

如今,開發(fā)者可以在自己的背包裡擁有開發(fā)高度複雜應(yīng)用程序所需的一切,包括高度複雜的開發(fā)環(huán)境。

顯然,這種能力也帶來了複雜性。虛擬服務(wù)器必須構(gòu)建,軟件必須安裝和配置。所有這些都可能非常耗時,而時間就是金錢。這也意味著開發(fā)者可能需要學(xué)習(xí)很多東西才能運(yùn)行這樣的環(huán)境。這也很耗時。

Vagrant的出現(xiàn):

為了幫助開發(fā)者完成開發(fā)環(huán)境的“構(gòu)建”,HashiCorp Inc. 推出了名為Vagrant的程序。使用Vagrant,開發(fā)環(huán)境配置是代碼,可以輕鬆地共享、回滾和前滾。開發(fā)者可以自由地嘗試新事物,例如最新版本的PHP,而無需擔(dān)心服務(wù)器可能需要數(shù)小時才能設(shè)置,或者故障需要數(shù)小時才能解決。開發(fā)者不必等待任何人創(chuàng)建此環(huán)境,如果環(huán)境完全崩潰,他們也不會打擾任何人。

更多關(guān)於Vagrant的信息——重新介紹Vagrant:使用PHP的正確方法

但是,仍然還有一個問題需要解決。 Vagrant雖然非常適合構(gòu)建開發(fā)環(huán)境,但運(yùn)行起來相當(dāng)耗時,尤其是在大量配置(更多關(guān)於配置的信息見下文)的情況下。根據(jù)所涉及的軟件,構(gòu)建一個box和配置軟件可能需要2到20分鐘不等。

這種時間消耗還加劇了這樣一個事實(shí):Vagrant一次只能為單個虛擬化系統(tǒng)(稱為“提供程序”)構(gòu)建單個box。例如,如果你想在本地構(gòu)建你的環(huán)境,並在AWS上構(gòu)建一個環(huán)境,你必須創(chuàng)建兩個不同的Vagrant文件並分別運(yùn)行它們。這實(shí)際上並不實(shí)用。簡而言之,Vagrant非常擅長構(gòu)建單個開發(fā)環(huán)境,僅此而已。

Packer的出現(xiàn):

為了繼續(xù)進(jìn)行,你現(xiàn)在必須更多地扮演DevOps角色。 Packer將創(chuàng)建虛擬化機(jī)器鏡像的任務(wù)放入相對簡單的中央配置中,因此你可以獲得Vagrant在自動化開發(fā)環(huán)境方面相同的優(yōu)勢,但現(xiàn)在也可以用於開發(fā)基本鏡像。

虛擬機(jī)鏡像也稱為虛擬設(shè)備。它是虛擬機(jī)的預(yù)構(gòu)建副本,可用於創(chuàng)建新的虛擬機(jī)。在Vagrant術(shù)語中,這些鏡像稱為“box”。

如果你了解創(chuàng)建自己的鏡像的過程,你會知道手動操作非常麻煩。如果你不知道,你很幸運(yùn),因?yàn)槟憧梢蕴^手動構(gòu)建它們的麻煩,現(xiàn)在就可以開始使用Packer了。但是,你仍然需要學(xué)習(xí)一些鏡像/服務(wù)器構(gòu)建的基礎(chǔ)知識。同樣,這對開發(fā)者來說是有價值的知識,任何開發(fā)者都應(yīng)該花時間學(xué)習(xí)基礎(chǔ)知識。

一旦你開始使用Packer,並且你已經(jīng)在使用Vagrant,你首先會想到的問題是,“Packer和Vagrant到底有什麼區(qū)別?”我們在上面已經(jīng)開始討論了一些區(qū)別。最終,Packer創(chuàng)建鏡像,Vagrant可以使用這些鏡像來構(gòu)建開發(fā)環(huán)境。如果你之前使用過HashiCorp的Vagrant box,很可能它也是用Packer構(gòu)建的。

作為使用Packer的DevOps人員,你可以為開發(fā)團(tuán)隊提供生產(chǎn)環(huán)境的鏡像,他們可以輕鬆地使用這些鏡像進(jìn)行開發(fā)。這再次支持了開發(fā)-生產(chǎn)一致性,並簡化了開發(fā)流程。

我們之前提到了節(jié)省時間。 Packer還可以並行構(gòu)建和部署這些鏡像。因此,你可以幾乎同時為不同的主機(jī)、你的私有云和Vagrant構(gòu)建鏡像。此外,這些“預(yù)烘焙”的鏡像啟動速度比Vagrant中配置的box快得多??斓枚?!如果你的團(tuán)隊一直在“啟用”和銷毀box,那麼使用Packer創(chuàng)建的預(yù)烘焙軟件和配置的鏡像將為你的團(tuán)隊節(jié)省大量時間。

Packer流程也使創(chuàng)建基本鏡像具有可重複性。這意味著你的生產(chǎn)系統(tǒng)具有更高的質(zhì)量,因?yàn)閂M的鏡像重建可以在前面進(jìn)行測試和自動化。換句話說,Packer有助於減少人為錯誤。

在構(gòu)建鏡像時,還可以控制幾個子流程。我們稍後會討論它們。你還可以閱讀Packer文檔中關(guān)於Packer概念和特性的更多信息。請注意,你可以為許多不同的平臺構(gòu)建鏡像。你還可以使用許多配置程序(如Chef、Puppet、Ansible)或Shell腳本配置軟件。而且,你可以進(jìn)行後處理,例如創(chuàng)建Vagrant box或?qū)㈢R像推送到Docker註冊表(以及更多其他操作)。

哇……理論太多了,不是嗎?

讓我們做一些實(shí)際操作,以幫助闡明Packer的概念以及如何使用它。

一些Packer工作流程:

這是我們將要完成的工作的可視化表示。

Hashicorp's Packer - Is It Something for PHP Developers?

雖然Packer不需要Vagrant來創(chuàng)建鏡像,但在上面的圖形中添加了Vagrant,以便讓你更好地理解它在“管道”中的位置。

為了讓你開始學(xué)習(xí)Packer的基礎(chǔ)知識,以下練習(xí)的目標(biāo)是創(chuàng)建一個能夠在Rackspace上運(yùn)行的鏡像和一個Virtualbox“box”文件。目標(biāo)是向你展示你可以生成相同的鏡像和配置來進(jìn)行開發(fā),並在你的(理論上的)生產(chǎn)服務(wù)器上使用。

我們使用Rackspace是因?yàn)樗幸粋€非常簡單的後端用於管理計算基礎(chǔ)設(shè)施,並且因?yàn)樗褂肙penstack,這是一個用於基礎(chǔ)設(shè)施管理的標(biāo)準(zhǔn)系統(tǒng)。

我們還使用Virtualbox,因?yàn)樗且粋€免費(fèi)且廣泛使用的本地虛擬化系統(tǒng)。如果你願意,可以使用其他系統(tǒng),如AWS和VMWare,但是,你需要修改本教程中提供的材料,因?yàn)樗鼈兪菍iT為這兩個系統(tǒng)製作的。

請注意:我們在本文中構(gòu)建的虛擬服務(wù)器絕不是“生產(chǎn)就緒”的。它們僅用於演示目的。

我們將使用Packer構(gòu)建的初始鏡像將是一個Debian Jessie(64位)鏡像,預(yù)裝了Nginx和PHP7。

要求:在開始之前,你需要在你的計算機(jī)上安裝Vagrant和虛擬化軟件Virtualbox(版本5.0 )。你還需要一臺64位計算機(jī)。如果你使用的是Windows系統(tǒng),你還應(yīng)該安裝Git for Windows,以便我們可以使用它的bash控制臺。

正如我上面提到的,我們在本教程中使用Rackspace,因此你需要在那裡創(chuàng)建一個帳戶。設(shè)置一個帳戶相對快速且容易。

你還需要一個相對快速的互聯(lián)網(wǎng)連接,因?yàn)閂irtualbox構(gòu)建的鏡像下載非常大(大約250MB)。最後,你需要在你的計算機(jī)上大約有12GB的可用磁盤空間才能完成整個過程。

本文還假設(shè)你了解一些使用Vagrant、SSH和Shell命令的基礎(chǔ)知識,並且對Linux和虛擬機(jī)有一些基本的了解。

設(shè)置你的計算機(jī)以運(yùn)行Packer

請按照說明在你的計算機(jī)上安裝Packer。

在撰寫本文時,Packer 0.11.0剛剛發(fā)布。

安裝完成後,在你的(git bash)控制臺中輸入packer。你應(yīng)該會看到類似這樣的內(nèi)容。

Hashicorp's Packer - Is It Something for PHP Developers?

現(xiàn)在,我們將轉(zhuǎn)到Rackspace並啟動一個服務(wù)器,然後創(chuàng)建一個基本鏡像。注意:如果你有AWS或其他Packer支持作為構(gòu)建器平臺的雲(yún)計算主機(jī),你需要採取的步驟將類似。我們在本教程中介紹Rackspace。另請注意,創(chuàng)建服務(wù)器會向你的主機(jī)帳戶收取一些費(fèi)用。但是,金額會很小。按照本教程操作的費(fèi)用不應(yīng)超過一美元。

繼續(xù)構(gòu)建一個Jessie 8服務(wù)器,並將其命名為“Packer Test”。 Rackspace非常直觀易懂。啟動一個1GB的服務(wù)器來從中創(chuàng)建鏡像。

Hashicorp's Packer - Is It Something for PHP Developers?

服務(wù)器處於活動狀態(tài)後,創(chuàng)建新創(chuàng)建服務(wù)器的鏡像(右上角的“操作”按鈕)。創(chuàng)建並保存鏡像後,你可以刪除服務(wù)器。

轉(zhuǎn)到“服務(wù)器->鏡像”,你應(yīng)該會看到你的新鏡像。點(diǎn)擊它以轉(zhuǎn)到鏡像的詳細(xì)信息頁面。我們將需要鏡像ID。

Hashicorp's Packer - Is It Something for PHP Developers?

好了?,F(xiàn)在你已經(jīng)準(zhǔn)備好在Rackspace上使用的基本鏡像了,我們將開始構(gòu)建我們自己的鏡像。這個過程實(shí)際上相當(dāng)複雜,特別是對於那些只對服務(wù)器環(huán)境和Packer了解有限的人來說。因此,為了提供一些幫助,我們?yōu)槟銊?chuàng)建了一個演示Packer倉庫供你下載。請從你的(Git bash)控制臺中克隆此倉庫。

<code>git clone https://github.com/smolinari/PHP-Packer-Demo
</code>

移動到新創(chuàng)建的“PHP-Packer-Demo”目錄中。

<code>cd PHP-Packer-Demo
</code>

使用你喜歡的編輯器打開jessie64.json文件,然後輸入你的Rackspace用戶憑據(jù)和鏡像ID。

Hashicorp's Packer - Is It Something for PHP Developers?

快速旁注:你也可以添加你的Rackspace API密鑰而不是你的密碼。如果你真的開始使用Packer,你還可以將訪問憑據(jù)移動到單獨(dú)的文件中,並使用Git忽略它們。但是,這樣做超出了本文的範(fàn)圍。

jessie64.json文件是Packer的核心。這是控制Packer執(zhí)行操作的配置文件。它類似於Vagrant中使用的Vagrantfile(我們也在下載中為你提供了Vagrantfile)。

現(xiàn)在使用以下命令運(yùn)行Packer。

<code>packer build jessie64.json</code>

此構(gòu)建過程需要幾分鐘。由於我們正在進(jìn)行教程,讓我們在等待它完成的同時,實(shí)際了解Packer內(nèi)部發(fā)生的情況。此過程不應(yīng)超過大約30分鐘,或者控制臺中的輸出不應(yīng)停止超過10分鐘。如果確實(shí)如此,則說明出現(xiàn)錯誤。

Hashicorp's Packer - Is It Something for PHP Developers?

構(gòu)建器

首先,Packer使用我們定義的基本鏡像啟動構(gòu)建過程。這些鏡像作為服務(wù)器本身啟動,我們也在jessie64.json文件中定義了這些服務(wù)器。你可以在jessie64.json文件頂部找到“構(gòu)建器”的特定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>

構(gòu)建器負(fù)責(zé)使你想要的鏡像與你所針對的環(huán)境兼容。例如,使用AWS AMI,你實(shí)際上可以構(gòu)建你的Virtualbox鏡像以用於Vagrant和AWS。

在我們的練習(xí)中,我們正在組合“openstack”和“virtualbox-iso”鏡像。不幸的是,Packer無法使用openstack鏡像來構(gòu)建Virtualbox鏡像,因此我們還創(chuàng)建了virtualbox鏡像。

你會注意到上面JSON代碼中的“boot_command”部分。在這裡,我們實(shí)際上是在自動化輸入必要的命令,以便在Virtualbox VM中安裝Debian Jessie 8作為操作系統(tǒng)。如果你願意,你甚至可以在Packer進(jìn)行構(gòu)建時,在Virtualbox中觀看安裝過程。

當(dāng)然,這裡發(fā)生了很多“魔法”,你必須真正了解Linux安裝的內(nèi)部機(jī)制和Packer的內(nèi)部機(jī)制才能手動組合這樣的Virtualbox鏡像。謝天謝地,有很多優(yōu)秀的DevOps人員將這樣的Packer .json文件提供給大眾使用。

配置程序

一旦構(gòu)建器在Rackspace和Virtualbox中啟動了VM中的鏡像,Packer將開始配置在shell腳本中定義的軟件。使用Packer,你還可以使用Puppet、Chef或Ansible等系統(tǒng)以及許多其他系統(tǒng)來編排配置。我們只使用Shell腳本,你可以在/scripts目錄中找到這些腳本。

這是我們配置文件中的配置部分。

<code>git clone https://github.com/smolinari/PHP-Packer-Demo
</code>

“file”配置程序是我們?nèi)绾螌⑴渲锰砑拥絍M中的方法。它將我們的計算機(jī)上的配置文件加載到VM上的/tmp目錄中。在配置過程中,shell腳本中有一些命令會將配置文件複製到VM上的正確位置。我們有像Nginx的“默認(rèn)”配置文件或修改後的PHP的php.ini文件。你可以在/transfer_files文件夾中找到我們使用的文件。

你還會注意到上面的“override”部分。這告訴Packer只為每個鏡像構(gòu)建運(yùn)行某些腳本。在我們的練習(xí)中,我們需要對“openstack”鏡像進(jìn)行較少的處理才能使其與Virtualbox鏡像“一致”,因此只處理setup.sh腳本。

最後,是後配置處理器部分。

<code>cd PHP-Packer-Demo
</code>

這負(fù)責(zé)實(shí)際構(gòu)建Vagrant box。

重要的是要記住,我們現(xiàn)在配置的所有內(nèi)容都“預(yù)烘焙”到鏡像中。 Packer通過這種自動化節(jié)省了我們(或我們的開發(fā)團(tuán)隊)大量時間!

已構(gòu)建的鏡像

在Packer配置完我們在jessie64.json文件中配置的所有軟件後,它將關(guān)閉VM並存儲這些VM的新鏡像。對於Rackspace鏡像,你將在Rackspace管理控制面板的“已保存鏡像”部分找到新鏡像。對於Virtualbox鏡像,你將在當(dāng)前目錄中找到一個“jessie64.box”文件。

就是這樣。 Packer已經(jīng)完成了它的工作!

現(xiàn)在怎麼辦?

你現(xiàn)在可以使用Rackspace鏡像來創(chuàng)建新的服務(wù)器。試試看。轉(zhuǎn)到“服務(wù)器”部分並選擇“創(chuàng)建服務(wù)器”,然後轉(zhuǎn)到“已保存鏡像”。你應(yīng)該會在“已刪除服務(wù)器”下看到你新保存的鏡像。選擇它並啟動服務(wù)器。一旦它處於活動狀態(tài),你就可以獲取給你的IP地址並將其輸入到你的瀏覽器中。你應(yīng)該會看到Nginx歡迎屏幕。

Hashicorp's Packer - Is It Something for PHP Developers?

對於Virtualbox鏡像,我們還需要使用Vagrant進(jìn)行一些工作?,F(xiàn)在仔細(xì)閱讀。這將變得非常困難!

創(chuàng)建Virtualbox VM

在包含Vagrant文件的目錄中,輸入以下命令。

<code>git clone https://github.com/smolinari/PHP-Packer-Demo
</code>

就是這樣!好的,我們通過為你創(chuàng)建Vagrant文件來幫助你。你需要學(xué)習(xí)更多關(guān)於Vagrant的知識,才能自己創(chuàng)建一個可用的文件。如前所述,如果你是一個認(rèn)真的開發(fā)者,你應(yīng)該學(xué)習(xí)這一點(diǎn)。

你現(xiàn)在應(yīng)該在Virtualbox的UI中看到新的鏡像作為VM。

上面的第一個命令將新box添加到Vagrant中,因此它知道從哪裡使用它。我們?yōu)閎ox命名為“jessie64”,並使用我們剛剛創(chuàng)建的box。第二個命令告訴Vagrant在Virtualbox中創(chuàng)建虛擬機(jī)並運(yùn)行它。

你還會注意到,box的初始啟動只需要一兩分鐘。如果我們一直在Vagrant中進(jìn)行配置,則需要10到20分鐘。這再次節(jié)省了時間。

一旦“vagrant up”命令完成,請在瀏覽器中輸入URL http://ipnx.cn/link/14e676072a5b15381b6f7f33c3528215。

在這兩個系統(tǒng)中,你還可以使用“vagrant”用戶和密碼“vagrant”進(jìn)行SSH連接。這些服務(wù)器是不安全的!

我們還沒有完全完成!

讓我們做一些更有趣的事情。

當(dāng)你執(zhí)行下一步時,想像一下你做過多少次類似的事情。我們現(xiàn)在正在自動化軟件安裝和配置的過程!

讓我們假設(shè)我們做了很多Symfony開發(fā)工作。讓我們繼續(xù)設(shè)置我們的鏡像,以便自動安裝並準(zhǔn)備好Symfony的版本。

在開始之前,請刪除Rackspace上的服務(wù)器。 (我們不想花費(fèi)任何不必要的錢。)

此外,在你的控制臺中,讓我們終止並刪除我們剛剛加載的Vagrant box。輸入以下命令:

<code>cd PHP-Packer-Demo
</code>

為了好玩(或者不是?)安裝Symfony(和演示)

再次,讓我們假設(shè)我們有一個開發(fā)團(tuán)隊,他們經(jīng)常使用Symfony。讓我們自動化設(shè)置一個支持Symfony的服務(wù)器。我們只加載Symfony演示應(yīng)用程序,但這項額外的工作應(yīng)該讓你很好地了解Packer如何在自動化方面幫助支持開發(fā)和基礎(chǔ)設(shè)施編排工作。

進(jìn)入/scripts目錄,使用你喜歡的編輯器打開setup.sh腳本,並將以下Shell腳本代碼添加到底部。

<code>git clone https://github.com/smolinari/PHP-Packer-Demo
</code>

上面的代碼基本上是我們需要做的,以便正確設(shè)置Symfony、PHP和Nginx。

已添加註釋以解釋在這些配置步驟中將發(fā)生什麼。

添加並保存上述代碼後,讓我們再次讓Packer完成繁重的工作。

在文件系統(tǒng)中向上移動一級到我們有jessie64.json文件的位置,並輸入我們之前輸入的命令。

<code>cd PHP-Packer-Demo
</code>

你現(xiàn)在可以處理其他事務(wù)或喝另一杯咖啡(或者在跑步機(jī)上走走)。構(gòu)建新的Symfony演示鏡像需要一段時間。

完成後,你應(yīng)該會看到類似這樣的屏幕。

Hashicorp's Packer - Is It Something for PHP Developers?

現(xiàn)在鏡像已經(jīng)構(gòu)建並準(zhǔn)備好了,我們可以再次在Rackspace上將openstack鏡像啟動為新的服務(wù)器。

對於你的Virtualbox VM,再次輸入上面“創(chuàng)建Virtualbox VM”下提到的兩個命令。

對於Rackspace服務(wù)器,你將獲得一個新的IP。輸入

<code>packer build jessie64.json</code>

你應(yīng)該會看到Symfony演示應(yīng)用程序正在運(yùn)行。

在你的本地VM上,你可以輸入以下內(nèi)容:

<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>

你將看到相同的內(nèi)容。

很酷,對吧?

結(jié)論:

我們回顧了往昔,然後回到了現(xiàn)在。希望我們讓你理解了計算機(jī)虛擬化的原因,以及Vagrant和Packer等軟件的創(chuàng)建,以及兩者之間的聯(lián)繫。

如果你成功地創(chuàng)建了兩個服務(wù)器,那麼你也可以想像Packer可以作為DevOps成員和開發(fā)者為你提供的優(yōu)勢。這些優(yōu)勢包括但不限於:

  • 生產(chǎn)一致性——開發(fā)環(huán)境與生產(chǎn)環(huán)境幾乎完全相同。
  • 節(jié)省時間——鏡像中“預(yù)烘焙”了軟件和配置,你不再需要手動添加。
  • 環(huán)境測試——完成的鏡像可以被認(rèn)為是“完整的”並經(jīng)過測試,避免人為錯誤。
  • 環(huán)境版本控制——當(dāng)你更改環(huán)境時,可以使用Git對不同的Packer構(gòu)建進(jìn)行版本控制。
  • 支持“不可變架構(gòu)”——與其構(gòu)建或修改現(xiàn)有的VM(這可能是錯誤的來源),不如簡單地“銷毀”VM實(shí)例並創(chuàng)建新的實(shí)例。

希望你喜歡這篇文章和使用Packer構(gòu)建鏡像的練習(xí)。請在下面的評論中告訴我們你對Packer的看法。

關(guān)於HashiCorp的Packer的常見問題解答(FAQ),面向PHP開發(fā)者

什麼是HashiCorp的Packer,它如何使PHP開發(fā)者受益?

HashiCorp的Packer是一個開源工具,可以自動化創(chuàng)建任何類型的機(jī)器鏡像。它通過允許你編寫基礎(chǔ)設(shè)施代碼並將其保存在版本控制系統(tǒng)中來支持現(xiàn)代配置管理。對於PHP開發(fā)者來說,Packer可能是一個改變遊戲規(guī)則的工具。它允許你創(chuàng)建相同的開發(fā)環(huán)境,從而減少“在我的機(jī)器上可以運(yùn)行”的問題。它還使你能夠創(chuàng)建隨時可用的鏡像,可以在幾分鐘內(nèi)(而不是幾小時或幾天)部署到生產(chǎn)環(huán)境中。

Packer與其他類似工具相比如何?

Packer因其多功能性和兼容性而脫穎而出。它支持多種平臺,包括AWS、DigitalOcean、Docker、Google Cloud等等。它還可以很好地與其他HashiCorp工具(如Terraform和Vagrant)集成,為管理基礎(chǔ)設(shè)施提供無縫的工作流程。

如何安裝Packer?

Packer易於安裝。它作為所有受支持平臺和架構(gòu)的二進(jìn)制包分發(fā)。你只需要從Packer網(wǎng)站下載適合你係統(tǒng)的包,解壓縮它,然後將其移動到你的PATH中即可。

如何使用Packer創(chuàng)建機(jī)器鏡像?

要使用Packer創(chuàng)建機(jī)器鏡像,你需要使用JSON格式編寫模板文件。此文件定義了要安裝的機(jī)器和軟件的類型。模板準(zhǔn)備就緒後,可以使用“packer build”命令創(chuàng)建鏡像。

我可以將Packer與我現(xiàn)有的配置管理工具一起使用嗎?

是的,Packer可以很好地與Chef、Puppet、Ansible等現(xiàn)有的配置管理工具一起使用。你可以使用這些工具在Packer創(chuàng)建的機(jī)器鏡像上配置軟件。

Packer如何在鏡像創(chuàng)建過程中處理故障?

Packer具有強(qiáng)大的錯誤處理機(jī)制。如果在鏡像創(chuàng)建過程中發(fā)生錯誤,Packer會將鏡像標(biāo)記為失敗,並清理所有已創(chuàng)建的資源。這確保你不會最終得到半成品或不一致的鏡像。

我可以在持續(xù)集成/持續(xù)部署(CI/CD)管道中使用Packer嗎?

絕對可以。 Packer非常適合CI/CD管道。你可以在構(gòu)建過程中使用它來創(chuàng)建機(jī)器鏡像,然後將這些鏡像部署到你的生產(chǎn)環(huán)境中。

如何調(diào)試Packer中的問題?

Packer提供詳細(xì)的日誌,可以幫助你調(diào)試問題。你還可以啟用調(diào)試模式,以便在鏡像創(chuàng)建過程中獲得更詳細(xì)的輸出。

我可以為Packer項目貢獻(xiàn)代碼嗎?

是的,Packer是一個開源項目,歡迎社區(qū)貢獻(xiàn)。你可以通過報告錯誤、建議功能、改進(jìn)文檔或提交拉取請求來貢獻(xiàn)代碼。

在哪裡可以找到更多學(xué)習(xí)Packer的資源?

Packer的官方網(wǎng)站和GitHub存儲庫是開始學(xué)習(xí)的好地方。它們提供了全面的文檔、教程和示例。你還可以從互聯(lián)網(wǎng)上找到許多關(guān)於Packer的博客文章、視頻和在線課程。

以上是Hashicorp的Packer-是PHP開發(fā)人員的東西嗎?的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量範(fàn)圍解釋了 PHP變量範(fàn)圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內(nèi)部無法訪問全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次並在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助於避免錯誤並提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗(yàn)證來源與類型、控製文件名與路徑、設(shè)置服務(wù)器限制並二次處理媒體文件。 1.驗(yàn)證上傳來源通過token防止CSRF並通過finfo_file檢測真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串並根據(jù)檢測類型決定擴(kuò)展名存儲至非Web目錄;3.PHP配置限制上傳大小及臨時目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

發(fā)電機(jī)如何在PHP中工作? 發(fā)電機(jī)如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關(guān)鍵在於明確目的與規(guī)範(fàn),註釋應(yīng)解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統(tǒng)一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背後的原因,如說明為何需手動輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項與問題,便於後續(xù)追蹤與協(xié)作。好的註釋能降低溝通成本,提升代碼維護(hù)效率。

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號或花括號,但推薦方括號;索引從0開始,超出範(fàn)圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長度,動態(tài)字符串需驗(yàn)證有效性,多語言項目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易於效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles