vagrant之運維,搭建統一開發環境

      特色:經過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等等

https://oneinstack.com/install/

相關文章
相關標籤/搜索