讓 VAGRANT 啟動并運行起來
讓 VAGRANT 啟動并運行起來
這是一個幫助你快速入門Vagrant的初級教程。官方文檔也可以很好的幫助你入門,但是本文更針對完全零基礎的初學者并且會對某些問題直接切入正題。
本文在任何方面都不會取代官方文檔,而且我建議讀完本文的人馬上閱讀官方文檔。因此,如果你符合以下條件即可閱讀本文:
-
你想知道Vagrant是什么,它有什么作用。
-
你想對為什么Vagrant會使你的開發環境增壓又一個初步的理解。
-
你想快速地在本地搭建一個PHP 5.4開發環境。
注意! 如果你在尋找一個在Chef或者是Puppet中配置Vagrant的教程,本文并不適合你。本文也希望讀者對命令行和git有基本的理解。最后,本文是針對Mac用戶的,但是對PC用戶和Linux用戶也基本相同。
Vagrant 是一個可創建輕量級、高復用性和便于移植的開發環境的工具。
在非專業人士眼里,這意味著Vagrant拋棄開發環境中所有讓人頭痛的設置代之為了一個單一的配置文件,你可以選擇你的服務器所需要的特性予以保留。你將不會再被XAMMP,手動配置虛擬環境,或者使用FTP遠程編輯所卡住。
Vagrant 是一個強有力的工具,它的功能和價值超出這篇文章所覆蓋的范圍以及我的理解所能到達之處。這篇文章將介紹Vagrant中一些相當酷的事情,比如:
-
在你的機器中使用PHP5.4版本的LAMP。
-
如何在你的虛擬機中便捷訪問數據庫。
-
如何自動更新你的hostfile,使用URL引用虛擬服務器(developing on http://localhost:8080 versus http://myprojectname.local)。
-
一些必要的Vagrant命令。
-
最好和最有用的Vagrant插件。
-
鏈接到更多資源和預建的Vagrant書庫。
什么是Vagrant和為何我要甚為關注?
簡單的原因:
在本地開發爽。用Vagrant快,簡單,并可幫助你同時管理多個開發環境。
更長的原因:
想象一下,你正在和據說15人的團隊開發一個應用程序。這個程序真是狂棒!它使用Laravel的PHP框架,Redis和Memcached,ImageMagick和GD的PHP模塊,curl,MySQL和PostgreSQL, 甚至MongoDB。 另外,Laravel明確依賴PHP版本5.3.7或更高版本,以及mcrypt的PHP擴展。
理想情況下,你會希望團隊所有的15人在開發這個應用程序時,都是相同的開發環境。 但是不是所有的開發團隊,都有系統管理的專家或者培養一個系統管理。獲得相同設置的開發環境可能是一個非常艱巨的任務。 最重要的是,有些人使用的是Mac,而其他人則使用Linux或Windows。在它之前,開發人員會糾結在無盡的配置中,用電腦扔墻而筋疲力盡。
Vagrant將會替你管理好環境設置的種種,讓你將精力用在業務代碼的開發.
再來看一個場景,項目開發了一大半了發現需要安裝Beanstalkd以便處理隊列問題. 通常情況下,大家會停下來重新配置環境并期望 Bean stalkd能正常運行. 有了Vagrant, 只需要將更新文件推送到配置文件上即可, 所有人只需要刷新 Vagrant就行了.太棒了!接下來大家就能使用隊列功能了. 這跟操作系統更沒什么關系,不管是 Windows, Linux, 或是Mac,因為大家的操作環境都是一樣的.
服務提供者和服務消費者
我提到了Vargrant會幫你打點環境配置的一切問題,這不能以偏概全. Vagrant工作需要服務提供者和消費者的配合來管理環境配置. 提供者, 像是 VirtualBox, VMWare, Amazon AWS, 和Digital Ocean, 就是你的虛擬環境的宿主.假設這些環境是 VirtualBox 或VMWare, 又或者是, Amazon亦或Digital Ocean都能方便的部署環境到云端.
供應者 Provisioners 就是一些幫助你實現環境具體配置的工具軟件. 這在管理繁瑣的服務器配置方面發揮巨大作用. 有關服務器的配置基本都能被管理起來. 比如說 PHP, PHP Modules, Apache, Git, Vim, databases, logins, Xdebug, 等等. Vagrant最常使用的消費者是 Puppet 和Chef. 使用消費者管理環境配置的優勢就是,在以后的環境配置時都可以使用先前的配置模板,不論是部署,發布和生產過程中都可以方面的使用起來.
好了! 開始使用LAMP
下面將分步介紹在Mac上使用Vagrant 。我發現在在使用不同的OS, Vagrant 版本, Chef 版本, 以及virtual box 版本時會出現一些報錯.這方面我也不是專家,也沒辦法解答所有的報錯問題. 也許看起來每個問題都會等導致使用的失敗,但奇怪的是所有組件合起來后卻能正確的運行. 另外, Vagrant support 確實提供了堅強的后盾,開發團隊 (beast developer?) 也在高頻率的發布補丁版本.我建議在使用Vagrant時不要輕易升級軟件,尤其是之前已經很順暢的運行在你們系統上的 . 開發環境就像是你的孩子一樣,不管有多么不盡人意都得接受!
安裝插件
Note: 寫這篇文章時 Vagrant版本是1.4, VirtualBox版本 4.3.4, Ruby版本 1.9 Mac OS X Mavericks 10.9.
Vagrant安裝后,系統會彈出控制臺窗口來驗證. 可以直接鍵入下面命令:
vagrant -v
Vagrant安裝程序會自動添加相關路徑到 PATH. 安裝成功后,你會看到下面類似的圖片.
之前說到過 Chef 消費者. 這里我們就是用Chef來替代 Puppet. 有個工具 Berkshelf用來管理 Chef’s 的組件(PHP, PHP Modules, Apache, Git, Vim, databases, logins, Xdebug, 等等.).本例中也是如此. Vagrant 或是Chef 并不一定要安裝 Berkshelf, 但最好安裝一下,以便后面Vagrant需要使用. 在 Mac上安裝使用下面命令:
gem install berkshelf
安裝Vagrant 插件
需要安裝的插件如下 Vagrant Berkshelf, Vagrant Hostmanager, 和Vagrant Omnibus.
Vagrant Berkshelf 插件可以實現和 Berkshelf cookbook manager 的通信.
Vagrant Hostmanager插件可以自動更新綁定IP的配置文件. 我個人很喜歡這個插件,它使得開發過程更清晰 ,URL像是 “http://myproject.local” 比直接使用IP“172.22.22.22″ 好得多.
Vagrant Omnibus插件檢查Chef 安裝版本是否匹配. 本例中沒用到這個插件,但在排查Chef相關問題時,這個插件非常有用.我相信有天這個功能會被直接添加到Vagrant核心模塊里.
安裝Vagrant插件十分簡單,在控制臺直接輸入命令即可:
vagrant plugin install vagrant-berkshelf vagrant plugin install vagrant-hostmanager vagrant plugin install vagrant-omnibus
Clone a Vagrant LAMP Stack
你完全可以構建自己的LAMP環境,但基于本教程的間接性,我們使用一套現成的環境. 我已經 做了一些修改,可以配合我的 Vagrant, Mavericks, 和VirtualBox來使用.
定位到工作目錄鍵入下面命令:
git clone https://github.com/scotch-io/Vagrant-LAMP-Stack.git myfirstvagrantproject
進入剛才的目錄,啟動 vagrant:
cd myfirstvagrantproject vagrant up
這時候Vagrant會基于 “Vagrantfile”文件構建虛擬開發環境. 如果你還需要一些額外的配置,這個時候可以進行配置. 我一般會做如下操作:
vagrant plugin install vagrant-berkshelf vagrant plugin install vagrant-hostmanager vagrant plugin install vagrant-omnibus# IP Address for the host only network, change it to anything you like # but please keep it within the IPv4 private network range ip_address = "172.22.22.22" # The project name is base for directories # Will also be the hostname for your project (e.g.: http://projectname.local) project_name = "projectname"
Vagrant安裝完成以后,從瀏覽器訪問 http://projectname.local 或是172.22.22.22 會連接到你的工作環境(下面圖片上的url是之前老版本的,請注意):
這就完事了!現在 Vagrant已經起來了. 進入公共目錄下,就可以開始碼字了. 任何公共文件夾上的更改都會同步到你的虛擬環境里.
也可以打開 VirtualBox查看剛剛創建的虛擬環境和vagrant. 下面截圖是我寫本文時候的:
訪問數據庫
從上面的示例看, 我們沒有安裝phpMyAdmin . 當然你可以自己安裝phpMyAdmin . 但是我使用的是一款桌面客戶端應用. 像是 Sequel Pro 或Navicat.連接到數據庫的配置文件可以通過Vagrantfile 或是示例的 index.php來配置. 連接PHP時,使用下面的配置:
Host: localhost User: root Password: root Port: 3306
這是使用 Sequel Pro連接數據庫后的結果:
MySQL Host: 172.22.22.22 (or the IP used)User: root Password: root Port: 3306
由于連接都是被處理為遠程連接,如果你的vagrant配置有誤,就連不上數據庫. 這就可以使用客戶端來做端口映射.下面會看到很多關于SSH的介紹
MySQL Host: localhost or 127.0.0.1User: root Password: root Port: 3306SHH Host: 172.22.22.22SSH User: vagrant SSH Key: ~/.vagrant.d/insecure_private_key (or your path to the private key)
可以看到這些信息直接從 vagrant ssh-config傳過來.
Vagrant 命令
Vagrant的命令很多.官網上有 完整的列表, 這里會介紹一些常用的.
vagrant up
vagrant up這會運行基于 Vagrantfile配置文件的vagrant. 我用來啟動和重啟開發環境.
vagrant suspend
vagrant suspend 這個能暫停當前環境操作. 最好在關機前做好這一步,以防下次開機配置無法恢復.
Starting, Pausing, and Resuming: 啟動和重啟可以直接使用vagrant up. 所有之前的狀態都會被保存起來.
vagrant destroy
vagrant destroy永久性的移除你的虛擬環境.
vagrant reload
vagrant reload 和vagrant reload --provision如果環境掛了,可以重啟.如果加了--provision, 就會恢復資料庫. 這在使用Cookbooks 或Puppet移除或添加東西時很有效果.
vagrant ssh
vagrant ssh所有公共文件夾中的操作都會同步到虛擬環境,但如果需要直接操作可使用該命令.
vagrant ssh-config
vagrant ssh-config這個顯示連接到虛擬環境的所有配置項信息.
更新, 調試, 和相關資源
這就是有關 Vagrant運行的相關介紹. 本地開發,方便的數據庫連接, 使用 Chef 或 Puppet 配置管理虛擬機配置, 以及統一管理開發環境的相關配置.它的致命優點就是,可以直接將環境配置直接克隆到各種環境上,不論是開發環境或是生產環境. 這樣就能保證開發環境,調試環境,和生產環境的完全一致.
如果在使用時還有什么問題,可以直接使用下面的 Vagrant LAMP :
如果使用中你需要問我任何問題,都歡迎,或者直接訪問下面資源:
如果你還在猶豫,就開始 部署自己的環境吧。
一如既往的感謝閱讀本文的各位!希望大家在使用Vagrant時,玩的開心!