前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >构建虚拟化开发环境

构建虚拟化开发环境

作者头像
louiezhou001
发布2021-11-01 15:37:56
7600
发布2021-11-01 15:37:56
举报

一. 为什么要构建虚拟化开发环境?

随着业务复杂度在不断的提高, 我们的的应用被拆分成了若干个小部分, 各尽其职, 其中有些单元通过接口暴露被其他单元调用, 有些单元会出现一些问题让我们无法在正式环境上去操作, 而测试环境又不动, 因此搞一个虚拟的化的开发环境就被提上了日程.

同时也可以模拟一些没有使用过的场景, 便于后续真实部署的时候不会手忙脚乱 .

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可以很方便的创建和部署、分发虚拟化开发环境。

注意,Vagrant 是没有图形界面的,所以安装完成后也没有桌面快捷方式。具体使用方法,接下来会详细说明。

3、安装vagrant

方法一:

下载安装包, 官方网站:https://www.vagrantup.com/downloads

注意: 尽量下载最新的程序,因为VirtualBox经常升级,升级后有些接口会变化,老的vagrant可能无法使用

方法二:

vagrant是ruby开发的,如果已经安装了ruby,可以用gem安装:

gem install vagrant

Vagrant 的安装程序会自动把安装路径加入到 PATH 环境变量,所以,这时候可以通过

命令行执行 vagrant version 检查是否安装成功:

> vagrant version

Installed Version: 2.2.7

Latest Version: 2.2.8

4. 建立环境

1)建立开发环境目录(可以跳过,使用已有的目录)

在资源管理器中建一个文件夹

本文是E:\workspace\devel_env

2)打开命令行窗口,vagrant的操作都是命令行的

进入E:\workspace\devel_env目录中

按住shift键,在空白处按鼠标右键,在弹出菜单中点“打开命令行窗口”

3) 加一个box

box是一个zip包,包含了vagrant的配置信息和VirtualBox的虚拟机镜像文件

官方提供了一个box,https://www.vagrantup.com/docs/boxes/format

也可以选一个团队在用的系统,http://www.vagrantbox.es

或者自己做一个也行

我服务器都CentOS,选了CentOS 7.2 x64 (Minimal, Puppet 4.2.3, Guest Additions 4.3.30)

添加box的命令:

vagrant box add base 远端的box url或者本地的box文件名

vagrant box add 是添加命令

base 是box的名称,也可以任意的标题,base是默认名称

例子:

vagrant box add base https://dl.dropbox.com/u/7225008/Vagrant/CentOS-7.2-x86_64-minimal.box

vagrant box add base e:/vbox/CentOS-7.2-x86_64-minimal.box

vagrant box add "CentOS 7.2 x86_64 minimal" e:/vbox/CentOS-7.2-x86_64-minimal.box

文件被放到C:\Users\当前用户名.vagrant.d\boxes\目录下

通过vagrant box add 这样的方式安装远程的box,可能很慢,可以先用下载工具把box下到本地

4)初始化

vagrant init

如果你添加的box名称不是base,要在初始化的时候指定,例如

vagrant init "CentOS 7.2 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 //重启虚机,并且重新加载 Vagrantfile 中的配置信息

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管理器中动态添加

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试工程师成长之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档