一、使用虚拟化开发环境的好处:
1、保证开发环境和生产环境一致
虚拟化开发环境其实就是在本机虚拟一个生产环境,得益于硬件的低廉,开发机已经变得性能非常强劲,4核、32G内存的计算机也不需要太多的费用,跑虚拟机相当顺畅。
使用虚拟化开发环境,开发人员在本机可以使用自己喜欢或者顺手的OS(Windows、Linux、Mac OS等),而程序是运行在虚拟机中,迁移到生产环境可以避免环境不兼容导致的莫名错误。
虚拟化开发环境对于团队中开发环境OS、测试和生产环境不同的情况特别适用。
2、简化了调试环境的部署
稍微复杂的系统,部署调试环境就会是个麻烦的事情,nginx、mysql、redis、mongodb等估计都要安装,可能还有一大堆第三方的开发库……,通过虚拟化技术可以简化这些工作。
虚拟环境可以由专人制作,然后分发给开发人员、测试人员,他们可以很方便的在本机调试。
如果生产环境还是多平台(或多个OS版本)的,可以制作多个虚拟机,简单切换一下就可以调试了。
二、开始制作虚拟化开发环境
1、安装VirtualBox
VirtualBox是Oracle开源的虚拟化系统,到官方网站:https://www.virtualbox.org/wiki/Downloads/ 下载virtualbox最新的版本并安装,详细过程略过。
2、使用vagrant
vagrant是一个用Ruby开发的工具,封装了VirtualBox的一些命令,它简化了virtualbox虚拟机的操作,增加了自动化部署软件puppet/chef的支持
通过vagrant可以很方便的创建和部署、分发虚拟化开发环境。
3、安装vagrant
方法一、下载安装包,官方网站:http://downloads.vagrantup.com/
注意,尽量下载最新的程序,因为VirtualBox经常升级,升级后有些接口会变化,老的vagrant可能无法使用
方法二、vagrant是ruby开发的,如果已经安装了ruby,可以用gem安装:
gem install vagrant
4、建立环境
1)建立开发环境目录(可以跳过,使用已有的目录)
在资源管理器中建一个文件夹
本文是E:\workspace\devel_env
2)打开命令行窗口,vagrant的操作都是命令行的
进入E:\workspace\devel_env目录中
按住shift键,在空白处按鼠标右键,在弹出菜单中点“打开命令行窗口”
3) 加一个box
box是一个zip包,包含了vagrant的配置信息和VirtualBox的虚拟机镜像文件
官方提供了一个box,http://files.vagrantup.com/lucid32.box也可以选一个团队在用的系统,http://www.vagrantbox.es/
或者自己做一个也行
我服务器都CentOS,选了CentOS 6.3 x86_64 minimal
添加box的命令:
vagrant box add base 远端的box url或者本地的box文件名 vagrant box add 是添加命令 base 是box的名称,也可以任意的标题,base是默认名称
例子:
vagrant box add base http://files.vagrantup.com/lucid32.box vagrant box add base https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box vagrant box add base e:/vbox/CentOS-6.3-x86_64-minimal.box vagrant box add "CentOS 6.3 x86_64 minimal" e:/vbox/CentOS-6.3-x86_64-minimal.box
安装过程的信息
[vagrant] Downloading with Vagrant::Downloaders::File... [vagrant] Copying box to temporary location... [vagrant] Extracting box... [vagrant] Verifying box... [vagrant] Cleaning up downloaded box...
文件被放到C:\Users\当前用户名.vagrant.d\boxes\目录下
通过vagrant box add 这样的方式安装远程的box,可能很慢,可以先用下载工具把box下到本地
4)初始化
vagrant init
如果你添加的box名称不是base,要在初始化的时候指定,例如
vagrant init "CentOS 6.3 x86_64 minimal"
初始化过程的信息
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. 5)修改Vagrantfile,加一些项目需要的路径和端口映射 config.vm.forward_port 虚拟机内端口, 本机端口 config.vm.forward_port 80, 80 config.vm.forward_port 5000, 5000 config.vm.share_folder "标识", "虚拟机内路径", "本机路径" config.vm.share_folder "v-data", "/data", "e:/workspace/data" config.vm.share_folder "v-work", "/work", "e:/workspace/work"
我的生产环境有/data、/work两个目录,所以做了映射
5、启动虚拟机
vagrant up
启动过程的信息
[default] Importing base box 'base'... [default] The guest additions on this VM do not match the install version of VirtualBox! This may cause things such as forwarded ports, shared folders, and more to not work properly. If any of those things fail on this machine, please update the guest additions and repackage the box. Guest Additions Version: 4.1.20 VirtualBox Version: 4.1.20 [default] Matching MAC address for NAT networking... [default] Clearing any previously set forwarded ports... [default] You are trying to forward to privileged ports (ports <= 1024). Most operating systems restrict this to only privileged process (typically processes running as an administrative user). This is a warning in case the port forwarding doesn't work. If any problems occur, please try a port higher than 1024. [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] -- 80 => 80 (adapter 1) [default] -- 5000 => 5000 (adapter 1) [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Mounting shared folders... [default] -- v-work: /work [default] -- v-data: /data [default] -- v-root: /vagrant
6、用ssh连入
Windows环境下,不能直接用vagrant ssh,所以会提示:
E:\workspace\devel_env>vagrant ssh `vagrant ssh` isn't available on the Windows platform. You are still able to SSH into the virtual machine if you get a Windows SSH client (such as PuTTY). The authentication information is shown below: Host: 127.0.0.1 Port: 2222 Username: vagrant Private key: C:/Users/你的账户名/.vagrant.d/insecure_private_key
必须使用第三方ssh客户端
GUI的ssh客户端:putty、Xshell4
命令行的ssh客户端:Cygwin、MinGW
命令行的方式:
ssh -i C:/Users/你的账户名/.vagrant.d/insecure_private_key -p2222 vagrant@127.0.0.1
图形的方式:略过
7、查看一下系统
df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 13G 930M 11G 8% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 485M 40M 420M 9% /boot work 203G 132G 71G 65% /work data 203G 132G 71G 65% /data v-root 203G 132G 71G 65% /vagrant
/vagrant 这个目录是自动映射的,被映射到e:\workspace\devel_env
8、安装一些常用的软件和模块
可以通过puppet,也可以手动安装
本机的e:\workspace\devel_env会被映射到虚拟机中的/vagrant目录下,所以可以把待安装的文件包放到e:\workspace\devel_env,虚拟机中就可以方便的安装了
9、关闭防火墙
开发环境的虚拟机,没必要启用防火墙
sudo service iptables stop sudo chkconfig iptables off
10、vagrant常用命令
vagrant halt vagrant suspend vagrant resume vagrant destroy vagrant reload
11、分发
配置好的环境,可以打包再分发,免去团队其他程序的重复劳动
vagrant package --vagrantfile Vagrantfile
制作过程的信息:
[default] Attempting graceful shutdown of VM... [default] Clearing any previously set forwarded ports... [default] Creating temporary directory for export... [default] Exporting VM... [default] Compressing package to: E:/workspace/devel_env/package.box [default] Packaging additional file: Vagrantfile
三、项目中的使用
1、将项目中的代码和数据放到映射目录中,这样,无论本机还是虚拟机内操作,文件都是一致的;
也方便项目迁移部署,直接将本机相关目录打包,放到生产环境的服务器上
2、使用端口映射,这样本机就可以方便的访问
端口映射也可以在VirtualBox管理器中动态添加