原文網址:http://www.hellosanta.com.tw/Drupal網站設計/vagrant-安裝與建構
程式或系統開發,最重要的就是Deploy環境,不僅要能夠建構模擬出跟Production一樣的設定環境,還要能夠應付每一次開發的失敗、重新製作、重新設定、安裝等等的複雜步驟。
當然以過去我們的經驗,通常都是大量的使用虛擬機,來完成我們開發的需求。但是如果真的要測試不同平台同一支程式的執行狀況,每次都需要安裝作業系統後,再進行測試真的是很耗費時間,另外一方面,在多人同時開發時,要進行虛擬機器部署一同完成也是很麻煩的事情,現在都有了解決的方式,就是使用「Vagrant+VirtualBox」。
在過去,VirtualBox可以將設定好的或者安裝好的虛擬機進行備份,然後每一次要使用的時候,將此備份拿出來使用,在Vagrant裡面,這些動作將全部都變成簡單的指令,另外一方面,擔心每次都要安裝不同的作業系統嗎?還要下載作業系統,開始安裝,這些動作都不復存在了,只需要打簡單的一句話,就可以將vagrant cloud上面的對應安裝好的映像檔案下載並且安裝並且更新(沒試過,但有看到選項)!!聽了應該已經開始心動了吧。
目前Vagrant支援的平台有:Mac、Windows、Linux(DEB)、Linux(RPM)
以下開始簡單的教學步驟:
下載Vagrant&Virtualbox
Vagrant官網
針對本機的環境,下載對應的安裝檔,安裝完Vagrant跟Virtualbox就可以進行環境的建制了。
一、Vagrant下載與設定
開啟終端機,建立一個專案來執行Vagrant,我取名為vagrant_ubuntu12.04
mkdir vagrant_ubuntu12.04
(建立資料夾)
cd vagrant_ubuntu12.04
(切換至該資料夾)
接著要設定我們要運行的環境,vagrant需要一個稱作Box的檔案是一個作業系統環境的檔案,才可以運用VirtualBox來開啟
指令是vagrant box add {title} {url} title是我們要給這個box 檔案取的名稱 後面url 是box 來源的檔案路徑
vagrant box 下載途徑有兩種第一種是到vagrantbox.es copy人家打包好的box 檔來使用,或者是用vagrant cloud 官方的box 檔案
在這邊我們要建制的系統環境為ubuntu 12.04 LTS ,在終端機裡輸入:vagrant box add ubuntu12.04 http://files.vagrantup.com/precise32.box
點擊 enter ,開始下載環境設定檔。
Box檔案下載完成後,將這個box初始化,輸入vagrant init {title}
初始化結束以後,會生成一個Vagrantfile在資料夾中,利用編輯器開啟他進行設定
config.vm.network :forwarded_port, guest: 80, host: 8080 打開這個設定,就是說連到本機端 host port 8080的話,會幫你自動轉到vm裡面的port guest port 80
config.vm.network :private_network, ip: "192.168.33.10" 打開這個設定,就可以從本機端輸入IP adress連線到VM,ip可以自己作變更,也可以輸入::type:"dhcp",將其更改為動態IP
config.vm.network :public_network 這個設定打開後,VM就可以透過本機端的網路,存取外面的資源,當你要讀取外部資料,如果沒有開這個設定,有可能造成VM的無法辨識DNS,就會導致無法搜尋到所要的資料
安裝Virtualbox Guest Additions
如果要在虛擬機內分享主機端的資料夾的話,需要安裝Guest Additions這個套件,安裝方式如下
wget:http://download.virtualbox.org/virtualbox/4.3.18/VBoxGuestAdditions_4.3.... (先透過wget 下載這個additions ISO檔)
apt-get install dkms gcc
mount -o loop VBoxGuestAdditions_4.3.18.iso /mnt 將ISO檔進行掛載
cd /mnt 切換到mnt
./VBoxLinuxAdditions.run 執行ISO檔案
設定主機資料夾分享到Vagrant端
設定完同步資料夾,開啟vagrant時會有錯誤訊息
Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was:
解決方法如下
請在終端機輸入 vagrant plugin install vagrant-vbguest
sudo ln -s /opt/VBoxGuestAdditions-4.3.18/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions (這段路徑中的VBpxGuestAdditions-4.3.18請依照本機內的virtualbox的版本進行輸入)
輸入完成後輸入vagrant reload --provision
讓vagrant 重讀設定檔
二、啟動Vagrant
Vagrant 完成重讀設定檔以後,輸入Vagrant up 開啟Vagrant
使用者可以透過 vagrant box list 查看現有的box
vagrant box remove box檔名 可以刪除匯入的box檔
要刪除以安裝的環境檔要透過 vagrant distroy來進行刪除
接著系統會將Vagrant file 的設定載入 Vagrant
輸入 vagrant ssh 透過ssh登入虛擬環境
三、打包Vagrant package
建立一個vagrant 最大的優點就是他的可攜性,使用者只需建議一個完整的環境,將其打包成box檔,傳給其他人以後都可以使用。
接著我們要來學習怎麼打包一個vagrant
vagrant 打包的指令是::vagrant package --output 檔名.box (檔名的命名由使用者自己取一個)
接著來練習打包現有環境:我打包一個vagrant 環境 將其命名為testpackage
在終端機輸入:vagrant package --output testpackage.box
四、匯入Vagrant package
當我們收到別人傳來的vagrant package 要怎麼將其還原中,很簡單
只要輸入:vagrant box add 檔案名稱 testpackage.box 就可以匯入這個package.box
在輸入vagrant init 將這個環境初始化,在輸入vagrant up 就可以用啦
接著初始化這個box檔,輸入vagrant init test
接著開啟vagrant 輸入:vagrant up,啟動vagrant就完成了
參考資料
- A list of base boxes for Vagrant - Vagrantbox.es
- Vagrant can't mount shared folder in VirtualBox 4.3.10 · Issue #3341 · mitchellh/vagrant · GitHub
- Getting Started with Vagrant on OSX 10.10 Yosemite | Coolestguidesontheplanet.com | Neil Gee
- 用VM才是好的工程師-vagrant篇(入門版)使用Vagrant練習環境佈署
- 使用Vagrant練習佈署環境
- vagrant 原來virtualbox 可以這樣玩
- 用vagrant 練習建制環境
- 解放開發環境建制之原罪-vagrant
- 自製Vagrant Box