特色:經過vagrant打包環境,能夠跨平臺使用。意思就是在windows下可使用ubuntu系統配置的環境
node
使用的平臺:windows+64位web
須要準備的工具:shell
virtualbox:虛擬機 https://www.virtualbox.org/wiki/Downloads
apache
vagrant:下載地址 http://downloads.vagrantup.com/
ubuntu
下載須要使用的 box
vim
經過 http://www.vagrantbox.es/ 進行下載
windows
*通常操做命令bash
vagrant box add NAME URL #添加一個box服務器
vagrant box list #查看本地已添加的box網絡
vagrant box remove NAME virtualbox #刪除本地已添加的box,如如果版本1.0.x,執行$ vagrant box remove NAME
vagrant init NAME #初始化,實質應是建立Vagrantfile文件
vagrant up #啓動虛擬機
vagrant halt #關閉虛擬機
vagrant destroy #銷燬虛擬機
vagrant reload #重啓虛擬機
vagrant package #當前正在運行的VirtualBox虛擬環境打包成一個可重複使用的box
vagrant ssh #進入虛擬環境
*vagrantfile文件的做用:
配置這個虛擬主機網絡鏈接方式,端口轉發,同步文件夾,以及怎麼和puppet,chef結合的一個配置文件。執行完$ vagrant init後,在工做目錄中,你會發現此文件。
NOTE:配置版本說明:
Vagrant.configure(
"2"
)
do
|config|
# ...
end
|
當前支持的兩個版本:"1"和"2". "1":描述是Vagrant 1.0.x的配置(如看到Vagrant::Config.run do |config| 此也爲Vagrant 1.0.x 的配置);"2":描述的是1.1+ leading up to 2.0.x的配置。vagrant 1.1+ 的Vagrantfiles可以與vagrant 1.0.x的Vagrantfiles保持向後兼容,也大幅引入新的功能和配置選項。
配置網絡(本文將提供2種版本的經常使用配置,其中版本1的配置通過實踐驗證)
(1) 端口轉發:(假設虛擬機的80端口提供web服務,此處將經過訪問物理機的8080端口轉發到虛擬機的80端口,來實現web的訪問)
版本"2":
Vagrant.configure(
"2"
)
do
|config|
config.vm.network :forwarded_port, guest: 80, host: 8080
end
|
版本"1"
Vagrant::Config.run
do
|config|
# Forward guest port 80 to host port 8080
config.vm.forward_port 80, 8080
end
|
(2)橋接網絡(公共網絡,局域網DHCP服務器自動分配IP)
版本"2"
Vagrant.configure(
"2"
)
do
|config|
config.vm.network :public_network
end
|
版本"1"
Vagrant::Config.run
do
|config|
config.vm.network :bridged
end
|
$ VBoxManage list bridgedifs | grep ^Name #可經過此命令查看本機的網卡
Name: eth0
指定網卡,配置可寫爲以下:
Vagrant::Config.run
do
|config|
config.vm.network :bridged, :bridge =>
"eth0"
end
|
(3) 私有網絡:容許多個虛擬機經過主機經過網絡互相通訊,vagrant容許用戶分配一個靜態IP,而後使用私有網絡設置。
版本"2"
Vagrant.configure(
"2"
)
do
|config|
config.vm.network :private_network, ip:
"192.168.50.4"
end
|
版本"1"
Vagrant::Config.run
do
|config|
config.vm.network :hostonly,
"192.168.50.4"
end
|
同步文件夾
默認的,vagrant將共享你的工做目錄(即Vagrantfile所在的目錄)到虛擬機中的/vagrant,因此通常不需配置便可,如你須要可配置:
版本"2"
Vagrant.configure(
"2"
)
do
|config|
# other config here
config.vm.synced_folder
"src/"
,
"/srv/website"
end
|
"src/":物理機目錄;"/srv/website"虛擬機目錄
vagrant和shell(實如今虛擬機啓動的時候自運行須要的shell命令或腳本)
版本"2"
內嵌腳本:
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :shell,
:inline =>
"echo Hello, World"
end
|
複雜點的調用以下:
$script = <<SCRIPT
echo I am provisioning...
date > /etc/vagrant_provisioned_at
SCRIPT
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :shell, :inline => $script
end
|
外部腳本:
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :shell, :path =>
"script.sh"
#腳本的路徑相對於項目根,也可以使用絕對路徑
end
|
腳本可傳遞參數:
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :shell
do
|s|
s.inline =
"echo $1"
s.args =
"'hello, world!'"
end
end
|
版本"1":
內部腳本:
Vagrant::Config.run
do
|config|
config.vm.provision :shell, :inline =>
"echo abc > /tmp/test"
end
|
外部腳本:
Vagrant::Config.run
do
|config|
config.vm.provision :shell, :path =>
"test.sh"
end
|
腳本參數:
Vagrant::Config.run
do
|config|
config.vm.provision :shell
do
|shell|
shell.inline =
"echo $1 > /tmp/test"
shell.args =
"'this is test'"
end
end
|
vagrant和puppet(若是不知道puppet,請看這裏http://xuclv.blog.51cto.com/blog/5503169/1154261)
(1) vagrant調用puppet單獨使用
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :puppet
do
|puppet|
puppet.manifests_path =
"my_manifests"
#路徑相對於項目根,如無配置此項,默認爲manifests
puppet.manifest_file =
"default.pp"
#如無配置此項,默認爲default.pp
puppet.module_path =
"modules"
#路徑相對於根
puppet.options =
"--verbose --debug"
end
end
|
默認配置的目錄結構:
$ tree
.
|-- Vagrantfile
|-- manifests
| |-- default.pp
(2) vagrant讓puppet做爲代理,鏈接Puppet master
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :puppet_server
do
|puppet|
puppet.puppet_server =
"puppet.example.com"
#master域名
puppet.puppet_node =
"node.example.com"
#傳遞給puppet服務器節點的名稱。默認爲」puppet「
puppet.options =
"--verbose --debug"
#選項
end
end
|
NOTE:
版本1配置差異不大,再也不詳述,區別:Vagrant.configure("2") do |config|改成Vagrant::Config.run do |config|
以上Vagrantfile配置完畢後,可$ vagrant reload 重啓虛擬機以來實現配置生效
官方給了一個例子(可嘗試玩玩):
1.進入工做目錄
2.修改Vagrantfile
$ vim Vagrantfile #啓用或添加以下行:
Vagrant.configure(
"2"
)
do
|config|
config.vm.provision :puppet
#這裏沒有配置pp文件等的路徑,所有采用默認
end
end
|
3.建立puppet的主目錄
$ mkdir manifests
4.配置pp文件
$ vim manifests/default.pp
# Basic Puppet Apache manifest
class
apache {
exec {
'apt-get update'
:
command =>
'/usr/bin/apt-get update'
}
package
{
"apache2"
:
ensure => present,
}
service {
"apache2"
:
ensure => running,
require => Package[
"apache2"
],
}
file {
'/var/www'
:
ensure => link,
target =>
"/vagrant"
,
notify => Service[
'apache2'
],
force =>
true
}
}
include
apache
5.重啓虛擬機
$ vagrant reload #重啓後可看到虛擬機中已經安裝好了apache
後記:
總的來講vagrant仍是一個簡單好用的軟件,經常使用於和puppet或者chef結合,實現測試環境的自動化部署,保證了測試環境的快速建立,便捷部署,一致性,同時也便於銷燬。另,這裏不經常使用chef,因此此篇文章不對其進行介紹,有興趣的能夠自行研究.
推薦一個shell集成安裝環境,lnmp/lamp等等