做web開發少不了要在本地搭建好開發環境,雖然說目前各種腳本都有對應的windows版,甚至是一鍵安裝包,但很多時候和windows環境的相性并不是那么好,各麻煩的問題是實際部署的環境通常是linux,常常還要面臨著開發和部署環境不一致,上線前還要大量的調試。
Windows下玩Linux少不了虛擬機,但裝系統依舊是相當費事。在現在什么都在自動化的今天,Vagrant就是這么一個神器,基于Ruby開發,使用開源 VirtualBox 作為虛擬化支持,可以輕松的跨平臺部署。
今天試著把幾臺機器的環境都換成Vagrant,很爽很順暢,我本人實測發現,運行一個centos只需要不到60兆內存,相當的給力。
下面說下安裝步驟,順便把注意點說一下!
準備工作:
下載安裝 VirtualBox :https://www.virtualbox.org/
下載安裝 Vagrant :http://www.vagrantup.com/
下載需要使用的 box :
官方提供的范例:http://files.vagrantup.com/precise32.box
還可以在 http://www.vagrantbox.es/ 這里下載更多不同系統甚至是已經配置好環境直接可以用的box,雖然可以直接在Vagrant直接使用網址,由Vagrant自動下載安裝,但是考慮到網絡情況,還是建議自行先下載好。
由于習慣用CentOS,于是我就下了CentOS 6.3 x86_64 minimal,這個Box根據個人情況進行選擇即可。
設置環境:
安裝完成并且重啟好系統之后就可以開始設置環境了。
首先在本地創建好工作目錄,并在命令行下切換到對應目錄
vagrant?box?add?base?CentOS-6.3-x86_64-minimal.box
base 表示指定默認的box,也可以為box指定名稱,比如 centos63 ,使用base時,之后可以直接使用 vagrant init 進行初始化,如果自行指定名稱,則初始化的時候需要指定box的名稱。
CentOS-6.3-x86_64-minimal.box 是box對應的文件名,這里可以是本地保存box的路徑,也可以是可以下載box的網址,如果是網址的話,Vagrant會自動啟動下載。
[vagrant]?Downloading?with?Vagrant::Downloaders::File... [vagrant]?Copying?box?to?temporary?location... [vagrant]?Extracting?box... [vagrant]?Verifying?box... [vagrant]?Cleaning?up?downloaded?box...
設置好box之后,在當前工作目錄運行
vagrant?init
生成對應的Vagrantfile。通過文本編輯器打開Vagrantfile可以進行一些進一步的常用配置:
網絡配置:
Vagrant的網絡有三種模式
1、較為常用是端口映射,就是將虛擬機中的端口映射到宿主機對應的端口直接使用 ,在Vagrantfile中配置:
config.vm.network?:forwarded_port,?guest:?80,?host:?8080
guest: 80 表示虛擬機中的80端口, host: 8080 表示映射到宿主機的8080端口。
2、如果需要自己自由的訪問虛擬機,但是別人不需要訪問虛擬機,可以使用private_network,并為虛擬機設置IP ,在Vagrantfile中配置:
config.vm.network?:private_network,?ip:?"192.168.1.104"
192.168.1.104 表示虛擬機的IP,多臺虛擬機的話需要互相訪問的話,設置在相同網段即可
3、如果需要將虛擬機作為當前局域網中的一臺計算機,由局域網進行DHCP,那么在Vagrantfile中配置:
config.vm.network?:public_network
目錄映射:
既然是開發環境,那么開發工作肯定還是需要在本地完成,而不是都要進到虛擬機中去完成,虛擬機就好好在后臺運行服務就好了,不然就本末倒置了,所以這里就需要使用目錄映射功能,將本地的目錄映射到虛擬機的對應目錄。
默認情況下,當前的工作目錄,會被映射到虛擬機的 /vagrant 目錄,當前目錄下的文件可以直接在 /vagrant 下進行訪問,當然也可以在通過 ln 創建軟連接,如
ln?-fs?/vagrant/wwwroot?/var/www
來進行目錄映射,當然,從自動化配置的角度,能不進系統就不需要進系統,所以在Vagrant也可以進行目錄映射的操作:
config.vm.synced_folder?"wwwroot/",?"/var/www"
前面的參數 “wwwroot/” ?表示的是本地的路徑,這里使用對于工作目錄的相對路徑,這里也可以使用絕對路徑,比如: “d:/www/”
后面的參數 “/var/www” 表示虛擬機中對應映射的目錄。
運行腳本:
雖然不是必須,但是如果有需要在啟動時運行一些腳本(環境的安裝或者有些服務的啟動需要在完成目錄映射之后進行),可以編輯腳本,類似如下(摘自Vagrant Document):
#!/usr/bin/env?bash apt-get?update apt-get?install?-y?apache2 rm?-rf?/var/www ln?-fs?/vagrant?/var/www
保存在和Vagrantfile相同目錄,文件名自取(如 boot.sh),然后在Vagrantfile中添加:
config.vm.provision?:shell,?:path?=>?"boot.sh"
?當初次使用基本的設置都完成則之后,則可以使用 vagrant up 啟動虛擬機
Bringing?machine?'default'?up?with?'virtualbox'?provider... [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]?You?are?trying?to?forward?to?privileged?ports?(ports??<strong>2222</strong>?(adapter?1) [default]?--?80?=>?8080?(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]?The?guest?additions?on?this?VM?do?not?match?the?installed?version?of?VirtualBox!?In?most?cases?this?is?fine,?but?in?rare?cases?it?can?cause?things?such?as?shared?folders?to?not?work?properly.?If?you?see?shared?folder?errors,?please?update?the?guest?additions?within?the?virtual?machine?and?reload?your?VM. Guest?Additions?Version:?4.1.18 VirtualBox?Version:?4.2 [default]?Mounting?shared?folders... [default]?--?/var/www [default]?--?/vagrant [default]?Running?provisioner:?shell...
虛擬機啟動之后則可以通過 vagrant ssh 聯入虛擬機進行進一步的環境配置,或者軟件安裝相關的工作,在Windows系統下,并不能直接通過 vagrant ssh 連到虛擬機,需要使用 Putty,Xshell 等第三方工具進行連接
連接的IP和端口根據網絡環境配置的不同有所不同,如果是默認使用端口映射的話,一般是連接 本地的2222端口。
登錄的帳號密碼均為 vagrant ,登錄之后如果需要 su root ,密碼也是 vagrant
注:使用 vagrant ssh 時,會提示可以使用密鑰進行登錄,如果需要使用putty進行密鑰登錄的話,需要下載 puttygen 將 ssh 的密鑰轉換為 ppk 文件才能使用。
登錄ssh完成環境的配置,如果在開發環境中使用webserver(nginx/apache)為了避免一些靜態文件處理的問題,可能還需要進行一些額外的配置:Vagrant下共享目錄靜態文件(js/jpg/png等)“緩存”問題
在不進入虛擬機的情況下,還可以使用下面的命令對 虛擬機進行管理:
vagrant?up?(啟動虛擬機) vagrant?halt?(關閉虛擬機——對應就是關機) vagrant?suspend?(暫停虛擬機——只是暫停,虛擬機內存等信息將以狀態文件的方式保存在本地,可以執行恢復操作后繼續使用) vagrant?resume?(恢復虛擬機?——?與前面的暫停相對應) vagrant?destroy?(刪除虛擬機,刪除后在當前虛擬機所做進行的除開Vagrantfile中的配置都不會保留) 當在啟動Vagrant后,對于虛擬機有進行過安裝環境相關的配置,如果并不希望寫在Vagrant的啟動shell里面每次都重新安裝配置一遍,可以將當前配置好的虛擬機打包成box, vagrant?package?--output?NAME?--vagrantfile?FILE
可選參數:
–output NAME : (可選)設置通過NAME來指定輸出的文件名
–vagrantfile FILE:(可選)可以將Vagrantfile直接封進box中
注:如果網絡模式中使用 private_network 的話,在打包之前需要清除一下private_network的設置,避免不必要的錯誤:
sudo?rm?-f?/etc/udev/rule.d/70-persistent-net.rules
制作完成之后直接將box文件拿到其他計算機上配置即可使用。
注意點: 1.如果在windows下無法啟動,則可以開啟box的gui端,這樣就可以看到出現什么問題。
開啟方法:
修改Vagrantfile文件,添加一下內容:
config.vm.provider :virtualbox do |vb|
? vb.gui = true
end
我就遇到了這個問題,虛擬機需要VT虛擬技術支持,所以要開啟VT