[Vagrant入門一(轉)]
閱讀目錄
VirtualBox安裝
Vagrant安裝
Vagrant配置
links
原文: https://github.com/astaxie/Go-best-practice/blob/master/ebook/zh/01.2.md
1.2 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 64http://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.boxvagrant box add base https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.boxvagrant box add base CentOS-6.3-x86_64-minimal.boxvagrant 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/LinuxUbuntu 10.04.4 LTSWelcome to the Ubuntu Server! * Documentation: http://www.ubuntu.com/server/docNew 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
系統信息
進入系統之后我們可以看一下系統的基礎信息:
vagrant@lucid64:/vagrant$ df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/lucid64-root 78G 945M 73G 2% /none 179M 176K 179M 1% /devnone 184M 0 184M 0% /dev/shmnone 184M 64K 184M 1% /var/runnone 184M 0 184M 0% /var/locknone 184M 0 184M 0% /lib/init/rwnone 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的人還是可以跟著它的注釋知道怎么配置一些基本項的配置。
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。
網絡設置
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地址。
hostname設置
hostname的設置非常簡單,Vagrantfile中加入下面這行就可以了:
config.vm.hostname = "go-app"
設置hostname
非常重要,因為當我們有很多臺虛擬服務器的時候,都是依靠hostname
來做識別的,例如Puppet或是Chef,都是通過hostname
來做識別的,既然設置那么簡單,所以我們就別偷懶,設置一個。
同步目錄
我們上面介紹過/vagrant
目錄默認就是當前的開發目錄,這是在虛擬機開啟的時候默認掛載同步的。我們還可以通過配置來設置額外的同步目錄:
config.vm.synced_folder "/Users/astaxie/data", "/vagrant_data"
上面這個設定,第一個參數是主機的目錄,第二個參數是虛擬機掛載的目錄
端口轉發
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更新后的配置