使用VirutalBox无缝对接开发环境

前言

自从多年前第一次使用OracleVirtualBox安装linux服务器配合本地开发后一发不可收拾,因为经常在办公电脑、家里PC机、Macbook之前切换开发环境,而VirtualBox同时有Mac、Linux、Windows平台的支持,虚拟机可以方便的导入导出,把所有的开发环境和配置都放在虚拟机里来做对我来说异常方便,同时在使用过程中也逐渐摸索出一些心得和经验,分享出来希望对大家也有一些帮助。

VirtualBox软件的历史已经有快10年了,最初以GPL许可开源,Sun被收购了就归了Oracle,但是软件依然遵守GPL2许可可以继续自有下载和使用,提供Windows、MacOS、Linux、Solaris多个版本下载,其他信息感兴趣的话可以去官网查询,这里不再赘述,我们重点看如何使用。

目标

这里的开发环境主要针对PHP、Python、Ruby等无需编译的脚本语言,可以再服务器上直接查看开发中的脚本运行情况,当然,其他语言的开发也是同样适用的。

比如,一般的PHPer的开发环境基本都是LAMP或者LNMP,PHP作为解释性语言,从开发到查看运行结果,只有把本地文件部署到服务器这一个障碍,我们的目标就是在VirtualBox中安装配置这样一个服务器

1,虚拟机和Host的网络互通,以便开发机上可以访问服务器web系统。

2,虚拟机能和Host宿主主机(我们的开发机)共享目录文件。

安装配置过程1.配置VirtualBox的Host-Only网络

我这里使用的VirtualBox5.1.2,用ubuntu server 16.04 lts安装和配置来做个例子,不同的发行版对于VirtualBox的相关配置没有差别,大家可以选自己喜欢的发行版安装。

首先得把VirtualBox先安装完毕,在安装ubuntu之前我们先来配置下VirtualBox,给宿主系统增加Host-Only网络,相当于在宿主系统上搭建了一个虚拟局域网,宿主系统就是网关,IP自己随意定,后面的DHCP无需打开,因为我们会给虚拟机设置静态IP。Host-Only网络的特点我们后面再讲。

2.安装虚拟机

首先创建一下,我们选择Ubuntu(64-bit)

由于是64位版本,安装之前要确保你的电脑开启了64位虚拟机的硬件支持,我们公司开发机默认是不开的,需要到BIOS里设置把【Intel Virtual Technology】设置为Enabled,否则安装时会出现如下错误提示。

创建好ubuntu虚拟机后,稍作配置

1,设置共享目录,这里设置完不会起作用,后面安装好ubuntu后还需做些配置,这里先不说。

2,除了默认设置为NAT网卡外,我们再给虚拟机增加一个网卡设置为之前在全局设定中创建好的Host-Only网络。

VirtualBox中可选的网络有6种(常用的5种),这里挨个说明下,后面把虚拟机(安装的Ubuntu系统)称为Guest系统,宿主系统(我们的开发机)称为Host。

网络地址转换(NAT)

也叫IP掩蔽,Guest没有自己的IP地址,要通过Host主机来访问外网,外网包括宿主主机无法访问到虚拟机,这个是默认,用的也很多,优点是方便,虚拟机安装好之后就能上网。

内部网络(Internal)

内网模式可以把虚拟机组一个内部局域网,虚拟机直接可以互相访问,但是无法访问宿主和外网。

NAT网络

NAT网络是NAT和Internal模式一个组合,Guest之间即可以互相访问,Guest也能访问到Host和外网,兼有两者的特性。

桥接网卡(Bridged Networking)

用的比较多一种,就是把Guest系统当做一台实体设备放到Host所在的局域网中,满足Guest到Host之间的所有访问方式。但是局限也有,比如在Host系统没有连接网络的时候,Host和Guest不在一个网里就无法互相访问了,再比如咱们公司的开发网是不允许虚拟机连到局域网的(这个是8000亲口告诉我的。。)。

仅主机(Host-Only)网络

