FIELD NOTES / WLDANDAN

Happy Coding, Happy Life

Systems, software & the craft of making things work.

EST.
2013

INDEX / VAGRANT

Vagrant

· Vagrant

Vagrant Learning - 4 (Provision)

###如何安装应用

当我们第一次使用Box创建VM时,它通常是个没有装太多应用的裸机。所以,就会面临一个问题: 如何快速并有效的安装工作需要的软件,如数据库、Web服务器等?

目前,基本上有两种方式:

####手动安装

· Vagrant

Vagrant Learning - 3 (Box)

###什么是Vagrant Box

谈论完了Vagrantfile,让我们看看Vagrant的另外一个重要概念Box。它是Vagrant运行VM的必要条件。 基本上,从头开始建立一个VM是相当耗时的工作,于是Vagrant使用一个基础映像(base image), 克隆它并快速创建一个可用的VM。
在Vagrant的世界里,所有这些基础映像统称为Box。简单地说,Box可以理解为创建VM时需要的模板,通过这些模板,我们可以创建VM。

· Vagrant

Vagrant Learning - 2 (Configuration)

###Vagrantfile

Vagrantfile是Vagrant启动并设置VM的配置文件,每个VM都必须有一个Vagrantfile。 当执行Vagrant init,Vagrant便会帮我们生成一个默认的Vagrantfile。 当然,不同的VM可以根据需求更改Vagrantfile的配置信息。

对于开发团队,我们可以将Vagrant配置文件放入版本管理系统,从而整个团队能够共享并不断改进该文件,在团队内部提供一种方便快捷的方式,构建产品运行环境。

譬如,我们可以执行如下代码生成Vagrantfile

mkdir vm && cd vm  
vagrant init precise64 http://files.vagrantup.com/precise64.box

Vagrant会提示

A Vagrantfile has been placed in this directory. You are now
ready to 'vagrant up' your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
'vagrantup.com' for more information on using Vagrant.

查看当前目录,会发现Vagrantfile已经生成。

· Vagrant

Vagrant Learning - 1 (Basic Concepts)

为什么选择Vagrant

  • 能够构建可配置的、轻量级的、便携式的虚拟服务器
  • 安装简单,提供不同平台的安装包
  • 一条命令即可创建出虚拟机环境,而且官方提供各种虚拟机的模板。
  • 能够最大化的帮助个人或者团队快速配置环境。譬如说,如果你是团队中的一员,通过Vagrant创建出一套独立的运行环境后,团队的其他成员能够使用该配置,创建完全一样地工作环境。所以无论你是工作在Linux,Mac OS X或Windows ,所有的团队成员都能在同一环境下运行代码,拥有相同的依赖。告别环境不一致带来的问题。
  • 提供Shell、Chef或者Puppet的支持,能够利用这些工具(Infrastructure As Code的方式)配置环境。
  • 从1.2的版本开始,不但支持VirtualBox,VmWare, 还开始支持Amazon EC2。

· Vagrant

Vagrant - Make Dev Environment Easy

###背景介绍

  • 最近的Java项目是个同海外团队合作的遗留系统,包括数据库服务器、邮件服务器、Web服务器、FAST搜索引擎、JBOSS中间件等等节点。为了便于团队使用,我们在Amazon 的EC2上建立了一套完整的端到端的运行环境。

  • 团队成员在本地搭建了Web环境,数据库环境,便于开发及调试。但由于Mac上安装FAST并不是一件易事,因此在本地跑应用的时候依赖于Amazon EC2的FAST节点。

  • 持续集成、CI在当今的时代已经不是什么新鲜玩意了,越来越多的团队已经了解并运用在实践中。对于我们和海外客户共同开发的这种情况,CI挂了可不是太好,因此在每次提交代码之前,需要确保本地所有的测试都能通过,才能提交代码。

于是乎,问题就来了: