Serenader

Learning by sharing

巴掌大的迷你主机云轩 H170 使用体验以及 Homelab 搭建

post cover
在 19 年年底的时候,逛 SMZDM 的时候无意间看到云轩 H170 的相关文章,一下子就中毒了。云轩 H170 是一台 mini-STX 的准系统主机,它的特点是体积非常迷你,而且价钱非常便宜。主板+机箱+电源的准系统套餐只需要369(我购买的时候有优惠,原价 499 ,目前优惠价在 379 左右)。
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/d01bb254-56f4-4474-bf2f-6aaba3d19744_Untitled.png
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/f078028d-f9eb-40d1-8c28-35823680c514_Untitled.png
纠结了一两天之后,便下单了。

购买理由以及使用场景

购买这台主机的理由主要是想买来跑一些对 CPU 有一定要求的服务,比如 GitLab ,以及 CI 服务等。在买这台主机之前,自己已经有一台群晖 DS 918+ NAS,它是我的数据中心,备份中心,我的一些服务都跑在上面。但是后来发现它的性能并不适合长期跑这种对 CPU 要求比较高的任务,而且为了系统的稳定性,我需要尽量把一些乱七八糟的服务迁移到其他机器。基于这个前提,自己一直想买一台小主机来跑这些服务。
除了对性能有一定要求之外,我还希望这个主机足够小,毕竟它会放在我的房间里面,而我的房间空间并不大。而且它必须足够安静,以及功耗不要太高,关键是不能太贵。
那么这样一算下来,云轩的这个机器就非常适合我,小,又具备 DIY 能力,安静,功耗低。当然这台主机也不是百分百完美,它也有硬伤,比如它没有音频输出接口,而且 m.2 接口只支持 SATA 协议的 SSD ,不支持 NVME 协议,以及 2.5 寸的 SATA 硬盘得用定制的电源线,还有Type-C 口是阉割版的。但是这些问题对我来说几乎没有影响。所以说它非常适合我。
买到手之后在它上面装了 Proxmox ,然后创建了几个 VM 来跑一些服务,比如上面提到的 GitLab,CI,以及旁路由等。

主机配置以及安装

由于我买的是准系统套餐,所以自带了主板,机箱以及电源,我需要额外购买 CPU,内存,硬盘,散热器。最终的配置是:
  • CPU: i3 8100 (¥685)
  • 散热器:乔思伯 HP-400 (¥79)
  • 内存:协德 DDR4 2666 16G (¥297)
  • 硬盘:十铨 M.2 SATA 256G (¥179)
  • 硬盘:OCZ-ARC SATA 240G (自有)
  • 硬盘线:4PIN+SATA 转接一体硬盘线(¥6.8)
  • 机箱+主板+电源:云轩 H170 (¥369)
总共花了 ¥1615 ,鲁大师跑分大概 14 万分左右。这个性能对我来说已经足够了。
由于主板是 H170 芯片组的,所以它原生只支持英特尔酷睿六、七代 CPU ,但是可以让卖家发货前先刷好 BIOS ,这样就能直接用八、九代 b0 步进的 CPU 了。
关于 CPU 的选择上,其实纠结了很久。本着以最低的成本组装性能尽可能好的主机,综合张大妈上面的文章,自己列了几个选择:
  • i3 8100 b0 步进版,680+
  • i7 8700t es 版,850+
  • 魔改版 i7 7820HK,530+
其中 i3 8100 b0 步进版是最省事的,卖家刷好 BIOS 之后装上就能用。而 i7 8700t 要自己贴魔改贴。i7 7820HK 的话需要把主机寄到 CPU 卖家那里帮忙刷 BIOS 以及安装 CPU。从成本来考虑,魔改版 CPU 是最好的,价钱便宜但是性能不差。从性能来考虑的话,8700t 是最好的。本来想咬咬牙买 8700t ,在闲鱼上找到一个卖家卖 800 而且包邮,当时就决定买了,谁知道想下单的时候发现已经卖掉了。无奈之下,再考虑到想尽快能玩到这台主机,所以就直接在淘宝上找了一家店买了 i3 8100 ,简单省事。
现在的这个配置后续还可以进一步升级,比如 CPU 升级到更强劲的 i7 8700,内存升级到 32G 双通道。现在由于并不需要这么强的性能,所以就先这样这样。
所有配件都装好的样子是这样的:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/6963982e-849a-4a18-8390-0b4c3452e13b_Untitled.png
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/2bd443fc-56ec-42f5-bf26-d5b4bb7877ff_2019-12-28_001648.jpg
2.5寸的硬盘没有固定的地方,现在只是直接放在散热器风扇上面。
迷你主机跟 DS 918+ 放在一起是这个效果:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/3b6e9f8a-1788-4175-b0c6-cd1573eee67e_Untitled.png
待机时候的功耗大概只有 17 瓦左右:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/04895125-0344-4858-8aba-66c2dabbcd44_Untitled.png

后续调整

当装好系统运行起来之后,发现了有两个问题:
  • 风扇声音很大,明明 CPU 温度不高风扇也发疯似的疯狂转
  • 电源键的 LED 灯在晚上睡觉的时候容易造成光污染,影响睡眠
所以我做了两个调整:
  • 调整 BIOS 的 PWM 风扇控制,让风扇安静运行
  • 直接拔了电源键的 LED 灯
PWM 的调整很简单,直接进入 BIOS 后点击 Smart Fan 5 Settings 就能调节 PWM 了。
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/b922b3d0-fac8-4e35-97a9-1202a06fe692_Untitled.png
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/3358496c-bea3-48e1-9dca-6db7c507fff2_Untitled.png
上面这个设置设定了当 CPU 温度低于50摄氏度的时候,风扇的转速在 30%-35% 之间,当 CPU 温度超过 50 度时,转速就立即上升,当温度达到接近80度时,风扇以 100% 的转速运行。实际上,从右边的温度监控也可以看出,待机温度也就35度左右,而当风扇以30%左右的转速运行时,噪音几乎不存在。
而去掉电源灯也很简单,拔掉相关的排线就行了。
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/990a1e3e-8b05-4386-9424-88198b20b4dd_Untitled.png
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/04535306-9dc2-419b-8517-072bb83b9e98_2019-12-28_002302.jpg

系统搭建

硬件装好之后,就需要开始安装系统了。本来想着直接装 Proxmox VE 系统的,但是从 Proxmox 官网下的 ISO 镜像都无法直接启动,提示 grub_file_filters_enable not found ,直接就没办法进入安装界面。但是尝试直接安装 Windows 10,以及 ESXi ,都是没问题的,就独独 Proxmox 有问题。后来在网上查了一下,有人说估计是 BIOS 太老或者太垃圾。既然如此那只能另寻出路了。
后来在 Proxmox 的官网上了解到,其实可以曲线安装 Proxmox:先安装 Debian 10 系统,然后再安装 Proxmox 软件。
所以安装步骤就直接参考了 Proxmox 的文档:Install Proxmox VE on Debian Stretch,一次就成功了。

IP 设置

Proxmox VE 安装好之后需要创建 vmbr0 的网卡,以及设置一下静态 IP。直接编辑 /etc/network/interfaces 文件,写入:
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

allow-hotplug enp0s31f6

iface enp0s31f6 inet manual

auto vmbr0
iface vmbr0 inet static
        address  192.168.1.102
        netmask  24
        gateway  192.168.1.1
        bridge-ports enp0s31f6
        bridge-stp off
        bridge-fd 0
然后执行 /etc/init.d/networking restart 即可生效。

温度监控

