原文: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台虚拟机,请随意。