初见 Homelab
条评论缘起
这件事情说起来有些好笑。当时是 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 系统需要先安装 dkms
和 linux-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 | # enp1s0 为网卡设备名,可以通过 `ip link` 命令查看网络设备列表 |
如果下述命令输出包含 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 会再来更新的。