您的位置:首页 > 编程语言 > Ruby

使用Vagrant在Windows7下部署开发环境

2014-09-16 11:12 344 查看
使用Vagrant在Windows7下部署开发环境

重要申明:本文是参考了一篇我学习时的文章:http://blog.smdcn.net/article/1308.html。本文的很大一部分文字也是直接从这篇文章中粘贴而来,所以本文本不能完全归类为原创,但为了让读者发现本文中有助于学习的部分,我将其归类为原创。若网友或我引用的原文的作者为此有不同看法可以与我联系,同时也请见谅。

在开始之前,先要说明下我的环境,windows7 64位,32位都有安装,方法都一样,仅有一个小细节不同,后面会提到。

我学习ruby on rails之初是以windiow7作为开发环境的,遇到了很多莫名的问题,花费在上面的时间比学习程序本身的时间还要多,要命的是终于遇到一个解决不了的问题,而被迫转战linux。用Vagrant还有个好处,就是做Web开发少不了要在本地搭建好开发环境,虽然说目前各种脚本都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的兼容性并不是那么好,麻烦的问题是实际部署的环境通常是Linux,常常还要面临着开发和部署环境不一致,上线前还要大量的调试。更要命的是,如果有很多机器需要装的话,那就真是一个灾难了。

Vagrant就是这么一个神器,基于Ruby开发,使用开源 VirtualBox 作为虚拟化支持,可以轻松的跨平台部署。
下面开始:
1、下载最新的VirtualBox,并安装,下载地址:https://www.virtualbox.org/  安装过程一路点击下一步就行了。安装完成后可能需要将VirtualBox添加到环境变量中,以我的经验64位win7下已经自动添加了,win7 32位要手动添加。(环境变量的设置若是不懂,可自行百度,很简单。)

2、下载最新的Vagrant,并安装,下载地址:http://www.vagrantup.com/  安装过程一路点击下一步就行。

3、下载需要使用的 box 。
什么是box呢?可以简单的理解为一个被打包的用于VirtualBox的操作系统。我用的是ubuntu12.04 LTS版本。
这里给出三个下载box的地址:
a、官方提供的范例:http://files.vagrantup.com/precise32.box   我现在就是用的这个(是一个ubuntu12.04 LTS版本)。
b、http://www.vagrantbox.es/ 这里有很多不同系统甚至是已经配置好环境直接可以用的box。
c、这个应该是Vagrant对应的官网提供的box。
d、我自己安装了ruby2.1.1、rails4.1.5、git的box。(这些版本都是我安装是的最新版本,2014年8月)
这里再罗嗦一下:我在安装过程中其实是很不顺利的,因为我尝试过好几个box,都有这样那样的问题,有在b网址下载的,也有在c网址下载的。几经折腾,最后成功安装了a网址的box。

4、完成上面三个步骤,下面就开始为你的虚拟机安装系统。

a、首先在本地创建一个文件夹用于装载虚拟机,这个文件夹就相当于是你虚拟出来的这台机器了。例如我的是“e:\dev_space\virtual_machine”,然后在命令行下切换到对应目录。

b、为你的虚拟机安装操作系统,这个操作系统就是第3步下载的那个box。例如我的“e:\vbox\prices32.box”。命令行下:

vagrant box add base e:\vbox\prices32.box                                                       
base 表示指定默认的box名字,也可以为box指定自定义名称,比如 ubuntu ,使用base时,之后可以直接使用 vagrant init 进行初始化,如果自行指定名称,则初始化的时候需要指定box的名称。

prices32.box是box对应的文件名,这里可以是本地保存的box的路径,也可以是可以下载box的网址,如果是网址的话,Vagrant会自动启动下载。

c、box安装完成后,第一次启动虚拟机之前需要运行一条命令来生成一个配置文件vagrantfile,以后可以在这里作一些配置。
vagrant init                                                                                                            

