[原创]在HP DL380 G7服务器上部署基于Ubuntu Server 16.04 和 VirtualBox的云平台
对于一线开发人员来说,一提到虚拟机平台,往往会让人联想到在价格昂贵的服务器上部署VMware vSphere之类软件来实现。
笔者作为一个资深码农,也是一直梦寐着在自己家中打造一个真正的家庭私有云,秒杀那些硬盘厂商所吹嘘的“Jia私有云”。
功夫不负有心人,经过反复的实验,浏览了很多国外的社区以后,笔者真的实现了这个目标,而且,真的很便宜哦~!
整理出一份教程放在这里,希望能扩展一下大家的思路。

材料
HP DL380 G7 2U 服务器
- Core 24, Mem 40G, SAS 146G * 2, Raid 0
Ubuntu Server 16.04 LTS
Oracle Virtualbox 5.1
Oracle_VM_VirtualBox_Extension_Pack 5.1
选择服务器
市场上有很多IDC机房淘汰的服务器在二手市场上销售,真的是白菜价格。
想入手服务器的筒子们,可以认真考察考察。
笔者在这里不给任何人做广告,只是说一点:在家用,一定要注意噪音问题,否则,被家里的大领导给禁止了就没的完了。
参考文章:
操作系统
由于服务器是一种有别于一般家用机设备,因此,对于家用机(或者笔记本)来说天经地义的一些经验和安装方法,往往不能直接搬到服务器上。
笔者实际测试的系统包括:
- Windows Server 2012 R2
- Debian 9 with non-free
- Fedora Workstation 25
- Ubuntu Desktop 16.04 LTS
- Ubuntu Server 16.04 LTS
其中,只有一下三种操作系统能够顺利启动:
- Windows Server 2012 R2
- Debian 9 with non-free
- Ubuntu Server 16.04 LTS
考虑到维护和稳定性的要求,最终选择了Ubuntu Server 16.04作为服务器主机的操作系统。
虚拟机平台
网上有众多的文章都主张选用VMware vSphere,但是License是个大问题,反正笔者是买不起的。
使用了多年的VirtualBox自然成了我的首选,可是VirtualBox是否能在Server版本的Linux上成功虚拟带有图形界面的OS还是个问题?
幸好最终找到了一个叫做phpvirtualbox的软件,能够通过网页的形式将VirtualBox的操作界面展现出来,
再加上Extension Pack扩展包,一个Headless服务器的蓝图便浮出水面。
国外的一个网站提供了本教程后面一半的内容,感谢那个名叫SK的作者的分享。
好了,铺垫的介绍就到这里,让我们赶快开始吧。
安装步骤
第一步 安装Ubuntu Server 16.04 LTS
(安装步骤省略,请自行用Bing搜索)
第二步 配置Ubuntu Server 16.04 LTS
使用固定IP地址。
vi /etc/network/interfaces
以下是笔者机器上的例子:
# The primary network interface
auto enp3s0f0
# iface enp3s0f0 inet dhcp
iface enp3s0f0 inet static
address 192.168.11.16
netmask 255.255.255.0
gateway 192.168.11.1
手工指定DNS服务器
- DNS服务器众多,国外的很多DNS资源无法访问,所以笔者选择了一个最保险的DNS:要要死(114)
vi /etc/resolvconf/resolv.conf.d/base
向其中添加一行:
nameserver 114.114.114.114
(如果你有多个DNS服务器的话,请采用上面的格式,每行添加一个DNS的IP地址)
让刚才的变更生效,你需要手工重启networking服务
/etc/init.d/networking restart
第三步 更新Ubuntu操作系统
这可能是大家最熟悉的一个指令了apt-get。他看起来太经典了,不是吗?
apt-get update
apt-get -y dist-upgrade
升级完成后,顺便安装以下组件:
apt-get install build-essential dkms unzip wget
apt-get install apache2 php php-mysql libapache2-mod-php php-soap php-xml
到这里,请一定重启一下服务器。
由于服务器启动速度很慢,通常5 ~ 10分钟的样子,各位同学尽可以利用这段时间来放松一下。
第四步 安装VirtualBox
VirtualBox提供了灵活的安装方式,比如,可以选择通过deb包或者repository的来安装。
笔者这里使用repository的方式来进行说明,其它方式,请参考Oracle VirtualBox的官方网站。
首先,要做的就是注册这个官方的repository:
vi /etc/apt/sources.list
笔者将URL地址添加进去。注:这里"xenial"是Ubuntu的发型代号,各位需要根据自己所使用的Ubuntu版本添加特定的仓库地址,不能混用。
deb http://download.virtualbox.org/virtualbox/debian xenial contrib
注册官方的Key
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
获取官方repository信息,并开始安装
apt-get update
apt-get install virtualbox-5.1
安装完成后,请确认vboxdrv的状态
systemctl status vboxdrv

接着,要做的就是安装VirtualBox的扩展包。可以说本方案之所以能够成功,主要依靠的就是这个扩展包的功能。
wget http://download.virtualbox.org/virtualbox/5.1.26/Oracle_VM_VirtualBox_Extension_Pack-5.1.26-117224.vbox-extpack
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.-.vbox-extpack
当你看到形如下面的提示,那么恭喜你,到目前为止安装很顺利。

