Vagrant,基於Ruby開發,使用開源 VirtualBox 做爲虛擬化支持,能夠輕鬆的跨平臺部署。shell
一. 下載資源:apache
1 下載安裝 VirtualBox :https://www.virtualbox.org/緩存
2 下載安裝 Vagrant :http://www.vagrantup.com/bash
3 下載須要使用的 box :網絡
官方提供的範例:http://files.vagrantup.com/precise32.boxssh
還能夠在 http://www.vagrantbox.es/ 這裏下載更多不一樣系統甚至是已經配置好環境直接能夠用的box,雖然能夠直接在Vagrant直接使用網址,由Vagrant自動下載安裝,可是考慮到網絡狀況,仍是建議自行先下載好。.net
二. 添加鏡像到 Vagrant:vagrant
假設下載的鏡像存放路徑是 ~/box/test.box,在終端裏輸入:圖片
$ vagrant box add gsky ~/box/test.boxip
gsky 是咱們給這個 box 命的名字,~/box/test.box 是 box 所在路徑
三. 初始化開發環境:
1 建立一個開發目錄(好比:~/dev),你也可使用已有的目錄,切換到開發目錄裏,用 gsky 鏡像初始化當前目錄的環境:
$ cd ~/dev # 切換目錄
$ vagrant init gsky # 初始化
$ vagrant up # 啓動環境
2 啓動完成後,就能夠用 SSH 登陸虛擬機了,剩下的步驟就是在虛擬機裏配置要運行的各類環境和參數了。
$ vagrant ssh # SSH 登陸
$ cd /vagrant # 切換到開發目錄,也就是宿主機上的 `~/dev`
~/dev 目錄對應虛擬機中的目錄是 /vagrant
Windows 終端並不支持 ssh,因此須要安裝第三方 SSH 客戶端,好比:Putty、Cygwin 等。
登陸的賬號密碼均爲 vagrant ,登陸以後若是須要 su root ,密碼也是 vagrant
注:使用 vagrant ssh 時,會提示可使用密鑰進行登陸,若是須要使用putty進行密鑰登陸的話,須要下載 puttygen 將 ssh 的密鑰轉換爲 ppk 文件才能使用。
3 Vagrant 初始化成功後,會在初始化的目錄裏生成一個 Vagrantfile 的配置文件,能夠修改配置文件進行個性化的定製。
Vagrant 默認是使用端口映射方式將虛擬機的端口映射本地從而實現相似 http://localhost:80 這種訪問方式,這種方式比較麻煩,新開和修改端口的時候都得編輯。相比較而言,host-only 模式顯得方便多了。打開 Vagrantfile,將下面這行的註釋去掉(移除 #)並保存:
config.vm.network :private_network, ip: "192.168.33.10"
重啓虛擬機,這樣就能用 192.168.33.10 訪問這臺機器了,能夠把 IP 改爲其餘地址,只要不產生衝突就行。
4 目錄映射:
既然是部署環境,那麼開發工做確定仍是須要在本地完成,而不是都要進到虛擬機中去完成,虛擬機就好好在後臺運行服務就行了,否則就本末倒置了,因此這裏就須要使用目錄映射功能,將本地的目錄映射到虛擬機的對應目錄。
默認狀況下,當前的工做目錄,會被映射到虛擬機的 /vagrant 目錄,當前目錄下的文件能夠直接在 /vagrant 下進行訪問,固然也能夠在經過 ln 建立軟鏈接,如
ln -fs /vagrant/wwwroot /var/www
來進行目錄映射,固然,從自動化配置的角度,能不進系統就不須要進系統,因此在Vagrant也能夠進行目錄映射的操做:
config.vm.synced_folder "wwwroot/", "/var/www"
前面的參數 「wwwroot/」 表示的是本地的路徑,這裏使用對於工做目錄的相對路徑,這裏也可使用絕對路徑,好比: 「d:/www/」.
後面的參數 「/var/www」 表示虛擬機中對應映射的目錄。
5 運行腳本:
雖然不是必須,可是若是有須要在啓動時運行一些腳本(環境的安裝或者有些服務的啓動須要在完成目錄映射以後進行),能夠編輯腳本,相似以下(摘自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 package
打包完成後會在當前目錄生成一個 package.box 的文件,將這個文件傳給其餘用戶,其餘用戶只要添加這個 box 並用其初始化本身的開發目錄就能獲得一個如出一轍的開發環境了。
PS:
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
五. 經常使用命令
$ vagrant init # 初始化
$ vagrant up # 啓動虛擬機
$ vagrant halt # 關閉虛擬機
$ vagrant reload # 重啓虛擬機
$ vagrant suspend (暫停虛擬機——只是暫停,虛擬機內存等信息將以狀態文件的方式保存在本地,能夠執行恢復操做後繼續使用)
$ vagrant resume (恢復虛擬機 —— 與前面的暫停相對應)
$ vagrant ssh # SSH 至虛擬機
$ vagrant status # 查看虛擬機運行狀態
$ vagrant destroy # 銷燬當前虛擬機
六. 注意事項
使用 Apache/Nginx 時會出現諸如圖片修改後但頁面刷新仍然是舊文件的狀況,是因爲靜態文件緩存形成的。須要對虛擬機裏的 Apache/Nginx 配置文件進行修改:
# Apache 配置添加:
EnableSendfile off
# Nginx 配置添加:
sendfile off;
能夠參考: http://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour