缘起

这件事情说起来有些好笑。当时是 2021 年 4 月,chia 币挖矿非常火热的时候,我担心硬盘的价格也会像显卡那样长期维持高位(当然幸好最后没有变成这样),于是连忙从美亚订购了两块 HC530。等我再想起这两块硬盘的时候已经是 8 月的事了,为了这碟醋我包了盘饺子,也就是我的第一台 homelab。

硬件选择

机箱

某种角度上来说机箱才是 homelab 的中心 —— 多少盘位、适配的主板和电源的尺寸、或者也可以包括是否需要另购机架都在「帮助」你确定最后成品的角色。在茫茫机箱海中我选择了 银欣的 SG11,3 个 3.5 寸硬盘位足够最基本的磁盘阵列搭建了,支持 M-ATX 主板和 ATX 电源可以帮我降低硬件开销 —— 当然更重要的是,这个机箱挺可爱的,还能正好塞进房间角落的椅子下面。

CPU、主板和内存

CPU 我选择了 Intel i3-10100;搭配的主板选择了微星 B560M-A PRO 这张商用主板,主板附带了 1 个 PCIe x16 插槽、2 个 PCIe x1 插槽、6 个 SATA 接口、2.5Gbps 有线网卡和一个 M.2 接口,可惜只有两个内存插槽,不过和更便宜的 H510 主板相比还是应有尽有了。内存买了条科赋的 2666MHz 16GB 普条,便宜且颗粒可靠。

硬盘

我暂时没有组建任何形式的磁盘阵列,让读者们失望了。手头有块用过的英睿达 MX500 500GB,我就直接拿来当系统盘了;数据盘只用了一块 HC530,之后要是再买一块 HC530 就组一个 raidz1 吧。

其余配件

电源选择了台达 NX350;散热器选择了利民的 AXP90-X47;8cm 机箱风扇选择了 Arctic F8 PWM—— 这些都是新买的。

开销

仅包括在 2021 年 8 月新买的硬件,如下表所示。

配件 价格(CNY)
机箱 439
CPU+ 主板 1185
内存 379
电源 229
CPU 散热器 129
风扇 68

上述配件总共花费人民币 2429 元。

系统选择

其实也是为了图省事少折腾,我直接安装了「通用操作系统」Debian 11。值得一提的是,默认版本的安装镜像是不带闭源驱动的,(当时安装系统时)无法识别这块主板自带的 2.5Gbps 网卡(RTL8125B),于是我们需要下载 nonfree 版本的安装镜像。在 Debian 11 的基础上 我安装了 openmediavault(下称 omv)这一 NAS 管理套件(6.x 版,代号 shaitan),这样我的小鸡也有一个管理面板了;软件源使用了 金枪鱼社团提供的 openmediavault 国内镜像,谢谢金枪鱼。

驱动安装

Linux 内核在 5.9 以上版本添加了 RTL8125B 的开源驱动 r8169,现在的 Debian 11 安装镜像装载的是 5.10 版的内核,所以也不需要额外安装网卡驱动了。不过如果没法用上 5.9 及以上版本的内核,或者发现 r8169 没能让 RTL8125B 工作在 2.5Gbps 上,还是得去 官网 下载驱动。运行驱动安装脚本之前,Debian 系 Linux 系统需要先安装 dkmslinux-headers-amd64(使用 backports 源的用户需要注意内核版本需要和头文件包版本是否对应,也可以直接安装 linux-headers-$(uname -r))。

服务搭建

在 omv 管理面板的「系统」「插件」中我们可以找到一些官方提供的好用的服务。在安装了 omv-extras 之后,我们就可以通过 omv 的网页管理面板一键安装 docker 平台和 docker 管理面板 portainer(2.x 版)—— 虽然我还是更喜欢用命令行。有了 docker 事情就方便多了,我把自己搭建的服务整理在下面的表格中。

