基於Vagrant的虛擬環境搭建流程

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

相關文章
相關標籤/搜索