看别人的Homelab馋啊,空有需求但没有好的硬件,就买了个Intel NUC11ATKC4,四核赛扬N5105 CPU,代号Atlas Canyon(阿特拉斯峡谷)。有人可能会问,就这么个破赛扬能干啥啊?其实只要摆脱坑比Windows,能干的事情多着呢。
不过我承认,标题确实是我临时起的,之后性能余量是否够用,那就是以后的事情了。
开箱
NUC 嘛大家都懂,买回来就是个准系统,没有硬盘没有内存,更别提操作系统了。硬盘买的是血统纯正的国产货,致态(钛)TiPlus 5000 512G,内存则是笔记本换下来的海力士8G*2。这里吹一波东哥的售后啊,硬盘买回来外包装破了,直接进行了一个上门换新,不到24小时搞定。
盒子是一个简洁的纸壳盒子,结合包着每一个部件的塑料袋来看,很难说它是环保还是不环保。包装盒中含有主机、不用看系列(还真得看)、分体式的电源,以及一个灵魂Celeron Inside logo。
电源来自航嘉,约65W功率,三脚插头,考虑到主要部件的功率,余量留得很足。可惜没有做成PD充电。
拆装的话需要拧开底下的四个角的螺丝,这之后就可以直接揭开后盖。
前面板接口有两个USB 3.0 5Gbps,一个8针的工控用途IO,耳机和麦克风各一个;后面板有惊人的两个USB 3.1 10Gbps、两个USB 2.0、一个千兆网口、一个RJ45、一个HDMI、一个DP,以及一个供电用的DC圆口。这个接口量是超出我预期的,但美中不足的是没有USB-C。只有一个网口,注定了它不能当作通常的软路由。反正我不是拿来当路由器的,不管它。
卸下底部盖板后就可以看到内部,排列还是比较紧凑的。如图是装好硬盘和内存的样子,网卡是很令人惊喜的AX201,支持WiFi 6,被盖在硬盘下面。
底盖是金属材质,SSD位置有导热贴。其他地方的导热贴贴得似乎比较散乱。两边具有散热孔,方便空气流通;而散热模组在机身上部。
操作系统与 BIOS
使用 archinstall
脚本,安装了Arch Linux。其实在它的加持下,Arch的安装没有那么难了,也不再需要一点一点的配置,顶多就是TUI界面看起来不太友好。
- 为什么不是Windows?我可不想让这赛扬整天满载;
- 为什么不是TrueNAS?我不会用FreeBSD;
- 为什么不是Unraid?要钱,也对Slackware不熟悉;
- 为什么没有虚拟化(ESXi之类的)?据传N5105跑虚拟化有点问题;
- 为什么是Arch Linux?更新快,Wiki完善,较为轻量,AUR。
装了个GNOME桌面环境,不光是因为有领先的Wayland支持,而且还有一个原因我们后面会提到。虽然I家驱动做得烂,但也不再有NVIDIA独显那样烂泥扶不上墙的问题。
BIOS的设置非常丰富,能够自由调整CPU温度墙、PL1/PL2功耗、风扇转速各方面阈值,也可以自由开关各种接口,可玩性很强。
性能
也不要有什么过高的期望了,N5105只有四个低功耗Jasper Lake核心,总TDP才15W,满载还没一颗骁龙8 Gen 1功耗高。但过热应该非常难出现,毕竟就这点功耗还有主动散热加持。事实证明我的猜想是对的,BIOS风扇设置为cool档之后,烤机CPU温度维持在65度,也比骁龙8凉(狗头)。
Geekbench 5 CPU跑分为单核699、多核2286(详见测试记录);Geekbench 6 单核557,多核1646(记录);Vulkan Compute跑分为2313(详见测试记录)。
使用Firefox观看4K YouTube视频,接2K显示器,略有卡顿。2K分辨率的CS能够流畅运行。平常浏览网页等用途则完全未感受到卡顿。
可能由于本身机能限制或文件系统限制,其实是无法完全发挥这块硬盘性能的,标称读3500写2700,在Btrfs文件系统下,实际上只能做到读写1700左右。
在KDiskMark 中,跑出了一个更慢的成绩。
内存只能跑在2933MHz,应该对核显性能有一定程度的影响,不过核显本来就很菜,无所谓了。
互联
网络
要从外网访问内网中的主机,内网穿透是一个很经典的方案,但这需要一台带宽够高、延迟够低、流量足够多的服务器,这在国内成本比较高,将内网服务暴露到外网也让所有人可以访问,有些危险。虚拟局域网方案顾名思义,将在不同内网下的电脑划在同一个“局域网”里。在这其中,Tailscale算是体验最好的之一了。NAT打洞成功率较高,这意味着大部分时候可以以直连的延迟与带宽在不同设备之间连接。
Tailscale的配置非常简单,按照指引配置即可,用起来就知道有多爽了。目前用起来缺点很少,就是不能为同一个机器分配多个域名并签发多个HTTPS证书,极限网速也比不了直连(并不是因为性能开销过大,表现见下)。某种程度上,就是这种异地组网程序让下面的许多用途从”可能”变为“好用”。
其他的方案还有n2n、Netmaker和ZeroTier等,在此不做介绍。
桌面
这样一来桌子上就有两台电脑、两台手机、一台平板了,但外接屏幕只有一块,键鼠也只有一套,笔记本和NUC打架是自然而然的事情。
关于这种情况,开源社区已经有多种解决方案,主要分为键鼠漫游和远程桌面两种。
键鼠漫游当然是理想中体验最好的解决方案。NUC接外部显示器,跑Linux程序;笔记本用内置屏幕,跑Windows程序。一套键鼠插在某一台设备上,用一个鼠标控制两台设备的桌面。成熟的方案有很多,但统统被我毙掉了,分别由于以下几个理由:
- Mouse Without Borders,仅支持Windows;
- Synergy/Barrier,不支持Wayland;
- Waynergy(Synergy的Wayland fork),不支持GNOME自带compositor;
- rkvm,不支持Windows。
幸好GNOME 42为我留了另一条路,远程桌面。我得以在NUC上开一个远程桌面服务端,然后在Windows下连接。说起来体验还可以,起码日常使用还是够了的。窗口可以全屏,让Linux的桌面铺满整个显示器,局域网内视觉体验非常接近直连;我也可以将远程桌面窗口最小化,从而Windows应用(如游戏)也可以使用大尺寸显示器。
我也试过使用Remmina连接Windows的远程桌面,但结果就是卡顿极其严重,清晰度也很差。当然也可以使用RustDesk或Parsec等其他远程桌面协议,倒也挺好用。
这里推荐一个GNOME插件:Allow Locked Remote Desktop,让锁屏时也可以连接远程桌面,就像Windows那样。
而一旦出现了不方便接显示器的情况,可以使用如下的命令启动一个 headless session(来自 Reddit):
echo -n "user_password" | /usr/bin/gnome-keyring-daemon --unlock
systemctl --user restart gnome-remote-desktop.service
gnome-shell --wayland --headless --virtual-monitor 1280x720 --no-x11
不过问题在于此时GNOME远程桌面连不上。据传,可以使用以下的命令将远程桌面模式设为”扩展“,这样它会为你创建一个虚拟显示器(来自 Reddit 和 GNOME GitLab):
gsettings set org.gnome.desktop.remote-desktop.rdp screen-share-mode extend
当不需要用桌面的时候,就用SSH。尤其是出门后,网络条件难以支持远程桌面,SSH就显得比较好用了。SSH比较好配置,此处省略。
文件互传
KDE Connect完全可以称为最好的跨平台互联工具,通吃所有常见桌面端与移动端环境。GNOME桌面环境上,可以使用GSConnect插件。
文件共享
要将文件暴露到网络上,协议还是很多的。对于公网,一个Web UI+WebDAV会很方便;而在内网中,可以选择SMB。这里与前面KDE Connect的区别,则在于前者是“拉”,而后者是“推”。
Caddy带一个文件服务器Web UI+WebDAV的功能,但死活没配好,就让它等着做反代吧。作为替代的,我使用了AList。AUR有alist包,可以直接配好systemd服务和配置文件。但在新的AUR package中,alist会作为单独的用户运行,对于共享家目录等需要大规模更改权限的场景则不是非常方便。
我是Cloudreve的老用户了,它是非常优秀的网盘程序,而它会重新组织上传的文件;相反,AList能够忠实地将系统文件目录结构呈现出来,既方便远程访问,又方便本地访问。这就是它叫做“目录程序”的原因。它也自带一个WebDAV服务端,很方便。
通过AList+Tailscale下载大文件,约能跑到160Mbps左右;通过内网直连下载,则能够达到720Mbps(路由器硬件所限,非WiFi 6),不管怎样看4K HDR是没有什么压力的,也能喂饱我的百兆小水管外网。
这玩意速度还是有点玄学的,那相较于带加密的WebDAV,不如直接上SMB,负担小,对Windows的支持也更好。Linux上SMB支持主要由Samba软件包提供。
安装就不用说了。先创建一个SMB账户,这里图省事,个人会直接用Linux账户。跟passwd
差不多用法。
sudo smbpasswd -a <account_name>
然后编辑配置文件,路径位于/etc/samba/smb.conf
。你可以选择去下载官方模板,但实际上只需要以下的部分:
[global]
workgroup = WORKGROUP
security = user
[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S
如果你使用了模板,没连打印机的话,记得把打印机注释掉。
然后把服务启动一下。
sudo systemctl enable --now smb.service
然后在Windows添加\\<machine-ip>\homes
就能访问了。
那有了这些空间,干点什么呢?比如存个手机备份,这不比某些厂商的USB 2.0体验好多了嘛,不一定比无线快,还得时刻连根线。
笔记
在Notion-like的软件中,思源笔记拥有较好的Markdown支持,用起来较为舒服,也有自行托管选项(浏览器端),唯一的缺点是Firefox支持较差(可惜由于精力原因,开发者不一定会修)。
使用Podman部署,采用主机网络(rootless container似乎搞端口转发有些问题),命令如下:
sudo podman run -d --label io.containers.autoupdate=registry --name siyuan -v /home/cyp0633/Documents/siyuan:/siyuan/workspace --network=host docker.io/b3log/siyuan --workspace=/siyuan/workspace
具体的命令参数可以查看 官方Docker Hub页面进一步了解。
服务的快捷访问
到此为止,搭建的服务都是用IP地址+端口号访问,不太优雅。虽然Tailscale提供了MagicDNS,但也只能为每个设备分配一个域名。既然上有一个自己的域名,就想到配合Caddy访问内部服务。
就以上面的AList举例,先在DNS中将alist.internal.cyp0633.icu
(仅作示例,你当然用这个访问不到)指向NUC的Tailscale IP,然后Caddyfile可以这么填写:
alist.internal.cyp0633.icu {
reverse_proxy :5244
tls internal
}
然后Caddy就可以搞定反向代理,甚至包括自签名的HTTPS证书。第三行是必不可少的,因为.icu是公认的TLD,Caddy会尝试向公网CA申请一个证书,它当然不能接入Tailscale局域网;显式指定tls internal
之后,Caddy才会自行签名一个证书(见 官方论坛帖子)。这样,便可以访问这个域名来获取服务,无需记住端口号,就像是在平常的服务器上一样。类似的,也可以这样配置多个域名指向同一IP,来让Caddy做分流。
思源笔记有WebSocket部分,但不需要特别设置。
远程下载
有了这个,就可以远程下片了(逃)。算是用了一种经典方案吧,aria2。pacman就有打包。
配置文件 aria2.conf
可以参考 P3TERX 的配置文件,但注意不要照搬,先读完,再使用。
如果要让aria2在后台运行,可以使用systemd服务,在/etc/systemd/system中编辑aria2cd.service(改编自Arch Wiki),然后启用即可:
[Unit]
Description=aria2 Daemon
[Service]
Type=simple
ExecStart=/usr/bin/aria2c --conf-path=你的配置文件路径
[Install]
WantedBy=default.target
至于Web界面,我使用了AriaNG,也是经典的解决方案。使用Caddy反代一下就行了。在Caddyfile里限制了HTTP,否则必须一起反代HTTPS的Aria2 JSON-RPC。
开发
只要提到远程开发,必定少不了神通广大的VS Code。之前写过文章的第三方的code-server仍然可用,而且是一个完全开源的版本(基于code-oss),感兴趣的可以看一下GitHub页面,讲得很详细(我写的太久没更新,不推荐阅读)。
此处要讲的是另外一种途径,来自微软的VS Code Server,这意味着它可以使用Copilot等必须在微软发行的版本才能使用的插件。这项功能已经进入公测,并包含在所有1.74.0或更新的VS Code版本中。可以使用 vscode.dev 网页或现成的VS Code客户端连接,即使不在同一局域网下也可。具体的启用方法可以见这篇blog post,但长话短说,就是使用 code tunnel
命令。另附内测时期的开启方法如下:
两个方法都占用很大,占用内存可能达到2G左右,CPU负载也很高,因为所有language server的parsing等操作都是在这台NUC上进行的。但不管是上述两种方法中的哪一种,都可以在平板上码代码了,并且得到很舒服的延迟与比我自己公网上服务器高得多的性能。
照片
请见:
数据保护
如果你使用的也是Btrfs文件系统,且对数据安全没有那么高的要求,那么可以参考这篇文章。
此篇文章首个版本约有四分之三通过NUC的远程桌面写成。它作为没那么多预算的我买的入门Homelab,经过这一段时间的使用,已经证明了能够胜任目前的需求,性价比目前看还算不错。
学长是在寝室里装宽带的吗
一直也想折腾 NAS 来着,但是感觉 HNU 这破校园网网速也拉胯流量也不够用,而且还有连接设备数量限制,根本没有搭 NAS 的条件……
是的,寝室拉了条宽带,有个软路由做前置认证,就不受设备数量限制了,下面拖的设备也都不用认证
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。
抱歉,你们的网站没有对版权的任何说明,我没有理由把内容搬迁到那里;如果已经在搬运我的文章,请注意许可证。