Host-Only网络相当于宿主系统中建了一个虚拟局域网,宿主系统就是网关和路由器,这个网络下除了Guest不能访问外面,Host和Guest之间的通讯都没问题。

Host、Guest、外网之间的可访问性总结

从这个表里可以看出,Guest系统只要有两个网卡分别设置为网络地址转换(NAT)仅主机(Host-Only)网络,就可以满足所有方式的访问。

设置完共享目录和网卡,现在就可以开始安装了,安装过程比较简单,简单快进下安装过程:

1,选择语言

2,菜单选择InstallUbuntu Server

3,选择安装过程中的语言,以及安装后系统的默认语言

4,选择时区

5,选择键盘布局

6,多个网卡选择默认网卡,默认就是第一个NAT的,这里不改。

7,设置network hostname

8,设置一个新用户和密码

9,确认时区

10,硬盘分区,我一般选Guided –use entire disk and set up LVM(逻辑分区管理器)。

11,设置代理,跳过

12,选择要安装的应用程序

13,安装GRUB boot loader

14,然后就安装结束了

3.配置虚拟机的网络

系统安装好之后查看下网卡,只有默认的NAT启动了,因为Host-Only的网卡还没有设置静态IP,但是系统此时是可以上网的。

命令:ifconfig –a head –n20

命令:ping www.qq.com

现在来设置下另一种网卡,主要是设置静态IP然后重启下网卡就可以了,否则我们无法再宿主系统访问,也无法用一些ssh工具登陆到虚拟机,在默认虚拟机界面上操作是非常难受的。

命令:sudo vi /etc/network/interfaces

命令:sudo service networking restart

4.配置虚拟机与开发机的共享文件夹

安装VBoxGuestAdditions

我们在文章开头给虚拟机设置了一个可以自动挂载的共享文件夹,但是现在是看不到的,要使用共享文件夹的功能首先要安装VBoxGuestAdditions,在ubuntu系统中使用apt安装非常简单

命令: sudo apt-get install virtualbox-guest-utils

其他发行版的话可以下载后挂载到虚拟机里去安装,也不算麻烦,下载地址

http://download.virtualbox.org/virtualbox/5.1.2/

安装好VBoxGuestAdditions重启系统后,就可以在虚拟机/media目录里看到开发机上的共享文件夹了,共享文件夹名字都会有前缀sf_,表示是共享目录。

但是安装好VBoxGuestAdditions后还不能查看,看目录是属于vboxsf用户的。

更改挂载用户

在安装后,系统会多一个mount.vboxsf的挂载程序,但是我们无权限运行,只有root用户才能挂载,自动挂载是由这个程序来完成的,同时挂载的目录属于vboxsf用户。

切换到root用户,使用root权限访问下共享目录,可见挂载目录属于vboxsf用户

试下分别在开发机和虚拟机上的共享目录下创建文件,发现默认都是vboxsf用户

这样就会有个问题,如果我们在虚拟机上用www-data用户来作为apache/nginx和php-fpm的运行用户,将共享目录作为webroot目录,那么就需要给www-data访问共享目录的权限,但是共享目录却无法通过命令修改权限和用户。

其实我们可以选择手动挂载共享目录,在挂载阶段就指定好挂载用户,首先我们要关闭VirtualBox的自动挂载功能。

然后在登录虚拟机,通过下面命令手动挂载,33是www-data的用户ID和用户组ID,最后也可以把挂载命令设置为开机启动,这样就跟自动挂载一样方便了。

截止到此,我们的整个安装和配置过程就完成了,通过共享文件夹的方式,可以以无延迟的方式,随时在虚拟机服务器上查看代码的运行结果,基本像是运行在本地一样方便快捷。

5.总结

至此,就可以在虚拟机里各种浪了,除了无缝实现开发和服务器环境的对接,提高开发效率之外,配合NAT和Host-Only网络,基本可以模拟各种网络环境。

水平有限,难免有不足和疏漏,欢迎大家批评指正~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G0ANU000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券