到这里安装就完成了,下面就可以启动虚拟机了。不过在这之前可以先对vagrantfile文件进行一些简单配置,当然我你也可以在以后需要的时候再进行配置。

下面介绍一些常用的配置:
Vagrant的网络有三种模式

1、较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置:
config.vm.network :forwarded_port, guest: 80, host: 8080                                          
guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。

2、如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP ,在Vagrantfile中配置:
config.vm.network :private_network, ip: "192.168.1.104"                                             
192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可。

3、如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP,那么在Vagrantfile中配置:
config.vm.network :public_network                                                                               

目录映射:

既然是开发环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。
默认情况下,vagrantfile文件所在的目录会被映射到虚拟机的 /vagrant 目录,其目录下的文件可以直接在 /vagrant 下进行访问,当然也可以在通过 ln 创建软连接,如
ln -fs /vagrant/wwwroot /var/www                                                                                 
来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:
config.vm.synced_folder "wwwroot/", "/var/www"                                                         
前面的参数 “wwwroot/”  表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: “d:/www/”,后面的参数 “/var/www” 表示虚拟机中对应映射的目录。

运行脚本:
虽然不是必须,但是如果有需要在启动时运行一些脚本(环境的安装或者有些服务的启动需要在完成目录映射之后进行),可以编辑脚本,类似如下(摘自Vagrant Document):

#!/usr/bin/env

bashapt-get

updateapt-get

install -y apache2

rm -rf /var/www

ln -fs /vagrant /var/www

保存在和Vagrantfile相同目录,文件名自取(如 boot.sh),然后在Vagrantfile中添加
config.vm.provision :shell, :path => "boot.sh"                                     

d、当初次使用基本的设置都完成则之后,则可以使用 vagrant up 启动虚拟机
vagrant up                                                                                                   

e、这是虚拟机已经启动了,使用vagrant ssh可以连接到虚拟机。
vagrant ssh                                                                                                   

联入虚拟机进行进一步的环境配置,或者软件安装相关的工作,在Windows系统下,并不能直接通过 vagrant ssh 连到虚拟机,需要使用 Putty,Xshell 等第三方工具进行连接。Putty这个工具小巧好用。不过本人想直接在命令行下输入Vagrant ssh来连接虚拟机,那么怎么办呢?可以这么做:给我们的windows安装个git,git里面已经带了ssh这个工具。安装了git后就可以直接在命令行下vagrant
ssh来连接虚拟机了。你可以百度git for windows来下载git的windows安装包。

连接的IP和端口根据网络环境配置的不同有所不同,如果是默认使用端口映射的话,一般是连接 本地的2222端口。
登录的帐号密码均为 vagrant ,登录之后如果需要输 root ,密码也是 vagrant

注:使用 vagrant ssh 时,会提示可以使用密钥进行登录,如果需要使用putty进行密钥登录的话,需要下载 puttygen 将 ssh 的密钥转换为 ppk 文件才能使用。

登录ssh完成环境的配置,如果在开发环境中使用webserver(nginx/apache)为了避免一些静态文件处理的问题,可能还需要进行一些额外的配置:Vagrant下共享目录静态文件(js/jpg/png等)“缓存”问题。

在不进入虚拟机的情况下,还可以使用下面的命令对虚拟机进行管理:

vagrant up (启动虚拟机)
vagrant halt (关闭虚拟机——对应就是关机)
vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)
vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)

当在启动Vagrant后,对于虚拟机有进行过安装环境相关的配置,如果并不希望写在Vagrant的启动shell里面每次都重新安装配置一遍,可以将当前配置好的虚拟机打包成box:

vagrant package --output NAME --vagrantfile FILE                                                                       
          
可选参数: 
--output NAME : (可选)设置通过NAME来指定输出的文件名 
--vagrantfile FILE:(可选)可以将Vagrantfile直接封进box中
注:如果网络模式中使用 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:
sudo rm -f /etc/udev/rule.d/70-persistent-net.rules                                                                      
制作完成之后直接将box文件拿到其他计算机上配置即可使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息