退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

2019-01-16 11:56:44 22点赞 146收藏 8评论

前言

之前的文章:

2019年的折腾 -- 退休笔记本改造家用服务器(1) -- 硬件篇

退休笔记本改造家用服务器(2)- KVM、ESXi还是Hyper-V?

本文主要内容为介绍如何部署KVM虚拟化。目前任何主流的Linux发行版基本都能够提供KVM的功能。KVM的全称是Kernel-based Virtual Machine,其本质是属于Linux内核的一个功能模块,具体的介绍就不再赘述了,网上关于KVM技术的介绍也很多。

WebVirtMgr是一个基于网页的VM管理平台,免去了远程管理虚拟机需要敲命令的烦恼,详情见其Github页面

本文会尽量采用简单的方法去部署KVM,尽量保证文中方案的可重现性,虽然我自己使用VM重新走了一遍流程确认流程的准确性,但是无法保证不会有用户本身的硬件原因导致的额外步骤。

全文命令的内容说明:命令前有‘#‘表示该命令需要超级用户身份执行(root),命令前有'$'表示该命令不需超级用户权限。切换用户权限有两种方法:1、sudo指令,有效范围一条指令(对于最小化安装的系统,sudo工具需要额外安装和修改配置文件)2、su指令,直接切换当前用户身份。因为本文的权限切换次数不算多,使用su指令完成即可。方法为:由'$'切换到'#'时,直接键入su回车,然后输入正确的root账户密码(不是你当前账户的密码),即可完成切换。由’#‘切换到’$‘时,直接键入exit回车即可。

命令行下文本编辑器说明:Debian标准系统组件自带nano文本编辑器,比如命令nano /root/test 即打开nano进行编辑。编辑完后使用ctrl+x退出,退出时按Y进行保存。

操作系统部署

KVM是基于Linux内核的功能,其本身十分精简。KVM主要提供的是底层和原理的实现,所以并不像ESXi那样直接下载一个镜像,安装后就什么都有了,需要自己去选择Linux发行版并做配置。本次选择Debian 9.6作为VM Host,安装选择最小化就好了,能够节省本来就不太宽裕的内存空间。(作为VM Host,系统越简单越好了,详细的应用去VM Guest内实现就好了)

首先是下载系统镜像,这里使用网络安装映像,安装过程需要连接网络的,x86-64架构 - 官方下载地址,其他架构的网络安装映像可以去官方下载页面自行下载。下载下来为iso映像文件,需要使用UltraISO写入U盘。UltraISO工具可以自行去寻找,这里就不提供下载地址了。

用UltraISO打开下载的光盘映像文件

UltraISOUltraISO

通过菜单选择,写入映像

选择写入硬盘映像选择写入硬盘映像

硬盘驱动器选择你插入的U盘,然后点击写入。完成后关闭软件,安全弹出U盘就好

写入磁盘映像写入磁盘映像

然后插入服务器,U盘启动。至于如何通过U盘启动,每个主板的设置都不一样,我这里没办法做说明。

这里选择Install

grub引导界面grub引导界面

接下来是语言选择界面,语言如果选择中文,会提示如下

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

那行吧,没翻译就没翻译咯。

一路顺着走下去就行了,就不截图浪费篇幅了。主机名随意,域名可以手动填写localhost,用户名和密码配置就不必赘述了。

磁盘配置就需要看个人情况了,如果你不太了解Linux,直接使用整个磁盘即可,配置和维护LVM是很麻烦的事情。

磁盘配置界面磁盘配置界面

我这里只有一个磁盘,选择你想安装系统的磁盘即可

选择磁盘选择磁盘

不太了解Linux的用户,分区也放在同一分区吧

分区分区

最后确认一下配置后就会开始安装一部分系统文件

确认分区配置确认分区配置

开始安装一部分核心软件,以便开始网络下载软件包的流程开始安装一部分核心软件,以便开始网络下载软件包的流程

这里选择否即可

软件包CD配置软件包CD配置

镜像这里选择中国 - 推荐mirrors.163.com,公网下163开源的镜像还是比较给力的。

repo源选择repo源选择

在选择软件包的时候,只需要选择SSH Server和标准系统工具就行了。个人使用SSH的主要原因是可以在能够上网的机器上,copy网上的指令,免得手打退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程 没错,我就是懒。

软件包选择软件包选择

接着就是等待安装了。安装完成后重启,进入CLI,最好使用配置的root用户登陆,因为后面需要提权的动作。

为了登录SSH,需要先获取IP地址,可以直接去路由器的DHCP lease分配里面去看,或者使用命令

# apt install net-tools