第五步 安装Web客户端phpvirtualbox
也许大家对phpVirtualBox会比较陌生,引用官方网站上的一句话:A web-based front-end to VirtualBox written in PHP
可以在这里下载到最新版本。
wget https://sourceforge.net/projects/phpvirtualbox/files/phpvirtualbox-5.0-5.zip
unzip phpvirtualbox-5.0-5.zip
将解压缩后的文件夹复制到apache的默认发布路径,并赋予权限
mv phpvirtualbox-5.0- /var/www/html/phpvirtualbox
chmod 777 /var/www/html/phpvirtualbox/
通过Example文件创建配置文件
cp /var/www/html/phpvirtualbox/config.php-example /var/www/html/phpvirtualbox/config.php
打开刚刚复制产生的配置文件,指定以哪一个Linux用户的权限运行
vi /var/www/html/phpvirtualbox/config.php
/* Username / Password for system user that runs VirtualBox */
var $username = 'Linux用户名';
var $password = '密码';
注:这个配置用的php里有很多的设置选项,推荐准备用于生产环境的筒子们详细的看一下。
创建/etc/default/virtualbox文件
vi /etc/default/virtualbox
仍然添加上面所指定的Linux用户
VBOXWEB_USER=Linux用户名
依次尝试重启以下三个服务
systemctl restart vboxweb-service
systemctl restart vboxdrv
systemctl restart apache2
第六步 激动人心的时刻到了
打开浏览器,输入网址:http://服务器地址/phpvirtualbox/

在输入了默认的用户明(admin)和密码(admin)以后,一个与原版VirtualBox如出一辙的界面就会展现出来

剩下的使用方式就和VirtualBox完全相同了。篇幅所限,笔者这里省略。
如何连接你的虚拟机桌面
你当然不希望仅仅在VM中运行命令行界面的OS,那么如何才能远程连接到VM的桌面环境呢?
两个步骤轻松搞定:
第一,在虚拟机的设置里面指定远程桌面的端口,例如笔者设置的9061

第二,是使用Windows自带的远程桌面(或者任何支持RDP协议的客户端)来连接服务器上面的这个端口。

注:这里的IP(192.168.1.123)是服务器本身的IP,不是VM的IP。
然后....就没有然后啦。
大功告成,累死了。希望能开阔大家的思路。
[原创]在HP DL380 G7服务器上部署基于Ubuntu Server 16.04 和 VirtualBox的云平台的更多相关文章
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(三):设置上传文件夹权限(这里测试用完全共享)
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(五):测试项目
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(二):Apache安装和配置
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django
近期开始学习基于Linux平台的Django开发,想配置一台可以发布的服务器,经过近一个月的努力,终于掌握了基于Apache和mod-wsgi插件的部署模式,自己也写了一个教程,一是让自己有个记录,二 ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(四):安装MySQL数据库
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动
场景 Linux-安装 Ubuntu Server 16.04 X64(图文教程详细版): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 在Cent OS云服务器上部署基于TP5后端代码踩坑记录_艾孜尔江撰
推荐使用镜像安装Cent OS系统,或者在纯净安装完成之后在完成Apache+MySQL+PHP的时候不要每个单独安装,因为这样会出一些三者之间版本不配的问题,网上各种说法都有,查起来也非常困难,版本 ...
- Ubuntu server 16.04的安装 以及配置(服务器版)
1.在电脑上下载最新版本的Ubuntu服务器ISO映像,刻录到CD或创建一个可启动的USB盘. 2.视情况而定,进入到服务器的boot界面,把cd或者usb设置为启动第一项 3.开始安装 1)Ub ...
- ubuntu server 16.04安装GPU服务器
1 Ubuntu16.04 系统安装过程中,需要勾选openssh-server 方便远程连接 2 必须安装gcc 与g++ 3 安装显卡驱动 NVIDIA-Linux-x86_64-367.57.r ...
随机推荐
- vue路由跳转时判断用户是否登录功能
通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以 ...
- Java 基本语法----变量
变 量 变量的概念 内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先声明,后使用该区域的数据可以在同一类型范围内不断变化 定义变量的格式:数据类型 变量名 = ...
- nodejs 全局变量和全局对象
1.全局对象 所有模块都可以调用 1)global:表示Node所在的全局环境,类似于浏览器中的window对象. 2)process:指向Node内置的process模块,允许开发者与当前进程互动. ...
- 微信小程序怎么用?线下商家最适合玩小程序
随着微信小程序不断地释放新功能,许多行业越来越关注小程序,目前已经有不少餐饮和线下传统零售企业开始谋划利用好小程序.但是,线下商业有着复杂的场景,如何针对自己行业的特点和需求开发出属于自己的小程序,是 ...
- 用Node.JS+MongoDB搭建个人博客(安装环境)(一)
Node.JS是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Nod ...
- ES6中的类
前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...
- [HNOI2006]超级英雄 网络流+二分版
刚学网络流的我这里有一道非常好的"网络流练手题"------[HNOI2006]超级英雄. 记得很久以前真的有这个节目来着,还是大兵主持的. 其实这是一道匈牙利板子大水题,但对于我 ...
- mybatis 详解(二)------入门实例(基于XML)
通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...
- 兔子与樱花[HEOI2015]
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- 3.commonjs模块
1.首先建一个math.js exports.add = function(a, b){ return a + b; } exports.sub = function(a, b){ return a ...