Packer:PHP開發者工具箱裡的利器?這取決於你!
簡而言之:作為PHP開發者,Packer是否是你工具箱中必不可少的工具?答案取決於你的工作內容。
如果你大量參與服務器端工作(為客戶或公司),同時進行開發工作,那麼答案是肯定的。 Packer能極大地幫助你。
但如果你僅僅是開發者,很少直接處理服務器端工作,那麼Packer對你幫助不大。
即便如此,學習創建服務器環境的基礎知識對任何PHP開發者都大有裨益。你的職業生涯中或多或少會遇到這些技術(你創建的一切都運行在這些技術之上!)。掌握這些專業知識無疑會提升你的職業發展前景!至少,你會更好地理解DevOps同事的工作。
如果你對此感興趣,或者你經常進行手動服務器端工作,請繼續閱讀。
關鍵要點:
- Packer的適用性:對於既參與服務器管理又進行開發任務的PHP開發者來說,Packer尤其有用,它有助於簡化一致性服務器環境的創建。
- 開發自主性:現代計算技術的進步使開發者能夠直接在個人設備上管理複雜的開發環境,從而提高自主性,增強開發與生產環境的一致性。
- 與Vagrant的集成:Packer和Vagrant都能增強開發環境,但Packer獨有的功能是自動化創建可在各種平台上使用的機器鏡像,從而節省環境設置時間。
- DevOps協作:Packer為DevOps專業人員提供工具,以便為開發團隊提供與生產環境一致的環境,簡化開發流程並減少設置錯誤。
- 實踐操作:本文提供了一個關於設置Packer並使用它創建虛擬機鏡像的實用教程,演示了Packer高效處理複雜配置任務的能力。
- 未來發展:學習使用Packer等工具不僅能滿足當前項目需求,還能為開發者在未來與不同團隊的技術集成和協作做好準備。
回顧過去:
簡而言之#2:如果你精通Vagrant並理解其作為工具的目的,請跳到本文的這一部分。
僅僅十年前,PHP應用程序的開發基本上是這樣的:開發者通過FTP將一些代碼上傳到Web服務器上,然後查看是否有效。如果無效,他們會進行故障排除,在某個文本編輯器中進行更改,再次通過FTP重新加載受影響的文件,然後查看更改是否解決了問題。如果是這樣,他們就會繼續下一個功能或問題,重複這個過程(並祈禱他們剛剛完成的工作不會出錯)。他們也可能進行一些FTP同步。
這是當時平均水平的獨立PHP開發者將代碼推送到開發服務器(或者更糟糕的是,直接推送到生產服務器)的工作流程(實際上,如今一些開發者仍然使用相同的流程)。當時,構建Web服務器本身通常是其他人的工作。
此外,在那個不太遙遠的過去,為了讓開發團隊協同工作,可能存在某種形式的並發版本控制系統,並且團隊甚至可能設置了自動部署。當更改提交到存儲庫時,它會自動部署到暫存或生產系統。這種情況實際上是當時Web應用程序開發的最佳技術。
在那些美好的舊時光裡,持續集成、虛擬機、雲計算、基礎設施編排、數據中心自動化,甚至“DevOps”這個術語基本上都是未知的。它們才剛剛誕生。亞馬遜才剛剛開始他們的網絡服務業務。記住,這僅僅是十年前的事!
啊,當時的時光是多麼簡單,對吧?
不,並非如此。當時,開發速度更慢、更繁瑣,而且更容易出錯。服務器也總是需要“啟用”進行測試,這通常意味著開發者必須等到“網絡人員”準備好一個服務器才能使用,比如最新的PHP版本。在很多情況下,這往往是一場爭鬥,而對於“網絡人員”來說,保持服務器“正常運行”就像滅火一樣。
今天的計算和虛擬化:
如今,隨著計算機技術觸手可及,開發者可以隨身攜帶更複雜的開發基礎設施。今天筆記本電腦或PC的計算能力遠遠超過十年前Web服務器上的計算能力。
事實上,我們今天擁有的許多智能手機都比十年前的服務器更強大。
科技真是令人驚嘆,不是嗎?
由於可用的計算能力不斷增長,越來越多的人開始意識到,這種計算能力可以分解成單獨的“機器”。這使得它們能夠同時執行完全不同的操作。更重要的是,可以更好地利用計算能力,從而節省資源。這些是計算能力虛擬化的主要驅動力。
換句話說,如今,憑藉創建虛擬機的能力,開發者可以隨身攜帶自己的開發環境,不再受限於必須為他們提供適當工作環境的其他人員。更重要的是,他們可以在本地構建一個完整的開發環境,模擬一個完整的Web服務器。
這不僅使開發者更加自主,這種本地開發環境還有另一個巨大優勢:它被稱為“開發-生產一致性”——我們在新手友好的《Jump Start PHP Environment》一書中對此進行了詳細討論。開發-生產一致性基本上意味著開發者可以在與應用程序最終部署到生產環境中幾乎相同的系統上進行開發。
生產一致性優勢——它允許開發者編寫更高質量的代碼,因為他們可以第一次就以正確的方式做正確的事情。
如今,開發者可以在自己的背包裡擁有開發高度複雜應用程序所需的一切,包括高度複雜的開發環境。
顯然,這種能力也帶來了複雜性。虛擬服務器必須構建,軟件必須安裝和配置。所有這些都可能非常耗時,而時間就是金錢。這也意味著開發者可能需要學習很多東西才能運行這樣的環境。這也很耗時。
Vagrant的出現:
為了幫助開發者完成開發環境的“構建”,HashiCorp Inc. 推出了名為Vagrant的程序。使用Vagrant,開發環境配置是代碼,可以輕鬆地共享、回滾和前滾。開發者可以自由地嘗試新事物,例如最新版本的PHP,而無需擔心服務器可能需要數小時才能設置,或者故障需要數小時才能解決。開發者不必等待任何人創建此環境,如果環境完全崩潰,他們也不會打擾任何人。
更多關於Vagrant的信息——重新介紹Vagrant:使用PHP的正確方法
但是,仍然還有一個問題需要解決。 Vagrant雖然非常適合構建開發環境,但運行起來相當耗時,尤其是在大量配置(更多關於配置的信息見下文)的情況下。根據所涉及的軟件,構建一個box和配置軟件可能需要2到20分鐘不等。
這種時間消耗還加劇了這樣一個事實:Vagrant一次只能為單個虛擬化系統(稱為“提供程序”)構建單個box。例如,如果你想在本地構建你的環境,並在AWS上構建一個環境,你必須創建兩個不同的Vagrant文件並分別運行它們。這實際上並不實用。簡而言之,Vagrant非常擅長構建單個開發環境,僅此而已。
Packer的出現:
為了繼續進行,你現在必須更多地扮演DevOps角色。 Packer將創建虛擬化機器鏡像的任務放入相對簡單的中央配置中,因此你可以獲得Vagrant在自動化開發環境方面相同的優勢,但現在也可以用於開發基本鏡像。
虛擬機鏡像也稱為虛擬設備。它是虛擬機的預構建副本,可用於創建新的虛擬機。在Vagrant術語中,這些鏡像稱為“box”。
如果你了解創建自己的鏡像的過程,你會知道手動操作非常麻煩。如果你不知道,你很幸運,因為你可以跳過手動構建它們的麻煩,現在就可以開始使用Packer了。但是,你仍然需要學習一些鏡像/服務器構建的基礎知識。同樣,這對開發者來說是有價值的知識,任何開發者都應該花時間學習基礎知識。
一旦你開始使用Packer,並且你已經在使用Vagrant,你首先會想到的問題是,“Packer和Vagrant到底有什麼區別?”我們在上面已經開始討論了一些區別。最終,Packer創建鏡像,Vagrant可以使用這些鏡像來構建開發環境。如果你之前使用過HashiCorp的Vagrant box,很可能它也是用Packer構建的。
作為使用Packer的DevOps人員,你可以為開發團隊提供生產環境的鏡像,他們可以輕鬆地使用這些鏡像進行開發。這再次支持了開發-生產一致性,並簡化了開發流程。
我們之前提到了節省時間。 Packer還可以並行構建和部署這些鏡像。因此,你可以幾乎同時為不同的主機、你的私有云和Vagrant構建鏡像。此外,這些“預烘焙”的鏡像啟動速度比Vagrant中配置的box快得多。快得多!如果你的團隊一直在“啟用”和銷毀box,那麼使用Packer創建的預烘焙軟件和配置的鏡像將為你的團隊節省大量時間。
Packer流程也使創建基本鏡像具有可重複性。這意味著你的生產系統具有更高的質量,因為VM的鏡像重建可以在前面進行測試和自動化。換句話說,Packer有助於減少人為錯誤。
在構建鏡像時,還可以控制幾個子流程。我們稍後會討論它們。你還可以閱讀Packer文檔中關於Packer概念和特性的更多信息。請注意,你可以為許多不同的平台構建鏡像。你還可以使用許多配置程序(如Chef、Puppet、Ansible)或Shell腳本配置軟件。而且,你可以進行後處理,例如創建Vagrant box或將鏡像推送到Docker註冊表(以及更多其他操作)。
哇……理論太多了,不是嗎?
讓我們做一些實際操作,以幫助闡明Packer的概念以及如何使用它。
一些Packer工作流程:
這是我們將要完成的工作的可視化表示。
雖然Packer不需要Vagrant來創建鏡像,但在上面的圖形中添加了Vagrant,以便讓你更好地理解它在“管道”中的位置。
為了讓你開始學習Packer的基礎知識,以下練習的目標是創建一個能夠在Rackspace上運行的鏡像和一個Virtualbox“box”文件。目標是向你展示你可以生成相同的鏡像和配置來進行開發,並在你的(理論上的)生產服務器上使用。
我們使用Rackspace是因為它有一個非常簡單的後端用於管理計算基礎設施,並且因為它使用Openstack,這是一個用於基礎設施管理的標準系統。
我們還使用Virtualbox,因為它是一個免費且廣泛使用的本地虛擬化系統。如果你願意,可以使用其他系統,如AWS和VMWare,但是,你需要修改本教程中提供的材料,因為它們是專門為這兩個系統製作的。
請注意:我們在本文中構建的虛擬服務器絕不是“生產就緒”的。它們僅用於演示目的。
我們將使用Packer構建的初始鏡像將是一個Debian Jessie(64位)鏡像,預裝了Nginx和PHP7。
要求:在開始之前,你需要在你的計算機上安裝Vagrant和虛擬化軟件Virtualbox(版本5.0 )。你還需要一台64位計算機。如果你使用的是Windows系統,你還應該安裝Git for Windows,以便我們可以使用它的bash控制台。
正如我上面提到的,我們在本教程中使用Rackspace,因此你需要在那裡創建一個帳戶。設置一個帳戶相對快速且容易。
你還需要一個相對快速的互聯網連接,因為Virtualbox構建的鏡像下載非常大(大約250MB)。最後,你需要在你的計算機上大約有12GB的可用磁盤空間才能完成整個過程。
本文還假設你了解一些使用Vagrant、SSH和Shell命令的基礎知識,並且對Linux和虛擬機有一些基本的了解。
設置你的計算機以運行Packer
請按照說明在你的計算機上安裝Packer。
在撰寫本文時,Packer 0.11.0剛剛發布。
安裝完成後,在你的(git bash)控制台中輸入packer。你應該會看到類似這樣的內容。
現在,我們將轉到Rackspace並啟動一個服務器,然後創建一個基本鏡像。注意:如果你有AWS或其他Packer支持作為構建器平台的雲計算主機,你需要採取的步驟將類似。我們在本教程中介紹Rackspace。另請注意,創建服務器會向你的主機帳戶收取一些費用。但是,金額會很小。按照本教程操作的費用不應超過一美元。
繼續構建一個Jessie 8服務器,並將其命名為“Packer Test”。 Rackspace非常直觀易懂。啟動一個1GB的服務器來從中創建鏡像。
服務器處於活動狀態後,創建新創建服務器的鏡像(右上角的“操作”按鈕)。創建並保存鏡像後,你可以刪除服務器。
轉到“服務器->鏡像”,你應該會看到你的新鏡像。點擊它以轉到鏡像的詳細信息頁面。我們將需要鏡像ID。
好了。現在你已經準備好在Rackspace上使用的基本鏡像了,我們將開始構建我們自己的鏡像。這個過程實際上相當複雜,特別是對於那些只對服務器環境和Packer了解有限的人來說。因此,為了提供一些幫助,我們為你創建了一個演示Packer倉庫供你下載。請從你的(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文件是Packer的核心。這是控制Packer執行操作的配置文件。它類似於Vagrant中使用的Vagrantfile(我們也在下載中為你提供了Vagrantfile)。
現在使用以下命令運行Packer。
<code>packer build jessie64.json</code>
此構建過程需要幾分鐘。由於我們正在進行教程,讓我們在等待它完成的同時,實際了解Packer內部發生的情況。此過程不應超過大約30分鐘,或者控制台中的輸出不應停止超過10分鐘。如果確實如此,則說明出現錯誤。
構建器
首先,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>
構建器負責使你想要的鏡像與你所針對的環境兼容。例如,使用AWS AMI,你實際上可以構建你的Virtualbox鏡像以用於Vagrant和AWS。
在我們的練習中,我們正在組合“openstack”和“virtualbox-iso”鏡像。不幸的是,Packer無法使用openstack鏡像來構建Virtualbox鏡像,因此我們還創建了virtualbox鏡像。
你會注意到上面JSON代碼中的“boot_command”部分。在這裡,我們實際上是在自動化輸入必要的命令,以便在Virtualbox VM中安裝Debian Jessie 8作為操作系統。如果你願意,你甚至可以在Packer進行構建時,在Virtualbox中觀看安裝過程。
當然,這裡發生了很多“魔法”,你必須真正了解Linux安裝的內部機制和Packer的內部機制才能手動組合這樣的Virtualbox鏡像。謝天謝地,有很多優秀的DevOps人員將這樣的Packer .json文件提供給大眾使用。
配置程序
一旦構建器在Rackspace和Virtualbox中啟動了VM中的鏡像,Packer將開始配置在shell腳本中定義的軟件。使用Packer,你還可以使用Puppet、Chef或Ansible等系統以及許多其他系統來編排配置。我們只使用Shell腳本,你可以在/scripts目錄中找到這些腳本。
這是我們配置文件中的配置部分。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
“file”配置程序是我們如何將配置添加到VM中的方法。它將我們的計算機上的配置文件加載到VM上的/tmp目錄中。在配置過程中,shell腳本中有一些命令會將配置文件複製到VM上的正確位置。我們有像Nginx的“默認”配置文件或修改後的PHP的php.ini文件。你可以在/transfer_files文件夾中找到我們使用的文件。
你還會注意到上面的“override”部分。這告訴Packer只為每個鏡像構建運行某些腳本。在我們的練習中,我們需要對“openstack”鏡像進行較少的處理才能使其與Virtualbox鏡像“一致”,因此只處理setup.sh腳本。
最後,是後配置處理器部分。
<code>cd PHP-Packer-Demo </code>
這負責實際構建Vagrant box。
重要的是要記住,我們現在配置的所有內容都“預烘焙”到鏡像中。 Packer通過這種自動化節省了我們(或我們的開發團隊)大量時間!
已構建的鏡像
在Packer配置完我們在jessie64.json文件中配置的所有軟件後,它將關閉VM並存儲這些VM的新鏡像。對於Rackspace鏡像,你將在Rackspace管理控制面板的“已保存鏡像”部分找到新鏡像。對於Virtualbox鏡像,你將在當前目錄中找到一個“jessie64.box”文件。
就是這樣。 Packer已經完成了它的工作!
現在怎麼辦?
你現在可以使用Rackspace鏡像來創建新的服務器。試試看。轉到“服務器”部分並選擇“創建服務器”,然後轉到“已保存鏡像”。你應該會在“已刪除服務器”下看到你新保存的鏡像。選擇它並啟動服務器。一旦它處於活動狀態,你就可以獲取給你的IP地址並將其輸入到你的瀏覽器中。你應該會看到Nginx歡迎屏幕。
對於Virtualbox鏡像,我們還需要使用Vagrant進行一些工作。現在仔細閱讀。這將變得非常困難!
創建Virtualbox VM
在包含Vagrant文件的目錄中,輸入以下命令。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
就是這樣!好的,我們通過為你創建Vagrant文件來幫助你。你需要學習更多關於Vagrant的知識,才能自己創建一個可用的文件。如前所述,如果你是一個認真的開發者,你應該學習這一點。
你現在應該在Virtualbox的UI中看到新的鏡像作為VM。
上面的第一個命令將新box添加到Vagrant中,因此它知道從哪裡使用它。我們為box命名為“jessie64”,並使用我們剛剛創建的box。第二個命令告訴Vagrant在Virtualbox中創建虛擬機並運行它。
你還會注意到,box的初始啟動只需要一兩分鐘。如果我們一直在Vagrant中進行配置,則需要10到20分鐘。這再次節省了時間。
一旦“vagrant up”命令完成,請在瀏覽器中輸入URL https://www.php.cn/link/14e676072a5b15381b6f7f33c3528215。
在這兩個系統中,你還可以使用“vagrant”用戶和密碼“vagrant”進行SSH連接。這些服務器是不安全的!
我們還沒有完全完成!
讓我們做一些更有趣的事情。
當你執行下一步時,想像一下你做過多少次類似的事情。我們現在正在自動化軟件安裝和配置的過程!
讓我們假設我們做了很多Symfony開發工作。讓我們繼續設置我們的鏡像,以便自動安裝並準備好Symfony的版本。
在開始之前,請刪除Rackspace上的服務器。 (我們不想花費任何不必要的錢。)
此外,在你的控制台中,讓我們終止並刪除我們剛剛加載的Vagrant box。輸入以下命令:
<code>cd PHP-Packer-Demo </code>
為了好玩(或者不是?)安裝Symfony(和演示)
再次,讓我們假設我們有一個開發團隊,他們經常使用Symfony。讓我們自動化設置一個支持Symfony的服務器。我們只加載Symfony演示應用程序,但這項額外的工作應該讓你很好地了解Packer如何在自動化方面幫助支持開發和基礎設施編排工作。
進入/scripts目錄,使用你喜歡的編輯器打開setup.sh腳本,並將以下Shell腳本代碼添加到底部。
<code>git clone https://github.com/smolinari/PHP-Packer-Demo </code>
上面的代碼基本上是我們需要做的,以便正確設置Symfony、PHP和Nginx。
已添加註釋以解釋在這些配置步驟中將發生什麼。
添加並保存上述代碼後,讓我們再次讓Packer完成繁重的工作。
在文件系統中向上移動一級到我們有jessie64.json文件的位置,並輸入我們之前輸入的命令。
<code>cd PHP-Packer-Demo </code>
你現在可以處理其他事務或喝另一杯咖啡(或者在跑步機上走走)。構建新的Symfony演示鏡像需要一段時間。
完成後,你應該會看到類似這樣的屏幕。
現在鏡像已經構建並準備好了,我們可以再次在Rackspace上將openstack鏡像啟動為新的服務器。
對於你的Virtualbox VM,再次輸入上面“創建Virtualbox VM”下提到的兩個命令。
對於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>
你將看到相同的內容。
很酷,對吧?
結論:
我們回顧了往昔,然後回到了現在。希望我們讓你理解了計算機虛擬化的原因,以及Vagrant和Packer等軟件的創建,以及兩者之間的聯繫。
如果你成功地創建了兩個服務器,那麼你也可以想像Packer可以作為DevOps成員和開發者為你提供的優勢。這些優勢包括但不限於:
- 生產一致性——開發環境與生產環境幾乎完全相同。
- 節省時間——鏡像中“預烘焙”了軟件和配置,你不再需要手動添加。
- 環境測試——完成的鏡像可以被認為是“完整的”並經過測試,避免人為錯誤。
- 環境版本控制——當你更改環境時,可以使用Git對不同的Packer構建進行版本控制。
- 支持“不可變架構”——與其構建或修改現有的VM(這可能是錯誤的來源),不如簡單地“銷毀”VM實例並創建新的實例。
希望你喜歡這篇文章和使用Packer構建鏡像的練習。請在下面的評論中告訴我們你對Packer的看法。
關於HashiCorp的Packer的常見問題解答(FAQ),面向PHP開發者
什麼是HashiCorp的Packer,它如何使PHP開發者受益?
HashiCorp的Packer是一個開源工具,可以自動化創建任何類型的機器鏡像。它通過允許你編寫基礎設施代碼並將其保存在版本控制系統中來支持現代配置管理。對於PHP開發者來說,Packer可能是一個改變遊戲規則的工具。它允許你創建相同的開發環境,從而減少“在我的機器上可以運行”的問題。它還使你能夠創建隨時可用的鏡像,可以在幾分鐘內(而不是幾小時或幾天)部署到生產環境中。
Packer與其他類似工具相比如何?
Packer因其多功能性和兼容性而脫穎而出。它支持多種平台,包括AWS、DigitalOcean、Docker、Google Cloud等等。它還可以很好地與其他HashiCorp工具(如Terraform和Vagrant)集成,為管理基礎設施提供無縫的工作流程。
如何安裝Packer?
Packer易於安裝。它作為所有受支持平台和架構的二進制包分發。你只需要從Packer網站下載適合你係統的包,解壓縮它,然後將其移動到你的PATH中即可。
如何使用Packer創建機器鏡像?
要使用Packer創建機器鏡像,你需要使用JSON格式編寫模板文件。此文件定義了要安裝的機器和軟件的類型。模板準備就緒後,可以使用“packer build”命令創建鏡像。
我可以將Packer與我現有的配置管理工具一起使用嗎?
是的,Packer可以很好地與Chef、Puppet、Ansible等現有的配置管理工具一起使用。你可以使用這些工具在Packer創建的機器鏡像上配置軟件。
Packer如何在鏡像創建過程中處理故障?
Packer具有強大的錯誤處理機制。如果在鏡像創建過程中發生錯誤,Packer會將鏡像標記為失敗,並清理所有已創建的資源。這確保你不會最終得到半成品或不一致的鏡像。
我可以在持續集成/持續部署(CI/CD)管道中使用Packer嗎?
絕對可以。 Packer非常適合CI/CD管道。你可以在構建過程中使用它來創建機器鏡像,然後將這些鏡像部署到你的生產環境中。
如何調試Packer中的問題?
Packer提供詳細的日誌,可以幫助你調試問題。你還可以啟用調試模式,以便在鏡像創建過程中獲得更詳細的輸出。
我可以為Packer項目貢獻代碼嗎?
是的,Packer是一個開源項目,歡迎社區貢獻。你可以通過報告錯誤、建議功能、改進文檔或提交拉取請求來貢獻代碼。
在哪裡可以找到更多學習Packer的資源?
Packer的官方網站和GitHub存儲庫是開始學習的好地方。它們提供了全面的文檔、教程和示例。你還可以從互聯網上找到許多關於Packer的博客文章、視頻和在線課程。
以上是Hashicorp的Packer-是PHP開發人員的東西嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在PHP中設置會話cookie參數可以通過session_set_cookie_params()函數實現。 1)使用該函數設置參數,如過期時間、路徑、域名、安全標誌等;2)調用session_start()使參數生效;3)根據需求動態調整參數,如用戶登錄狀態;4)注意設置secure和httponly標誌以提升安全性。

在PHP中使用會話的主要目的是維護用戶在不同頁面之間的狀態。 1)會話通過session_start()函數啟動,創建唯一會話ID並存儲在用戶cookie中。 2)會話數據保存在服務器上,允許在不同請求間傳遞數據,如登錄狀態和購物車內容。

如何在子域名間共享會話?通過設置通用域名的會話cookie實現。 1.在服務器端設置會話cookie的域為.example.com。 2.選擇合適的會話存儲方式,如內存、數據庫或分佈式緩存。 3.通過cookie傳遞會話ID,服務器根據ID檢索和更新會話數據。

HTTPS通过加密数据传输、防止中间人攻击和提供身份验证,显著提升了会话的安全性。1)加密数据传输:HTTPS使用SSL/TLS协议加密数据,确保数据在传输过程中不被窃取或篡改。2)防止中间人攻击:通过SSL/TLS握手过程,客户端验证服务器证书,确保连接合法性。3)提供身份验证:HTTPS确保连接的是合法服务器,保护数据完整性和机密性。

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1
好用且免費的程式碼編輯器