安装net-tools软件包,软件包提供ifconfig命令查看网络接口信息。

这里先配置一下语言,乱码看的有点难受

# dpkg-reconfigure locales

全是乱码是不是?不要慌,这里有对应的中文

locales配置locales配置

上下选择,空格打勾,tab切换。勾上en_US.UTF8和zh_CN.UTF8,确认

locales设定locales设定

这里选择英语就能避免乱码,选择中文就能在远程SSH时在支持的软件中显示中文(比如putty),自己选择喜好吧,我这里就先切换英文了。

接着回到ifconfig,使用ifconfig命令获取当前的IP地址。

值得一提的是,在debian中,非root用户是默认没有sbin的环境变量的,也就是说如果你以普通用户身份运行ifconfig,它会告诉你

-bash: ifconfig: command not found

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

所以使用debian的时候,发现command not found不一定是没有安装软件包

正确的ifconfig命令,应该会返回如下图的信息

ifconfig返回的信息ifconfig返回的信息

这里的eth0就是机器上目前唯一的网卡,lo是Linux系统的本地回环,不用去管。这里就可以看到inet 192.168.1.102 意思就是我这台机器的IP就是192.168.1.102。接下来就可以使用SSH工具登录了。Windows端可以使用putty作为ssh的客户端,mac自带ssh客户端,linux即使没有也可以通过包管理软件安装。

这里以mac作为例子(Windows用putty其实也是一个样),打开Terminal,键入ssh username@ip,但是用户名只能使用非root用户,可以使用安装过程中创建的普通用户进行ssh会话。例如在我这里

MacBook:~ mac$ ssh user1@192.168.1.102

回车之后会返回,询问是否信任主机

The authenticity of host '192.168.1.102 (192.168.1.102)' can't be established.

ECDSA key fingerprint is SHA256:e3XsQJFgEZ8TGTQBZbuTeSlaq78lu0RPARIS3Asuxtg.

Are you sure you want to continue connecting (yes/no)?

键入yes后回车就可以正常登录了。

如果需要配置允许root通过ssh登录,需要更改sshd的相关配置文件,有需求的可以直接百度搜索。不过其实没必要。在普通用户登录时,使用su命令,输入root密码,即可顺利提权到root用户,这个操作在ssh中也可以使用。所以没有必要开放root的ssh登录。


配置KVM和WebVirtMgr

接下来使用自己的笔记本登录这台设备,开始配置KVM。

首先得安装KVM相关组件和设备,使用su命令切换至root用户。

其实在WebVirtMgr的Github页面中已经提供了一个便利的KVM安装脚本,但是由于众所周知的原因退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程 ,Github存在一些访问性问题。如果直接下载那个shell脚本,会很不幸的告诉你Connection reset by peer。解决方法是使用https。需要键入如下命令

# wget -O - https://retspen.github.io/libvirt-bootstrap.sh | sh

等待进度走完之后,接着运行如下命令

# apt install git python-pip python-libvirt python-libxml2 novnc nginx supervisor

使用systemctl查看服务状态是不是active(running),确定是否启动成功。

# systemctl status libvirtd.service

如果没有启动,使用systemctl start libvirtd.service启动

接下来安装WebVirtMgr。首先clone git上的源代码

# cd ~

# git clone git://github.com/retspen/webvirtmgr.git

然后安装python依赖

# cd webvirtmgr

# pip install -r requirements.txt

之后根据交互添加用户,初始化各种配置,这个用户名和密码是用来登录webvirtmgr的。

# ./manage.py syncdb

# ./manage.py collectstatic

# cd ..

# mv webvirtmgr /var/www/

然后在/etc/nginx/conf.d目录下添加webvirtmgr.conf

# nano /etc/nginx/conf.d/webvirtmgr.conf

文件内容如下:

server {

listen 80 default_server;


server_name $hostname;

#access_log /var/log/nginx/webvirtmgr_access_log;


location /static/ {

root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var

expires max;

}


location / {

proxy_pass http://127.0.0.1:8000;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;

proxy_set_header Host $host:$server_port;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_connect_timeout 600;

proxy_read_timeout 600;

proxy_send_timeout 600;

client_max_body_size 1024M; # Set higher depending on your needs

}

}

