前言
女儿的照片手机放不下了,一直想攒个NAS机器把照片整理下。商业的NAS如群晖、威联通, 感觉性能都较为一般,而自建机器一直还没下定决心用什么配置。一次契机群友在聊天中说在组装NAS机器, 看配置蛮不错,遂入手。
硬件
机器的配置清单如下:
物件 | 型号 | 价格 |
---|---|---|
主板 | 畅网N5105 | ¥837 |
机箱 | 乔思伯N2 | ¥689 |
电源 | 全汉FSP 350W | ¥359 |
内存 | 光威16GB DDR4 3200 | ¥229*2 |
固态 | 致钛TiPlus5000 Gen3 1T | ¥469 |
硬盘 | 希捷银河8T | ¥1268 |
当然上面的选项有些是超标的,比如内存和固态,可以降配,价格也不是全网最低价,仅参考。畅网主板也有网友直接买N5105软路由机器进行魔改,比乔思伯机箱加单独主板成本会少不少。
其他零碎配件,包括机箱前置USB3.0转2.0转接线(20针转9针),SATA硬盘线6根(3.0直对弯), 以及机箱风扇的四线PWM温控调速器(N5105主板是3pin接口)。
整体装机过程还算顺利,下图是装完主板的样子,可以顺利点亮
![nas case nas case](/posts/nas/part-one/images/nas_case_hu15644356766499720800.jpg)
系统
NAS一种是直接装黑裙或者OpenMediaVault等NAS系统,当然要发挥主机完整的性能,可以考虑先做一层虚拟化, 常见的虚拟化系统有PVE,ESXi,以及NAS圈的Unraid。这三个系统详细的对比,可以参考这篇知乎文章:ESXi、PVE、unRaid对比 。总体感觉,Unraid可玩性还行,但是需要单独的U盘启动,且Linux发行版比较小众,尝试下来之后不是特别顺手,而PVE基于debian发行版,整体灵活性比较好,但是担心后续系统出问题维护较为麻烦,最终考虑ESXi系统,正好早年在公司也都是用的ESXi+vCentor,还算比较熟。
不过ESXi在新版本中砍了不少驱动,8版本在m2固态、网卡驱动上均有些问题,而且给我留了个很大的坑 (在进入安装界面后我的机械键盘不生效,之前一直以为是固态驱动的问题),但总算磕磕碰碰装上了。
ESXi官方原版的iso镜像缺少驱动,所以我们需要使用官方的离线包及社区驱动,自己构建镜像 (网上也有其他人构建好的带驱动的镜像,可以尝试)。
安装PowerCLI
我用的macOS,其他系统可以参考官方文档。首先先安装PowerShell
:
# set brew cask to ustc mirror
brew tap --custom-remote --force-auto-update homebrew/cask https://mirrors.ustc.edu.cn/homebrew-cask.git
brew install --cask powershell
# check installation
pwsh
PowerCLI需要Python3.7的环境,可以使用pyenv
工具安装。从官网下载PowerCLI离线安装包
。
在pwsh
环境下,输入命令$env:PSModulePath
查看PowerShell的模块路径,将下载的离线安装包解压到其中的目录,如/Users/tomo/.local/share/powershell/Modules
,最后验证模块是否正确加载:
PS /Users/tomo> $env:PSModulePath
/Users/tomo/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/usr/local/microsoft/powershell/7/Modules
# 验证是否安装成功
PS /Users/tomo> Get-Module VMware* -ListAvailable
Directory: /Users/tomo/.local/share/powershell/Modules
ModuleType Version PreRelease Name PSEdition ExportedCommands
---------- ------- ---------- ---- --------- ----------------
Script 12.6.0.19… VMware.CloudServices Desk {Connect-Vcs, Disconnect-Vcs, Get-VcsOrganizationRole, Get-VcsService…}
Script 8.0.0.208… VMware.DeployAutomation Desk {Add-CustomCertificate, Add-DeployRule, Add-ProxyServer, Add-ScriptBundle…}
Script 8.0.0.208… VMware.ImageBuilder Desk {Add-EsxSoftwareDepot, Add-EsxSoftwarePackage, Compare-EsxImageProfile, Export-EsxImageProfile…}
Manifest 13.0.0.20… VMware.PowerCLI Desk
...
上面的结果表明PowerCLI安装成功了,整体安装流程可以参考官方安装文档 。
构建镜像
接下来我们通过PowerCLI构建自己的ESXi系统镜像。首先从官网下载如下文件,
- VMware vSphere Hypervisor (ESXi) Offline Bundle
- https://flings.vmware.com/community-nvme-driver-for-esxi
- https://flings.vmware.com/community-networking-driver-for-esxi
- https://flings.vmware.com/usb-network-native-driver-for-esxi
我们放到~/Downloads/ESXi
目录下,文件列表如下:
VMware-ESXi-8.0b-21203435-depot.zip
nvme-community-driver_1.0.1.0-3vmw.700.1.0.15843807-component-18902434.zip
Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip
继续在PowerShell环境中执行下面命令:
# 添加包及驱动文件
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/VMware-ESXi-8.0b-21203435-depot.zip
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/nvme-community-driver_1.0.1.0-3vmw.700.1.0.15843807-component-18902434.zip
# 获取镜像列表
Get-EsxImageProfile
# 样例输出
Name Vendor Last Modified Acceptance Level
---- ------ ------------- ----------------
ESXi-8.0sb-21203431-standard VMware, Inc. 2/14/2023 12:0… PartnerSupported
ESXi-8.0b-21203435-standard VMware, Inc. 2/14/2023 12:0… PartnerSupported
ESXi-8.0sb-21203431-no-tools VMware, Inc. 1/30/2023 5:35… PartnerSupported
ESXi-8.0b-21203435-no-tools VMware, Inc. 1/30/2023 7:21… PartnerSupported
# 复制一个配置文件
New-EsxImageProfile -CloneProfile "ESXi-8.0b-21203435-standard" -name "ESXi-8.0b-21203435-standard-nic" -vendor "tomo"
# 添加驱动文件
Add-EsxSoftwarePackage -ImageProfile "ESXi-8.0b-21203435-standard-nic" -SoftwarePackage "nvme-community"
Add-EsxSoftwarePackage -ImageProfile "ESXi-8.0b-21203435-standard-nic" -SoftwarePackage "net-community"
Add-EsxSoftwarePackage -ImageProfile "ESXi-8.0b-21203435-standard-nic" -SoftwarePackage "vmkusb-nic-fling"
# 导出iso镜像
Export-EsxImageProfile -ImageProfile "ESXi-8.0b-21203435-standard-nic" -ExportToIso -FilePath /Users/tomo/Downloads/ESXi/ESXi-8.0b-21203435-standard-nic.iso -Force -NoSignatureCheck
执行上述命令后,我们可以在目录下看到刚刚导出的镜像ESXi-8.0b-21203435-standard-nic.iso
。
安装及配置
我们可以使用ventoy
工具制作启动U盘,将上述镜像拷贝到U盘中。这里踩的坑就是我的机械键盘兼容性有问题,在ESC/Enter
界面按键无反应,如果出现这种情况可以换个比较低级的键盘试下(比如Dell自带的那种薄键盘)。
如果到这一步,基本系统算构建好了,安装虚拟机,开启核显功能等,我们后续文章介绍。
这里我为了增加可玩性,使用frps+Caddyserver开启公网访问,感兴趣的可以尝试下(需要公网服务器+域名, 域名没有的话可以直接使用ESXi原生的https和证书)。
- 通过web入口访问ESXi管理后台,开启SSH服务。
- ssh登录到EXSi服务器,关闭http到https的自动跳转(因为使用Caddyserver自签了证书,所以反向代理的时候需要使用http协议)endpoints.conf配置了URL路径对应的规则,其中第四列是重定向,将第四列
cd /etc/vmware/rhttpproxy/ # backup endpoints.conf cp endpoints.conf endpoints.conf.back
redirect
全部改成allow
。 - 重启服务
/etc/init.d/rhttpproxy restart
frp是一个内网穿透工具,服务端frps运行在带公网地址的服务器上,如云主机,frpc运行在本地。具体安装可以参考官方GitHub仓库 。
我路由器之前刷过固件,带软件中心,里面有frpc工具,如果路由器没有frpc工具,需要内网有台常驻机器运行frpc服务(比如可以EXSi中建个虚拟机,设置自动启动),frps服务器记得开启防火墙策略,允许7000端口。
路由器中配置如下(除common段落外,配置文件段落命名需要唯一):
![asus frpc asus frpc](/posts/nas/part-one/images/asus_frpc_hu5578493692888684858.jpg)
其中192.168.50.100
是ESXi地址,80是其http端口号。公网服务器中可以查看frps监听的地址:
sudo netstat -natup|grep frps
tcp6 0 0 :::7000 :::* LISTEN 1179303/frps
tcp6 0 0 :::9001 :::* LISTEN 1179303/frps
其中7000是frps的默认通信端口,9001就是frpc中的remote_port
配置。Caddyserver配置如下(需要提前将域名指向服务器):
https://esxi.example.com {
reverse_proxy 127.0.0.1:9001
}
整体网络路径如下:
https┌───────┐9001 ┌────┐7000 ┌────┐80 ┌────┐
────►│ caddy ├────►│frps├────►│frpc├──►│ESXi│
└───────┘ └────┘ └────┘ └────┘
做完上述设置后,可以直接在公网通过域名访问ESXi服务了(当然其他服务也可以类似处理,开启公网访问)。
![esxi public access esxi public access](/posts/nas/part-one/images/esxi_public_access_hu4200240574359201602.jpg)