PVE 运行起来后,由于本身 PVE 控制面板里面没有显示主机 CPU 温度等,所以为了能够直观监控 CPU 的温度,我在 PVE 上安装了 lm-sensors 软件来检测 CPU 温度。在 PVE 控制面板的 Shell 里面执行:
# 安装相关软件
apt install lm-sensors
# 让软件收集相关的传感器信息,在获取温度信息之前必须运行这个命令。过程会问你一堆问题,直接选 yes 就行
sensors-detect
# 传感器收集完成之后就可以获取当前的温度信息了
sensors
输出的内容如下(运行这个命令的时候我的一个 VM 正在跑比较耗时的任务,所以 CPU 温度一下子就飙上来了):
root@proxmox:~# sensors
acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C  (crit = +119.0°C)
temp2:        +29.8°C  (crit = +119.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +51.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +51.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 2:        +48.0°C  (high = +80.0°C, crit = +100.0°C)
Core 3:        +45.0°C  (high = +80.0°C, crit = +100.0°C)
接着需要修改 PVE 控制面板的代码,好让我们可以直接在面板里面看到温度信息。在 Shell 里面执行:
vi /usr/share/perl5/PVE/API2/Nodes.pm
然后找到 my $dinfo = df('/', 1); 这一行,在上面写入 $res→{thermalstate} = `sensors`; 然后保存。
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/86fc1c1c-9e02-483a-801d-1fd7adb7b33d_Untitled.png
接着编辑 /usr/share/pve-manager/js/pvemanagerlib.js 这个文件,修改三个地方:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/adbf4556-2f3b-4a3d-8518-35455c7670fe_Untitled.png
18733 行里面的 height: 400 改成 height: 420
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/504cc7af-0ed7-452a-9927-d81e7326f882_Untitled.png
18815 行里面的 height: 300 改成 height: 320
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/4d3079be-2281-4408-b0db-6da6da01d46a_Untitled.png
18933 行里面补充以下内容:
        {
            itemId: 'thermal',
            colspan: 2,
            printBar: false,
            title: gettext('Thermal State'),
            textField: 'thermalstate',
            renderer: function (value) {
                var p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
                var c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
                var c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
                var c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
                var c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
                return 'Package: ' + p0 + ' | Core: ' + c0 + ' | ' + c1  + ' | ' + c2 + ' | ' + c3;
            }
        }
保存完成之后执行 systemctl restart pveproxy 重启 PVE 面板,然后就能从面板看到温度信息了:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/defc26d5-a161-49f1-ac73-4e47e860e964_Untitled.png

配置 PVE Storage

由于我已经有 NAS ,并且系统镜像文件都是存在 NAS 上,所以我在 PVE 上面挂载了 NAS 上的 ISO 系统镜像文件夹,这样就可以从 NAS 上选择系统镜像了。
在挂载 NAS 上的文件夹之前,需要先开启 NFS 服务,并且给共享文件夹设置 NFS 规则:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/ebc54edd-6660-4625-ae7a-c35509d8860f_Untitled.png
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/c851eff0-9bc9-4b01-adc9-6b4067d0bb74_Untitled.png
最后在 PVE 上添加 NFS Storage:
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/c31109cf-673f-4dc1-b760-73208787705f_Untitled.png
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/ead8b898-6c76-43aa-869f-092a32846c55_Untitled.png
这样在创建虚拟机的时候就能够从 NAS 上选择你需要的 ISO 文件了。
当然除了可以从 NAS 上选择 ISO 之外,你甚至可以把虚拟机存在 NAS 上。通过 NFS 或者 iSCSI 挂载 NAS 上的共享文件夹便可以。

Homelab 搭建

这部分有点标题党,因为虽然说是 Homelab 搭建,但是我并不打算详细写我是怎么搭建的。实际上,PVE 搭建好之后剩下的就是根据自身的需求来创建虚拟机实现自己的目的了。创建虚拟机的过程本身很简单,所以也没什么好讲的。
这里列一下我在这台主机上创建的 VM :
/image/37f9dd63-24e7-4362-bde3-d7530e295afc/20f4faeb-5c53-413d-bb51-2721c56b2527_Untitled.png
  • Ubuntu:主要是跑 GitLab ,而且只跑 GitLab 服务。数据库相关的,比如 Postgresql 以及 Redis 仍然跑在 NAS 上。
  • Windows 7:主要用来跑 Google 的 「备份与同步」程序,用来同步我的个人相册到 Google Photos 上。以及有时候会需要使用 IE 浏览器来打开某些银行的网页。
  • CI:主要是用来跑 CI 任务。
  • Clash-gateway:主要是跑 clash ,作为旁路由网关,这样所有设备均可以无痛翻墙。
  • Coder:跑了一个远程版 VSCode ,这样就可以远程写代码了。
另外两个没启动的 VM ,一个 Windows 10 主要是备用的,以防某些 Windows 软件在 Windows 7 上无法运行。因为 Windows 7 系统用的是精简版的 Windows Thin Client ,某些功能可能没有集成。而 LEDE 则是作为 clash 的备用,哪天 clash 用得不爽了就换回 LEDE 。
而群晖 NAS 则跑了以下服务:
  • Moments 套件:用来管理手机的相片,实现照片的自动备份
  • Active Backup for Business 套件:用来备份 VPS 以及 PVE 里面的 VM 的数据
  • Photo Station 套件:用来管理微单的照片
  • Radarr 套件:用来管理电影,以及自动监控和下载电影
  • Sonarr 套件:用来管理电视剧,以及自动监控和下载电视剧
  • Plex 套件:用来远程观看 NAS 上的多媒体文件
  • Video Station 套件:用来远程观看 NAS 上的多媒体文件
  • QBittorrent:用来下载 BT 和 PT
以及还使用 Docker 套件跑了一些容器。所以这样一来,群晖 NAS 就专职存储、备份,以及多媒体文件管理,而云轩小主机则负责跑 GitLab,VSCode,旁路由以及 Windows 虚拟机。自己的所有需求都可以在这两台 server 间满足。
通过这么一个配置可以实现这样的使用场景:
  • 某天自己突发奇想,想开发一个 web 服务
  • 登陆到远程 VSCode 创建项目并且开始编写代码
  • 代码编写完之后提交到 GitLab 上
  • 代码提交触发 CI 任务,进行持续测试和打包发布
  • CI 阶段将 web 服务通过 Docker 打包成镜像,然后推到 GitLab 的 Registry 上
  • CI 阶段触发部署流程,将 web 服务部署到 PVE 的 VM 当中,充当测试环境
  • 最终项目开发完成了就把镜像部署到自己的 VPS 上
而对于多媒体文件的观看,可以实现:
  • 在家的话用电视打开 Kodi 连接 NAS 上的电影电视剧,直接观看下载好的电影和电视剧
  • 不管在家或者出门在外,都可以使用 DS Video 或者 Plex 来观看 NAS 上的资源
  • 如果想追剧的话,在 Sonarr 上添加电视剧并且配置监控,实现自动下载功能。电影同理
无论自己所有设备的无痛科学上网,还是影音方面的需求,或者代码托管,服务的部署,项目的持续集成,这么一套配置都能够满足。
当然实现这种方案的方式有很多,这一切甚至都可以直接在一台 NAS 机器上做到。这是我认为,最适合我自己的一个解决方案。

总结

1600 块钱左右组装的这么一套超小主机,我自己觉得这钱花的值。起码它满足了我的所有需求。
自从接触 NAS 以及 Homelab 以来,自己在这上面花了不少钱,但是收益却远大于支出。当然也有人觉得什么 NAS ,Homelab 都是伪需求。毕竟现在各种云服务很多,而免费的代码托管,CI 服务也一堆。但是,那种自己掌控自己所有数据的感觉是真的很棒。起码不用担心哪家服务什么时候就关掉了,或者更改服务了。也不用担心那些无良厂商售卖自己的私人数据等。Homelab 本身就是给那些喜欢折腾的人玩的,而我乐于其中,这就够了😆。