复制配置文件后,还还需要注释掉nginx默认的服务器配置,因为会和WebVirtMgr冲突。Debian的在/etc/nginx/sites-enabled/default 内,注释掉该文件内的整个server区段即可(即在server区段的每一行前面加上#,包括“server { ”这一行)。之后修复文件权限

# chown -R www-data:www-data /var/www/webvirtmgr

重启nginx服务

# systemctl restart nginx

接下来配置supervisor服务

# nano /etc/supervisor/conf.d/webvirtmgr.conf

添加如下文件内容到/etc/supervisor/conf.d/webvirtmgr.conf 中

[program:webvirtmgr]

command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/$

directory=/var/www/webvirtmgr

autostart=true

autorestart=true

stdout_logfile=/var/log/supervisor/webvirtmgr.log

redirect_stderr=true

user=www-data


[program:webvirtmgr-console]

command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console

directory=/var/www/webvirtmgr

autostart=true

autorestart=true

stdout_logfile=/var/log/supervisor/webvirtmgr-console.log

redirect_stderr=true

user=www-data

之后重启supervisor服务

# systemctl restart supervisor

到此为止,webvirtmgr网页就应该能够正常访问了!在内网浏览器中输入你的机器的IP地址,例如我这里是192.168.1.102,就会进入如下界面:

webvirtmgr页面webvirtmgr页面

输入你之前创建的webvirtmgr用户,点击sign in,即可登录到网页,在网页的右上角点击Add Connection

连接配置连接配置

选择Local Socket连接本地服务器,Label随便写,之后Add

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

点击你创建的label名称,进入管理页面

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

此时会告诉你缺少权限,还需要对用户授予访问权限

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

此时再输入如下命令,将www-data用户加入libvirt组

# usermod -a -G libvirt www-data

此时刷新页面,可以看到红色的提示已经消除。此时选择storage创建新的储存池,点击New Storage

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

首先选择ISO,创建磁盘映像的存放位置

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

点击upload ISO上传虚拟机要安装的系统映像,这里就不加图片了

之后再点击storage,新建一个储存池,类型选择DIR(这个是用来放虚拟机的硬盘文件的)。

之后在这个新建立的储存池中增加一块新的虚拟硬盘image,格式就是qcow2,大小根据个人需求选择。

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

然后点击Network,选择default,点击state里的start,需要开机自启动这个NAT网卡的,点击Autostart的Enable即可开机自动启动该虚拟网卡。

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

之后点击New Instance建立新的虚拟机。选择custom instance

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

磁盘选择之前创建好的qcow2文件(文件后缀名就是.img,不用管),选择default网络,填好名字然后新建

VirtIO的选项,请酌情勾选,在有些的情况下,会出现无法引导的情况,例如本次的debian安装镜像,使用VirtIO会导致在系统安装完成重启的流程中,无法引导进入系统,原因未知,可能和debian的安装器有关系。请谨慎考虑

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

在instance里点击实例名,进入设置页面

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

点击settings - media - connect 连接光盘映像

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

然后点击power下的start开机,之后点击access下的console,就能顺利连接虚拟机并安装系统:

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程

大功告成!

小结

总的来说,webvirtmgr是一个相对来说比较方便的网页管理虚拟机的方式,对于高级用户,也可以直接更改虚拟机配置文件的XML。但是相对于GUI的VIrtual Machine Manager管理工具,webvirtmgr能够配置的选项相对比较少,KVM是一个很需要调教的平台,调教的好能够得到出色的性能和良好的可拓展性,配合诸多软件工作。要知道,目前商用的虚拟机VPS提供商,基本都采用的是KVM作为虚拟化方案。不过好的是其内存的占用真的少。不开虚拟机的情况下,实机基本只占用不到500M的内存,能够很大程度上节省内存的开销。要知道像Gnome这种桌面环境,可是内存消耗的大户!

退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程


展开 收起
8评论

  • 精彩
  • 最新
  • 搭建家用服务器主要用途是什么,能说一下吗

    校验提示文案

    提交
    目前主要是拿来干nas的活,做个软路由,还有个centos做一些别的服务,比如frp,kms服务器啥的

    校验提示文案

    提交
    收起所有回复
  • 可以直接装proxmox啊

    校验提示文案

    提交
    直接装确实更省事,不过不就是要折腾么 [得意] 虚拟化选择也多得去了,算是介绍一下啦,万一有人要用呢

    校验提示文案

    提交
    收起所有回复
  • 我只知道我的黑群装了KVM,webvirtmgr没的配置网卡直通,还要装个LINUX去管理。

    校验提示文案

    提交
    哈哈,这可就头疼了,不过网卡直通不是在network里面有新建虚拟网桥这种的选项么。话说用虚拟机下装黑群晖应该比黑群晖下装虚拟机要来的舒服一点吧。。。。目前我用的Hyper-V+DSM 5做NAS,感觉用起来没啥问题

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
146
扫一下,分享更方便,购买更轻松