Vagrant 是一個(gè)可創(chuàng)建輕量級(jí)、高復(fù)用性和便于移植的開(kāi)發(fā)環(huán)境的工具。
在非專業(yè)人士眼里,這意味著Vagrant拋棄開(kāi)發(fā)環(huán)境中所有讓人頭痛的設(shè)置代之為了一個(gè)單一的配置文件,你可以選擇你的服務(wù)器所需要的特性予以保留。你將不會(huì)再被XAMMP,手動(dòng)配置虛擬環(huán)境,或者使用FTP遠(yuǎn)程編輯所卡住。
Vagrant 是一個(gè)強(qiáng)有力的工具,它的功能和價(jià)值超出這篇文章所覆蓋的范圍以及我的理解所能到達(dá)之處。這篇文章將介紹Vagrant中一些相當(dāng)酷的事情,比如:
在你的機(jī)器中使用PHP5.4版本的LAMP。
如何在你的虛擬機(jī)中便捷訪問(wèn)數(shù)據(jù)庫(kù)。
如何自動(dòng)更新你的hostfile,使用URL引用虛擬服務(wù)器(developing on http://localhost:8080 versus http://myprojectname.local)。
一些必要的Vagrant命令。
最好和最有用的Vagrant插件。
鏈接到更多資源和預(yù)建的Vagrant書(shū)庫(kù)。
想象一下,你正在和據(jù)說(shuō)15人的團(tuán)隊(duì)開(kāi)發(fā)一個(gè)應(yīng)用程序。這個(gè)程序真是狂棒!它使用Laravel的PHP框架,Redis和Memcached,ImageMagick和GD的PHP模塊,curl,MySQL和PostgreSQL, 甚至MongoDB。 另外,Laravel明確依賴PHP版本5.3.7或更高版本,以及mcrypt的PHP擴(kuò)展。
理想情況下,你會(huì)希望團(tuán)隊(duì)所有的15人在開(kāi)發(fā)這個(gè)應(yīng)用程序時(shí),都是相同的開(kāi)發(fā)環(huán)境。 但是不是所有的開(kāi)發(fā)團(tuán)隊(duì),都有系統(tǒng)管理的專家或者培養(yǎng)一個(gè)系統(tǒng)管理。獲得相同設(shè)置的開(kāi)發(fā)環(huán)境可能是一個(gè)非常艱巨的任務(wù)。 最重要的是,有些人使用的是Mac,而其他人則使用Linux或Windows。在它之前,開(kāi)發(fā)人員會(huì)糾結(jié)在無(wú)盡的配置中,用電腦扔墻而筋疲力盡。
Vagrant將會(huì)替你管理好環(huán)境設(shè)置的種種,讓你將精力用在業(yè)務(wù)代碼的開(kāi)發(fā).
再來(lái)看一個(gè)場(chǎng)景,項(xiàng)目開(kāi)發(fā)了一大半了發(fā)現(xiàn)需要安裝Beanstalkd以便處理隊(duì)列問(wèn)題. 通常情況下,大家會(huì)停下來(lái)重新配置環(huán)境并期望 Bean stalkd能正常運(yùn)行. 有了Vagrant, 只需要將更新文件推送到配置文件上即可, 所有人只需要刷新 Vagrant就行了.太棒了!接下來(lái)大家就能使用隊(duì)列功能了. 這跟操作系統(tǒng)更沒(méi)什么關(guān)系,不管是 Windows, Linux, 或是Mac,因?yàn)榇蠹业牟僮鳝h(huán)境都是一樣的.
安裝步驟
1. 安裝 VirtualBox
虛擬機(jī)還是得依靠 VirtualBox 來(lái)搭建,免費(fèi)小巧。
下載地址:https://www.virtualbox.org/wiki/Downloads
* 雖然 Vagrant 也支持 VMware,不過(guò) VMware 是收費(fèi)的,對(duì)應(yīng)的 Vagrant 版本也是收費(fèi)的
2. 安裝 Vagrant
下載地址:http://downloads.vagrantup.com/ 根據(jù)提示一步步安裝。
此外,還得下載官方封裝好的基礎(chǔ)鏡像:
Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box
Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box
如果你要其他系統(tǒng)的鏡像,可以來(lái)這里下載:http://www.vagrantbox.es/
* 鑒于國(guó)內(nèi)網(wǎng)速,我們將下載鏡像的步驟單獨(dú)剝離出來(lái)了
3. 添加鏡像到 Vagrant
假設(shè)我們下載的鏡像存放路徑是 ~/box/precise64.box,在終端里輸入:
$ vagrant box add hahaha ~/box/precise64.box
hahaha 是我們給這個(gè) box 命的名字,~/box/precise64.box 是 box 所在路徑
4. 初始化開(kāi)發(fā)環(huán)境
創(chuàng)建一個(gè)開(kāi)發(fā)目錄(比如:~/dev),你也可以使用已有的目錄,切換到開(kāi)發(fā)目錄里,用 hahaha 鏡像初始化當(dāng)前目錄的環(huán)境:
$ cd ~/dev # 切換目錄
$ vagrant init hahaha # 初始化
$ vagrant up # 啟動(dòng)環(huán)境
你會(huì)看到終端顯示了啟動(dòng)過(guò)程,啟動(dòng)完成后,我們就可以用 SSH 登錄虛擬機(jī)了,剩下的步驟就是在虛擬機(jī)里配置你要運(yùn)行的各種環(huán)境和參數(shù)了。
$ vagrant ssh # SSH 登錄
$ cd /vagrant # 切換到開(kāi)發(fā)目錄,也就是宿主機(jī)上的 `~/dev`
~/dev 目錄對(duì)應(yīng)虛擬機(jī)中的目錄是 /vagrant
Windows 用戶注意:Windows 終端并不支持 ssh,所以需要安裝第三方 SSH 客戶端,比如:Putty、Cygwin 等。
5. 其他設(shè)置
Vagrant 初始化成功后,會(huì)在初始化的目錄里生成一個(gè) Vagrantfile 的配置文件,可以修改配置文件進(jìn)行個(gè)性化的定制。
Vagrant 默認(rèn)是使用端口映射方式將虛擬機(jī)的端口映射本地從而實(shí)現(xiàn)類似 http://localhost:80 這種訪問(wèn)方式,這種方式比較麻煩,新開(kāi)和修改端口的時(shí)候都得編輯。相比較而言,host-only 模式顯得方便多了。打開(kāi) Vagrantfile,將下面這行的注釋去掉(移除 #)并保存:
config.vm.network :private_network, ip: "192.168.33.10"
重啟虛擬機(jī),這樣我們就能用 192.168.33.10 訪問(wèn)這臺(tái)機(jī)器了,你可以把 IP 改成其他地址,只要不產(chǎn)生沖突就行。
6. 打包分發(fā)
當(dāng)你配置好開(kāi)發(fā)環(huán)境后,退出并關(guān)閉虛擬機(jī)。在終端里對(duì)開(kāi)發(fā)環(huán)境進(jìn)行打包:
$ vagrant package
打包完成后會(huì)在當(dāng)前目錄生成一個(gè) package.box 的文件,將這個(gè)文件傳給其他用戶,其他用戶只要添加這個(gè) box 并用其初始化自己的開(kāi)發(fā)目錄就能得到一個(gè)一模一樣的開(kāi)發(fā)環(huán)境了。
7. 常用命令
$ vagrant init # 初始化
$ vagrant up # 啟動(dòng)虛擬機(jī)
$ vagrant halt # 關(guān)閉虛擬機(jī)
$ vagrant reload # 重啟虛擬機(jī)
$ vagrant ssh # SSH 至虛擬機(jī)
$ vagrant status # 查看虛擬機(jī)運(yùn)行狀態(tài)
$ vagrant destroy # 銷毀當(dāng)前虛擬機(jī)
更多內(nèi)容請(qǐng)查閱官方文檔 http://docs.vagrantup.com/v2/cli/index.html
8. 注意事項(xiàng)
使用 Apache/Nginx 時(shí)會(huì)出現(xiàn)諸如圖片修改后但頁(yè)面刷新仍然是舊文件的情況,是由于靜態(tài)文件緩存造成的。需要對(duì)虛擬機(jī)里的 Apache/Nginx 配置文件進(jìn)行修改:
# Apache 配置添加:
EnableSendfile off
# Nginx 配置添加:
sendfile off;
SegmentFault 團(tuán)隊(duì)就是用這種方式統(tǒng)一開(kāi)發(fā)環(huán)境的