2014年2月14日 星期五

解放開發環境建置之原罪 - Vagrant / Brief Introduction of Vagrant

什麼是 Vagrant?


* Vagrant 是一套用來管理與建置虛擬機器的工具。對於需要在許多不同環境下開發與測試的開發者來講可有很大的幫助。

* 以往開發者在進行專案測試前,都要花費許多時間進行環境的建置。一段時間後,當環境變髒亂時。開發者又要重新整理,甚至是重新建置整個測試環境。這不僅耗費開發者大量的時間,也耗盡開發者不少精力。而這些瑣碎事都可透過 Vagrant 來進行管理,您說這是不是太棒了!:-D


Vagrant 可以幫開發者做什麼?


* 簡單的說,它可以協助開發者快速建置多台虛擬機器,並依照開發或測試環境需求,針對每台虛擬機器進行不同的環境設定。

* 複雜的說,假設今天開發者需要在不同的 PHP 版本中測試自己寫的程式。Vagrant 可幫助開發者在短時間內以同樣一個 box (也就是虛擬機器的 image ) 為基礎,虛擬出多台虛擬機器。隨後透過 provision 功能幫開發者在不同機器上安裝不同版的的 PHP。


如何安裝 Vagrant?


* 本文中的範例,是基於 Debian 作業系統上進行安裝的。因此在官方網站上 http://www.vagrantup.com/downloads.html 要下載 DEBIAN/UBUNTU 的安裝檔案。此外,在安裝 Vagrant 前,請先確定您的系統上已安裝 VirtualBox 了!否則 Vagrant 會無用武之地的!關於在 Debian 上安裝 Virtualbox 的教學,在 Oracle 的官方網站上已有詳細步驟,在此就麻煩各位自行前去觀看囉!

* 載下來後,使用 dpkg 來安裝 Vagrant:
sudo dpkg -i vagrant_1.4.3_i686.deb


建置虛擬機器!


* 安裝後,我們可以上 http://www.vagrantbox.es/ 下載許多熱心開發者所製作的 box 。本文中,我們挑選的是 http://tools.swergroup.com/downloads/wheezy32.box 。載下來後,即可使用 Vagrant 指令開始建立虛擬機器囉!

* 首先建立 Vagrant_demo 資料夾,並進入該資料夾。
mkdir Vagrant_demo
cd Vagrant_demo

* 接著使用 vagrant box add {boxname} {image} 來建立,image 就是上面我們載下來的 wheezy32.box。boxname 則是依據 wheezy32.box 為基底來創建一個名為 boxname 的box。以下,我們將創建一個以 wheezy32.box 為基底的 box,名為 wheezy32-o。
vagrant box add {wheezy32-o} {wheezy32.box}

* 新增完一 box 後,我們可以用 Vagrant box list 指令來觀看現在已建立的 box 有哪些。
Vagrant box list
輸入該指令後,系統印出下方訊息:
{wheezy32-o} (virtualbox)
wheezy32-o 是 box 名稱,而 virtualbox 則是控制該台 box 的 controller。(Vagrant 也可以用 VMware 來控制 box。)

* 隨後,我們用 Vagrant init wheezy32-o 來產生 Vagrant 的靈魂,也就是 Vagrantfile
Vagrant init wheezy32-o
在此檔案中(檔案內容如下),進行設定後,將可以產生許多以 wheezy32-o 這個 box 為基底的虛擬機器。以下將簡單介紹如何在設定檔中進行設定:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
   
    # 設定各虛擬機器都是以 bash 環境來執行
    config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
    
    # 建立一台名為 web 的虛擬機器
    config.vm.define "web" do |web|
    
        # 該虛擬機器是以 wheezy32-o 當基底
        web.vm.box = "{wheezy32-o}"
       
        # 建立完機器後,我們可將細部設定寫在 web.sh,vagrant 透過 provision 會將設定套用在 web 機器上
        web.vm.provision :shell, :path => "/home/user/vagrant_demo/web.sh"
       
    end
     
    # 建立一台名為 sql 的虛擬機器
    config.vm.define "sql" do |sql|
     
        # 該虛擬機器是以 wheezy32-o 當基底
        sql.vm.box = "{wheezy32-o}"
       
        # 建立完機器後,我們可將細部設定寫在 sql.sh,vagrant  透過 provision 會將設定套用在 sql 機器上
        sql.vm.provision :shell, :path => "/home/user/vagrant_demo/sql.sh"
       
    end
     
    # virtualbox 相關設定
    config.vm.provider :virtualbox do |vb|
        
        # 讓虛擬機器得以 gui 方式運行
        vb.gui = true
        
    end
      
end 


注入虛擬機器靈魂後,喚醒的時刻來臨!


* 一切都準備妥當後,我們只要輸入 vagrant up 指令,即可看見 VirtualBox 依序建立並運行兩台不同環境配置的虛擬機器了!我們可以使用 vagrant ssh <虛擬機器名稱> 來登入不同的虛擬機器:
# 喚醒機器們!
vagrant up --provision
  
# ssh 登入 web 機器
vagrant ssh web
  
# ssh 登入 sql 機器
vagrant ssh sql

以上,就是對於 Vagrant 的簡單介紹與操作。後續我們將繼續深入探討 vagrant 其他更靈活的操作與應用。


參考資料:

http://www.vagrantup.com/


沒有留言: