使用 Vagrant 配置团队虚拟开发环境

vagrant

http://www.vagrantup.com/
https://github.com/mitchellh/vagrant

安装

Vagrant 是基于VirtualBox的,所以在使用之前请确保其已安装。

下载安装

Vagrant 提供了不同平台的安装文件,到下载页面 进行下载安装即可。

配置第一台虚拟机

1
2
$ vagrant init precise32 http://files.vagrantup.com/precise32.box
$ vagrant up

以上是官方给出的安装方式,特别简单,但对于墙内的人来说就没这般方便了。这里更推荐手工下载的安装方式,会省去一些时间。

1.下载镜像包

Ubuntu precise 32 (Ubuntu 12.04 LTS X86) http://files.vagrantup.com/precise32.box
Ubuntu precise 64 (Ubuntu 12.04 LTS AMD64) http://files.vagrantup.com/precise64.box

推荐用迅雷等多线程工具下载,更多版本的镜像包,可以参见这里:http://www.vagrantbox.es/

2.添加镜像到 Vagrant

推荐将下载的镜像存放在 ~/.vagrantbox/,如果Team使用的话,也可以把该文件放在服务器的共享目录里,然后指向到该目录即可,这样就方便于团队使用共同的开发环境,而修改时也只需要修改一处。

1
2
$ vagrant box add precise32 ~/.vagrantbox/precise32.box
# precise32 是自定义的一个box名字,接下来会用该名字的Base Box来建立新的虚拟机。

3.初始化开发环境

创建一个新的项目目录,用刚添加的precise32镜像来初始化当前项目的环境:

1
2
3
4
# 初始化环境
$ vagrant init precise32
# 启动环境
$ vagrant up

4.SSH登陆虚拟机

1
$ vagrant ssh

这样就完成了Vagrant的安装工作。

配置

- Vagrantfile

Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile 的配置文件,可以修改配置文件进行个性化的定制。

网络配置之 - Forwarded ports

Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:8080 ,使用这种方式,新开和修改端口的时候都要重新配置。

1
config.vm.network :forwarded_port, guest: 80, host: 8080

配置完成之后,要重启虚拟机,方能生效

1
2
vm$ exit
host$ vagrant reload
网络配置之 - Private networks

相比较而言,这种方式就好多了,会给虚拟机分配一个IP,然后在Host上可以访问VM内的所有端口。打开 Vagrantfile,将下面这行的注释去掉并保存:

1
config.vm.network :private_network, ip: "192.168.0.102"

重启虚拟机,这样我们就能用 192.168.0.102 访问这台机器了。

- 目录映射

Vagrant 自动将Host项目所在目录挂载到vm里的/vagrant下,想像下,组里每一个同事都用同一个Box,然后项目代码放到自己的目录里,却可以有同样的开发环境,如果需要修改,也只是统一的配置共用的box,该是多方便的一件事情啊!

- 打包分发

刚才提到过一个Team内的成员使用同一个Box,这就要用到打包的技术了。配置好共用的开发环境后,退出并关闭虚拟机,然后运行打包命令:

1
2
host$ vagrant halt
host$ vagrant package

打包完成后会在当前项目目录生成一个 package.box 的文件,其他用户只要添加这个 box 并用前篇的手工安装方式就可以创建一个一模一样的开发环境了。

- PROVISIONING

通过provisioning来创建初始化安装脚本,这里可以使用Shell,Chef或者Puppet。

这里就有一个rails的provisioning git repo,使用Puppet自动化创建Rails开发环境

更多官方文档:http://docs.vagrantup.com/v2/provisioning/index.html

常用命令

  • $ vagrant box list # 显示当前机器所有的镜像包
  • $ vagrant box add/remove # 添加/删除镜像包
  • $ vagrant init # 初始化
  • $ vagrant up # 启动虚拟机
  • $ vagrant halt # 关闭虚拟机
  • $ vagrant reload # 重启虚拟机
  • $ vagrant ssh # SSH 至虚拟机
  • $ vagrant status # 查看虚拟机运行状态
  • $ vagrant destroy # 销毁当前虚拟机

更多内容请查阅官方文档 http://docs.vagrantup.com/v2/cli/index.html

REF::

使用 Vagrant 打造跨平台开发环境
Using Vagrant as a Team

Vagrant,虚拟机管理工具
http://www.oschina.net/p/dvm
https://github.com/rails/rails-dev-box