标签:
使用 Vagrant 构建开发环境
摘要:本文描述了如使用 Vagrant 构建统一的开发环境。
作为开发人员,我们通常面临的问题有:
用虚拟机构建一致的环境,并且把安装和配置的过程自动化,这就是Vagrant所做的事情。按照Vagrant的流程:
这就是Vagrant之道(参看[5]第4页)。
Vagrant可以做下面这些事情:
Vagrant涉及的概念:
下面我们就用几个例子来说明Vagrant的使用。
请先下载、安装VirtualBox和Vagrant。因为Vagrant是用ruby开发的,你还要下载、安装Ruby。不论你的机器是Windows、Mac或者各种Linux发行版本,这几个软件都有相应的版本。
创建一个新目录,比如叫example。然后运行:
vagrant init hashicorp/precise64
在上述命令中指定了hashicorp/precise64为使用的box,这是Ubuntu 12.04 LTS,更多的信息可见https://atlas.hashicorp.com/hashicorp/boxes/precise64。第一次需要一个box时,Vagrant会自动下载该box到你的机器上,这通常位于<homedir>\.vagrant.d\boxes(例如,在Windows 7上,这就是C:\Users\myusername\.vagrant.d\boxes),以后就不必再次下载了。
上述会生成一个基本的Vagrant配置文件Vagrantfile,最简单的情况可以只有这一个文件。基本内容如下:
# Vagrantfile API/syntax version. Don‘t touch unless you know what you‘re doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "hashicorp/precise64" # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. config.vm.network "forwarded_port", guest: 80, host: 8080 end
这个文件指定了下面这些基本的配置:
config.vm.box = "hashicorp/precise64"
config.vm.network "forwarded_port", guest: 80, host: 8080
这会把虚拟机的80端口映射到主机的8080端口,在主机上通过localhost:8080就可以访问虚拟机了。同时,缺省会有另外一个映射,把虚拟机的22端口映射到主机的2222端口,这是为了允许从主机上通过SSH登录到虚拟机。
有了这个Vagrantfile配置文件,就可以启动虚拟机了。在命令行运行如下命令:
vagrant up
输出如下:
从上面的输出中,我们可以看到指定使用的box、端口的映射和共享目录的映射。
前面提到虚拟机22端口对主机2222端口的映射是用于SSH的,我们现在就可以用SSH登录虚拟机了。运行如下命令:
vagrant ssh
注:如果你的命令行没有对ssh的支持,就无法登录。在Windows上,可以在安装git的时候,有一个选项,选择添加相应的目录到系统路径中。
上述命令相应的输出为:
这就登录进入了虚拟机,在$提示符下可以使用Linux命令操纵虚拟机了。
第二个例子中,我们用VirtualBox和shell脚本来构建一个最基本的虚拟环境,用于使用Sphinx来生成文档。先创建一个新目录,比如叫docs,在其中创建一个新文件Vagrantfile,完整的配置为:
# Vagrantfile API/syntax version. Don‘t touch unless you know what you‘re doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "puphpet/ubuntu1404-x64" # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. # config.vm.synced_folder "../data", "/vagrant_data" config.vm.synced_folder ".", "/docs" config.vm.provider "virtualbox" do |v| v.name = "cakephp_docs" v.memory = 384 end config.vm.provision :shell, path: "provision.sh" end
最常用的Linux版本之一是Ubuntu 14.04,我们就以此为基础,在配置中指定使用puppet/ubuntu1404-x64 box:
config.vm.box = "puphpet/ubuntu1404-x64"
映射主机的当前目录(即Vagrantfile配置文件所在的目录)为虚拟机的/docs目录,这里会放置源代码控制下的文档源码*.rst文件:
config.vm.synced_folder "../../", "/docs"
另外,因为不需要从主机访问虚拟机的web服务器,所以没有配置网络。
再指定使用一个shell脚本,安装、配置sphinx:
config.vm.provision :shell, path: "provision.sh"
在同一目录下,再创建shell脚本文件povision.sh,其内容为:
#!/usr/bin/env bash echo "update apt repository..." apt-get update >/dev/null 2>&1 echo "Installing python-setuptools..." sudo apt-get install -y python-setuptools >/dev/null 2>&1 echo "Installing easy_install..." sudo apt-get install -y easy_install >/dev/null 2>&1 echo "Installing sphinx..." sudo easy_install sphinx==1.2 >/dev/null 2>&1 echo "Installing sphinxcontrib-phpdomain..." sudo easy_install sphinxcontrib-phpdomain >/dev/null 2>&1
该脚本使用apt-get安装两个软件包python-setuptools和easy_install,然后再用easy_install安装sphinx 1.2和sphinxcontrib-phpdomain。
这样就配置好了,运行
vagrant up vagrant ssh
之后,就通过SSH登录到虚拟机,可以在其中用sphinx从源代码构建html文档了。
在第三个例子中,我们使用PuPHPet为PHP配置一个LAMP开发环境。PuPHPet是一个网页的向导式界面,让你更容易地生成使用Puppet的Vagrant配置文件。
用浏览器打开https://puphpet.com。
第一步,选择部署目标,缺省为本地,使用VirtualBox。我们选择操作系统为Ubuntu 14.04 64位,如下图所示:
然后,设置虚拟机IP地址、内存、端口,以及目录映射,注意这里的目录是用来作为网站应用根目录的,如下图所示:
第二步,选择要在虚拟机上安装的软件包。我们选择Ubuntu的htop和vim,如下图所示:
第三步,防火墙规则,不需要做任何设置,略过:
第四步,选择web服务器,我们选择使用Apache,要安装rewrite模块,如下图所示:
再设置域名、网站根目录,允许设置多个VHOST,如下图所示:
第五步,选择语言PHP,以及相关的设置和需要的模块,如下图所示:
还可以选择需要的PHP库,如下图所示:
第六步,选择数据库MySQL,并且设置管理员密码,如下图所示:
然后创建数据库,允许创建多个数据库,如下图所示:
其中,/var/www/database/backup/2014-10-19_cakephp_blog.sql是在虚拟机中要恢复的数据库备份,这个路径和你在第一步中设置的目录映射有关。
第七步,选择其它工具,包括邮件工具Mailcatcher、队列工具Beanstalkd及RabbitMQ、搜索工具Elastic Search及Solr,如下图所示:
我们不使用任何额外工具,所以略过这一步。
第八步,也就是最后一步,完成,如下图所示:
点击那个大大的蓝色按钮“GO AHEAD THEN, MAKE IT!”,就可以下载一个将近3MB的puphpet.zip。打开这个.zip文件,可以看到按照我们前面第一至八步设置的Vagrantfile配置以及相应的Puppet模块,如下图所示:
把它解压到一个目录中,这些文件可以和PHP项目的源代码一起放入源码控制中,供项目团队的其他成员使用。
运行vagrant up,就可以得到一个运行的LAMP虚拟机了。在主机的hosts中加入下面这行:
192.168.56.102 www.cakephp3.dev # CakePHP 3
就可以在主机的浏览器上通过www.cakephp3.dev访问虚拟机上的网站了。
vagrant up # 启动、配置虚拟机
vagrant suspend # 休眠虚拟机
vagrant halt # 关闭虚拟机
vagrant destroy # 删除虚拟机
vagrant status # 当前目录下Vagrantfile配置对应的Vagrant虚拟机的状态,以及在此状态下可以使用的命令
vagrant global-status # 本机上所有Vagrant虚拟机的状态
更多的命令可以参考[3]中的Command-Line Interface。
标签:
原文地址:http://www.cnblogs.com/blackpuppy/p/vagrant_manage_development_environment.html