你在本地搭建了一个开发环境,可能是为 php 准备的,你在这个本地的开发环境上面做了一个项目,当你把它迁移到真正的服务器上的时候,你发现了一些问题。这很可能是因为你的本地开发环境与服务器的生产环境之间是有区别的。慢慢地,你又想试一下 node ,因为它跟 JavaScript 的关系不错。或者又对 ruby 产生了兴趣,只因为她有个好听的名字。尝试这些你都需要去安装一些软件,去配置它们的运行环境,你越来越发现,管理这些环境可能会是个问题。
Vagrant 可以让你为每个项目都创建一个虚拟机,你可以选择虚拟机运行的操作系统,去配置需要的环境,比如安装 Web 服务器,数据库管理系统等等。项目的目录可以放在你的电脑上,它会跟虚拟机上的一个目录同步。你的电脑与虚拟机之间可以相互访问,所以,你可以像往常一样,用自己喜欢的编辑器去开发 Web 应用,然后用虚拟机上配置好的环境去运行你的项目。使用 Vagrant,你可以在本地电脑上用虚拟机去配置一个跟 Web 应用的生产环境一样的环境,一样的操作系统,一样的软件,一样的配置。你还可以与团队里的其他成员分享你的开发环境,
准备下载并安装下面这两样东西:
VirtualBox 是一款开源免费的虚拟机软件,跨平台,Windows ,OS X 都可以使用。Vagrant 也是跨平台的。这篇文章里的演示是在 OS X 操作系统下面完成。
boxbox 就是虚拟机的镜像,可以在 Vagrant Cloud 里面下载到,你可以选择自己想要的操作系统,这里我要用的是 CentOS 6.5,因为我的网站的生产环境,也打算用 CentOS 6.5 这个操作系统。这里我要用的是:
chef/centos-6.5回到命令行工具,去把这个 box 下载到本地电脑上,并且添加到 vagrant 里面:
vagrant box add chef/centos-6.5返回:
==> box: Loading metadata for box 'chef/centos-6.5' box: URL: vagrantcloud.com/chef/centos-6.5 This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) virtualbox 2) vmware_desktop因为我们用的是 VirtualBox ,所以,这里应该选择第一个选项,输入数字 1,然后回车。 这样 vagrant 会从 Vagrant Cloud 上下载我们指定的 box 。因为镜像包含操作系统,所以一般都比较大,几百 MB 到 几个 G 都有。
完成以后,输入下面命令来查看可以使用的 box :
vagrant box list返回:
chef/centos-6.5 (virtualbox, 1.0.0)现在,就可以用 CentOS-6.5 这个版本的操作系统来运行我们要开发的 Web 应用了。
初始化打开命令行工具,OS X 上面可以使用系统自带的终端工具,Windows 用户可以用命令提示符工具。然后先为项目创建一个目录,可以放在任何地方。我打算在当前登录用户的桌面上,创建一个叫 linuxidc.net 的目录:
cd ~/desktop mkdir linuxidc.net进入到为项目创建的这个目录:
cd linuxidc.net然后执行初始化项目的命令:
vagrant init chef/centos-6.5上面的命令就是使用之前我们下载并添加的 chef/centos-6.5 这个 box 去初始化一下项目,也就是,我们的项目会运行在 centos 6.5 这个版本的操作系统的虚拟机上。
执行了上面这行命令,会在项目的目录里面,生成一个叫 Vagrantfile 的文件,这个文件告诉了 vagrant 怎么样去运行这个虚拟机。
配置网络如果你想让你的电脑跟虚拟机之间可以相互通信,比如你在虚拟机上安装了一个 Web 服务器,你打算可以在本地电脑上,或者同一网络内的其它设备可以访问到这台虚拟机上的项目。这需要去做一些配置,有三种方式,端口转发(Forwarded Ports),私有网络(Private Network),公有网络(Public Network)。
下面,我们去配置一个公有网络,也就是,你可以在自己的电脑上通过一个内部的 ip 地址访问到虚拟机,在同一网络内的其它设备,也可以访问到这台虚拟机。
先打开项目目录下面的 Vagrantfile 文件。找到这行代码:
# config.vm.network "public_network"去掉它前面的 # 号:
config.vm.network "public_network"保存文件。
启动配置好网络以后,就可以去启动虚拟机了,确定当前所在的目录是项目的目录,然后执行:
vagrant up返回:
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'chef/centos-6.5'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'chef/centos-6.5' is up to date... ==> default: Setting the name of the VM: linuxidcnet_default_1404827171486_40050 ==> default: Fixed port collision for 22 => 2222. Now on port 2200. ==> default: Clearing any previously set network interfaces... ==> default: Available bridged network interfaces: 1) en1: Wi-Fi (AirPort) 2) en0: 以太网 3) en4: Thunderbolt 1 4) en3: Thunderbolt 2 5) p2p0 6) bridge0 default: What interface should the network bridge to?