原文:http://blog.csdn.net/hel12he/article/details/51089774php
上一篇文章完整的講敘瞭如何安裝一個vagrant的環境。這裏主要說一說vagrant的配置文件Vagrantfile。我在嘗試各類技術的時候,經常苦惱於不少時候沒有教程把相關的配置信息說明完整。因此在個人博客裏,我必定會完整的把這塊給補上。nginx
在咱們的開發目錄下有一個文件Vagrantfile,裏面包含有大量的配置信息,主要包括三個方面的配置,虛擬機的配置、SSH配置、Vagrant的一些基礎配置。Vagrant是使用Ruby開發的,因此它的配置語法也是Ruby的,可是咱們沒有學過Ruby的人仍是能夠跟着它的註釋知道怎麼配置一些基本項的配置。web
box設置redis
config.vm.box = "CentOs7"
該名稱是再使用 vagrant init 中後面跟的名字。瀏覽器
hostname設置服務器
config.vm.hostname = "for_work"
設置hostname很是重要,由於當咱們有不少臺虛擬服務器的時候,都是依靠hostname來作識別的。好比,我安裝了php7 php56兩臺虛擬機,再啓動時,我能夠經過vagrant up php7來指定只啓動哪一臺。網絡
虛擬機網絡設置php7
config.vm.network "private_network", ip: "192.168.33.10" #config.vm.network "public_network"
Vagrant有兩種方式來進行網絡鏈接,一種是host-only(主機模式),意思是主機和虛擬機之間的網絡互訪,而不是虛擬機訪問internet的技術,也就是隻有你一個人自High,其餘人訪問不到你的虛擬機。另外一種是Bridge(橋接模式),該模式下的VM就像是局域網中的一臺獨立的主機,也就是說須要VM到你的路由器要IP,這樣的話局域網裏面其餘機器就能夠訪問它了。我通常設置爲host-only模式。
固然該模式,再指定ip的時候注意不要跟主機所在網段發生衝突。架構
同步目錄設置ssh
config.vm.synced_folder "/Users/helei/www", "/vagrant"
咱們上面介紹過/vagrant目錄默認就是當前的開發目錄,這是在虛擬機開啓的時候默認掛載同步的。咱們還能夠經過配置來設置額外的同步目錄。
端口轉發設置
config.vm.network :forwarded_port, guest: 80, host: 80
上面這句配置可厲害了,這一行的意思是把對host機器上8080端口的訪問請求forward到虛擬機的80端口的服務上,例如你在你的虛擬機上使用nginx跑了一個PHP應用,那麼你在host機器上的瀏覽器中打開http://localhost時,Vagrant就會把這個請求轉發到VM裏面跑在80端口的nginx服務上,所以咱們能夠經過這個設置來幫助咱們去設定host和VM之間,或是VM和VM之間的信息交互。
我的不建議使用該方法,常常由於兩臺機子端口占用的問題,致使不能正常通訊。仍是使用上面說的兩種網絡方式進行設置吧。
上面說的配置方式,均是單機模式,下面說說如何進行集羣機器的部署與配置,這是vagrant讓我正真激動與興奮的地方。
看完下面,你會以爲超級簡單
如今咱們來創建多臺VM跑起來,並且讓他們之間可以相通訊,假設一臺是應用服務器、一臺是Redis服務器,那麼這個結構在Vagrant中很是簡單,其實和單臺的配置差很少,你只須要經過config.vm.define來定義不一樣的角色就能夠了,如今咱們打開配置文件進行以下設置:
Vagrant.configure("2") do |config| config.vm.define :web do |web| web.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"] end web.vm.box = "CentOs7" web.vm.hostname = "web" web.vm.network :private_network, ip: "192.168.33.10" end config.vm.define :redis do |redis| redis.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "redis", "--memory", "512"] end redis.vm.box = "CentOs7" redis.vm.hostname = "redis" redis.vm.network :private_network, ip: "192.168.33.11" end end
這裏的的設置與設置單臺機器很是的相似,若是還須要機器,只須要再配置文件中拷貝一下,而後從新加載一下這個配置文件就ok啦。是否是很是容易?後面我打算學Hadoop的時候,就用這種方式來試試。
如今只須要從新啓動一下vagrant up機器,你就會在虛擬機中看到兩臺虛擬機歡快的跑起來了。
而後這個時候,在使用vagrant ssh登陸時,須要指明一下登陸的是哪一臺機器就ok啦。
好比,我要登陸到redis中去。
vagrant ssh redis
這麼簡單就完成登陸了。登陸成功後,可使用ping命令,檢查一下機器之間是否可以互相通訊。
好吧,本地有了如此利器,你想模擬那樣的服務器架構,均可以完成了,只有你的單機足夠強大,你能夠開20臺虛擬機,請隨意。