1. 程式人生 > >Vagrant安裝配置

Vagrant安裝配置

實際上Vagrant只是一個讓你可以方便設定你想要的虛擬機器的行動式工具,它底層支援VirtualBox、VMware甚至AWS作為虛擬機器系統,本書中我們將使用VirtualBox來進行說明,所以第一步需要先安裝Vagrant和VirtualBox。

VirtualBox安裝

VirtualBox是Oracle開源的虛擬化系統,它支援多個平臺,所以你可以到官方網站:https://www.virtualbox.org/wiki/Downloads/ 下載適合你平臺的VirtualBox最新版本並安裝,它的安裝過程都很傻瓜化,一步一步執行就可以完成安裝了。

Vagrant安裝

最新版本的Vagrant已經無法通過gem

命令來安裝,因為依賴庫太多了,所以目前無法使用gem來安裝,目前網路上面很多教程還是類似這樣的命令,那些都是錯誤的。目前唯一安裝的辦法就是到官方網站下載打包好的安裝包:http://www.vagrantup.com/downloads.html 他的安裝過程和VirtualBox的安裝一樣都是傻瓜化安裝,一步一步執行就可以完成安裝。

儘量下載最新的程式,因為VirtualBox經常升級,升級後有些介面會變化,老的Vagrant可能無法使用。

要想檢測安裝是否成功,可以開啟終端命令列工具,輸入vagrant,看看程式是不是已經可以運行了。如果不行,請檢查一下$PATH裡面是否包含vagrant

所在的路徑。

Vagrant配置

當我們安裝好VirtualBox和Vagrant後,我們要開始考慮在VM上使用什麼作業系統了,一個打包好的作業系統在Vagrant中稱為Box,即Box是一個打包好的作業系統環境,目前網路上什麼都有,所以你不用自己去製作作業系統或者製作Box:vagrantbox.es上面有大家熟知的大多數作業系統,你只需要下載就可以了,下載主要是為了安裝的時候快速,當然Vagrant也支援線上安裝。

建立開發環境目錄

我的開發機是Mac,所以我建立了如下的開發環境目錄,讀者可以根據自己的系統不同建立一個目錄就可以:

/Users/astaxie/vagrant

下載box

前面講了box是一個作業系統環境,實際上它是一個zip包,包含了Vagrant的配置資訊和VirtualBox的虛擬機器映象檔案.我們這一次的實戰使用官方提供了一個box:Ubuntu lucid 64 http://files.vagrantup.com/lucid64.box

當然你也可以選一個自己團隊在用的系統,例如CentOS、Debian等,我們可以通過上面說的地址下載開源愛好者們製作好的box。當然你自己做一個也行,下一節我會講述如何自己製作包。

新增box

新增box的命令如下:

vagrant box add base 遠端的box地址或者本地的box檔名

vagrant box add 是新增box的命令

base是box的名稱,可以是任意的字串,base是預設名稱,主要用來標識一下你新增的box,後面的命令都是基於這個標識來操作的。

例子:

vagrant box add base http://files.vagrantup.com/lucid64.box
vagrant box add base https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box
vagrant box add base CentOS-6.3-x86_64-minimal.box
vagrant box add "CentOS 6.3 x86_64 minimal" CentOS-6.3-x86_64-minimal.box

我在開發機上面是這樣操作的,首先進入我們的開發環境目錄/Users/astaxie/vagrant,執行如下的命令

vagrant box add base lucid64.box

安裝過程的資訊:

Downloading or copying the box...
Extracting box...te: 47.5M/s, Estimated time remaining: --:--:--)
Successfully added box 'base' with provider 'virtualbox'!

box中的映象檔案被放到了:/Users/astaxie/.vagrant.d/boxes/,如果在window系統中應該是放到了: C:\Users\當前使用者名稱\.vagrant.d\boxes\目錄下。

通過vagrant box add這樣的方式安裝遠端的box,可能很慢,所以建議大家先下載box到本地再執行這樣的操作。

初始化

初始化的命令如下:

vagrant init

如果你新增的box名稱不是base,那麼需要在初始化的時候指定名稱,例如

vagrant init "CentOS 6.3 x86_64 minimal"

初始化過程的資訊:

A `Vagrantfile` has been placed in this directory.
You are now ready to `vagrant up` your first virtual environment!
Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.

這樣就會在當前目錄生成一個 Vagrantfile的檔案,裡面有很多配置資訊,後面我們會詳細講解每一項的含義,但是預設的配置就可以開箱即用。

啟動虛擬機器

啟動虛擬機器的命令如下:

vagrant up

啟動過程的資訊:

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'base'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Mounting shared folders...
[default] -- /vagrant

連線到虛擬機器

上面已經啟動了虛擬機器,之後我們就可以通過ssh來連線到虛擬機器了。比如在我的開發機中可以像這樣來連線:

vagrant ssh

連線到虛擬機器後的資訊如下:

Linux lucid64 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc
New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 07:31:39 2012 from 10.0.2.2

這樣我們就可以像連線到一臺伺服器一樣進行操作了。

window機器不支援這樣的命令,必須使用第三方客戶端來進行連線,例如putty、Xshell4等.

putty為例:

主機地址: 127.0.0.1

埠: 2222

使用者名稱: vagrant

密碼: vagrant

系統資訊

進入系統之後我們可以看一下系統的基礎資訊:

[email protected]:/vagrant$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/lucid64-root
                       78G  945M   73G   2% /
none                  179M  176K  179M   1% /dev
none                  184M     0  184M   0% /dev/shm
none                  184M   64K  184M   1% /var/run
none                  184M     0  184M   0% /var/lock
none                  184M     0  184M   0% /lib/init/rw
none                   78G  945M   73G   2% /var/lib/ureadahead/debugfs
/dev/sda1             228M   17M  199M   8% /boot
/vagrant              298G   76G  222G  26% /vagrant

/vagrant這個目錄是自動對映的,被對映到/Users/astaxie/vagrant,這樣就方便我們以後在開發機中進行開發,在虛擬機器中進行執行效果測試了。

Vagrantfile配置檔案詳解

在我們的開發目錄下有一個檔案Vagrantfile,裡面包含有大量的配置資訊,主要包括三個方面的配置,虛擬機器的配置、SSH配置、Vagrant的一些基礎配置。Vagrant是使用Ruby開發的,所以它的配置語法也是Ruby的,但是我們沒有學過Ruby的人還是可以跟著它的註釋知道怎麼配置一些基本項的配置。

  1. box設定

    config.vm.box = "base"

    上面這配置展示了Vagrant要去啟用那個box作為系統,也就是上面我們輸入vagrant init Box名稱時所指定的box,如果沒有輸入box名稱的話,那麼預設就是base,VirtualBox提供了VBoxManage這個命令列工具,可以讓我們設定VM,用modifyvm這個命令讓我們可以設定VM的名稱和記憶體大小等等,這裡說的名稱指的是在VirtualBox中顯示的名稱,我們也可以在Vagrantfile中進行設定,在Vagrantfile中加入如下這行就可以設定了:

    config.vm.provider "virtualbox" do |v|
      v.customize ["modifyvm", :id, "--name", "astaxie", "--memory", "512"]
    end

    這行設定的意思是呼叫VBoxManage的modifyvm的命令,設定VM的名稱為astaxie,記憶體為512MB。你可以類似的通過定製其它VM屬性來定製你自己的VM。

  2. 網路設定

    Vagrant有兩種方式來進行網路連線,一種是host-only(主機模式),意思是主機和虛擬機器之間的網路互訪,而不是虛擬機器訪問internet的技術,也就是隻有你一個人自High,其他人訪問不到你的虛擬機器。另一種是Bridge(橋接模式),該模式下的VM就像是區域網中的一臺獨立的主機,也就是說需要VM到你的路由器要IP,這樣的話局域網裡面其他機器就可以訪問它了,一般我們設定虛擬機器都是自high為主,所以我們的設定一般如下:

    config.vm.network :private_network, ip: "11.11.11.11"

    這裡我們虛擬機器設定為hostonly,並且指定了一個IP,IP的話建議最好不要用192.168..這個網段,因為很有可能和你局域網裡面的其它機器IP衝突,所以最好使用類似11.11..這樣的IP地址。

  3. hostname設定

    hostname的設定非常簡單,Vagrantfile中加入下面這行就可以了:

    config.vm.hostname = "go-app"

    設定hostname非常重要,因為當我們有很多臺虛擬伺服器的時候,都是依靠hostname來做識別的,例如Puppet或是Chef,都是通過hostname來做識別的,既然設定那麼簡單,所以我們就別偷懶,設定一個。

  4. 同步目錄

    我們上面介紹過/vagrant目錄預設就是當前的開發目錄,這是在虛擬機器開啟的時候預設掛載同步的。我們還可以通過配置來設定額外的同步目錄:

    config.vm.synced_folder  "/Users/astaxie/data", "/vagrant_data"

    上面這個設定,第一個引數是主機的目錄,第二個引數是虛擬機器掛載的目錄

  5. 埠轉發

    config.vm.network :forwarded_port, guest: 80, host: 8080

    上面這句配置可厲害了,這一行的意思是把對host機器上8080埠的訪問請求forward到虛擬機器的80埠的服務上,例如你在你的虛擬機器上使用nginx跑了一個Go應用,那麼你在host機器上的瀏覽器中開啟http://localhost:8080時,Vagrant就會把這個請求轉發到VM裡面跑在80埠的nginx服務上,因此我們可以通過這個設定來幫助我們去設定host和VM之間,或是VM和VM之間的資訊互動。

修改完Vagrantfile的配置後,記得要用vagrant reload命令來重啟VM之後才能使用VM更新後的配置