功能 方案 备注
代码托管 Gitea
CI Drone CI DockerHub 上的镜像是企业版的,虽然 个人和特定组织可以免费使用
BT/PT 下载 rtorrent+rutorrent
无头(headless)桌面环境 accetto/ubuntu-vnc-xfce-g3 该镜像基于 Ubuntu 20.04 LTS 制作,推荐使用带 Firefox 的 accetto/ubuntu-vnc-xfce-firefox-g3
内网穿透 frp 我买了 Sakura FRP 的成品服务
虚拟专用网 ZeroTier

虚拟化

KVM 虚拟化完全可以通过 omv 的插件实现,直接在 omv 的网页面板上安装 openmediavault-kvm 这一插件,便可以在「服务」菜单中找到「KVM」菜单了。在第一次创建虚拟机前需要参考 这篇教程 做一些配置工作,注意创建的储存池名称需要和教程中一致,不然插件会无法识别。

创建虚拟机时我们需要选择虚拟机内的操作系统,可选系统列表很有可能是过时的,需要参照 这个回答 更新可选操作系统列表信息。

完成创建虚拟机后,可以点击「控制台」内的「运行」按钮添加网页端 noVNC 访问;如果碰到显示默认端口时「运行」按钮显示灰色无法点击,只要增减一下端口(猜测是表示用户确实掌握了端口分配情况)就可以点击「运行」按钮了。

外部访问

如果读者也像当时的我一样对各类网络组件近乎一窍不通的话,那 frp 可能就是学习成本最低的外部访问方案。在服务商的网页上创建好连接 ssh 端口的隧道,在 homelab 上启动客户端,就可以方便地从外网访问 homelab 了;如果需要使用 homelab 其他端口上的服务,我们可以直接使用下述命令启用 ssh 转发

1
ssh -L <local_port>:<host_on_remote>:<port_on_remote> <remote_host>

比如我们需要转发 homelab 的 80 和 443 端口并绑定到的本机的 8080 和 8443 端口上,我们可以使用下述命令

1
ssh -L 8080:localhost:80 -L 8443:localhost:443 homelab

<host_on_remote> 是对于 homelab 而言的 host,对于 homelab 来说它自己就是 localhost 嘛。

网络唤醒(WOL)

说实话我觉得没什么用,但是我还是折腾了一下。

BIOS 设置

我在这块微星主板的 BIOS Settings\Advanced 菜单内修改了如下设置:

  • Integrated Peripherals
    • 启用 LAN Option ROM
    • 启用 Network stack
  • Power Management Setup
    • 禁用 ErP Ready
  • Wake Up Event Setup
    • 启用 Resume By PCI-E Device

(其实我不清楚 ErP Ready 起到了什么样的作用。)

操作系统设置

执行如下命令

1
2
# enp1s0 为网卡设备名,可以通过 `ip link` 命令查看网络设备列表
sudo ethtools -s enp1s0 wol g

如果下述命令输出包含 Wake-on: g 就表示操作系统已经启用了从这一网络设备启动的支持。

1
sudo ethtools enp1s0 | grep Wake-on

OpenWrt 触发网络唤醒命令

包管理器安装了 luci-app-wol 这个包之后就可以通过网页控制面板的「服务」中找到「网络唤醒」了,选择 homelab 对应的 mac 地址触发唤醒命令即可。

注意事项

我现在用的路由器是 TP-Link TL-WDR5480,2.5Gbps 接口是通过 SPF 口转接电口模块获得的,homelab 接在这个 SPF 口上是没法实现网络唤醒的,只能接在 1Gbps 的 LAN 口上才能支持网络唤醒功能。

后续计划

首先当然是组建磁盘阵列了,数据盘自然是机械硬盘 raidz1 阵列,系统盘怎么配置还没有想好,如有必要还会另购一条 16GB 内存;另外一个问题是现在我现在还没有 UPS,用上磁盘阵列和 UPS 会再来更新的。