最近 NAS 这个话题在数码圈也算是蛮火,今年各种 NAS 产品也都是百花齐放,结合前提天阿里云盘出现能看到他人网盘信息这种隐私事故,刚好我的 NAS 也算是折腾的差不多了,今天来分享一下我的 NAS 方案。
</br>
---
</br>
### 硬件
首先就是硬件篇,主打的就是一个白嫖
* cpu: intel i5-8400 (朋友拆机件)
* 主板:外星人 R7 IPSKL-SC (朋友拆机件)
* 内存:型号太过于混乱 8+8+16+16=48G (各种渠道)
* 机箱:半岛铁盒 T10 (咸鱼全新)
> 主要电脑在这块就是朋友不要的外星人台式机,好多年前的了,我自己加了内存什么的,品牌机的空间一般都特别紧凑,能用的空间都用完了,所以我自己换了个机箱,也是便宜大碗那种,有10个硬盘位,虽然质量不行,但是机箱放那又不动,我觉得挺划算。
目前的硬盘
* 三星PM961 256G 用于系统盘 (旧电脑拆机)
* 西数 SN730 512G 虚拟机系统盘&软件等 (淘宝二手)
* 海康威视监控盘 4T 数据冷备 (拼多多全新)
* 东芝氦气盘 14T 主数据盘 (淘宝二手)
* 未知机械盘 1T 临时数据 (旧电脑拆机)
> 硬盘这边我也没组什么 RAID,就一块容量目前够用的主盘,一个从盘定时备份重要数据,平时就是一直休眠着,我也挺想尝试下 RAID 的,为什么没用下面再说。两块固态,一个系统盘,一个放虚拟机系统和其他程序,一般这种读取随机读取要求都比较高。原本那个主板只有一个固态接口,我又买了一个 PCIe 转固态的转接板,所以如图你对后面扩展性要求比较高的话,买主板可以注意下 PCIe 插槽的数量,PCIe 基本上什么都能转,还能插显卡跑转码机器学习什么的,SATA 接口数量不够也能用 PCIe接口扩展,总之就是很爽。
</br>
---
</br>
### 软件篇
我的这套,说是 NAS, 更像是一个 HomeLab ,具体的思路是参考[司波图](https://space.bilibili.com/28457)的[PVE AIO](https://gitee.com/spoto/PVE_Generic_AIO)教程,所谓 `AIO`,即 `ALL IN ONE`,所有服务部署在一台机子上,又被网友戏称 `ALL IN BOOM`,这个机子挂了就全没了,不过数据安全这个我后面也有考虑。
我这就说点我的方案,具体教程建议看下上面`司波图`的,最好也看下各个软件的官网文档,毕竟那个才是最准确的,只是有些写的内容太多,让人无从下手。
具体的架构如下
宿主机 : PVE ([Proxmox Virtual Environment](https://www.proxmox.com/en/proxmox-virtual-environment/overview),以下均以此简称)
* LXC-1: (用于运行各种docker服务)
* [immich](https://github.com/immich-app/immich) 照片托管
* [jellyfin](https://jellyfin.org) 影视媒体库
* [qBittorrent](https://www.qbittorrent.org/) BT下载
* [filebrowser](https://filebrowser.org/) 文件管理
* [nas-tools](https://github.com/NAStool/nas-tools) 稍微方便点的文件下载吧,目前已停更
* [v2raya](https://v2raya.org/) 为其他服务提供代理
* [AutoBangumi](https://www.autobangumi.org/) 订阅动漫,自动下载
* LXC-2: Coding自定义节点
* VM-1: [openmediavault](https://www.openmediavault.org/) 轻量级nas系统
* VM-2: window10 用于百度网盘迅雷下载远程浏览器等
> [LXC](https://linuxcontainers.org/) 是一种 Linux 容器技术,不是虚拟机,和 Docker 类似,所以没多少额外性能开销,可以用来做程序的隔离,而 Docker 部署一些第三方服务比较方便,所以这里在 LXC 里面运行 Docker,算是一种套娃了,不过也没啥性能损失,还相对便于管理,里面服务挂了对其他程序也不会有什么影响
> VM 这里指的是虚拟机
我习惯用 Docker Compose 来部署程序,即使是一个很简单的程序,比起直接 `docker run xxx` , 把命令写到文件里面,省的我每次去记端口号,挂载路径等一堆东西,也不用去查看容器id了,每次 `docker compose restar` `down` `up -d` 也是很方便,升级就 `docker compose pull` 之后 `docker compose down`
`docker compose up -d`。
> 有些系统的命令是 `docker-compose`
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726972502055.png)
一般我就是把每个程序都建一个单独的文件夹,里面是`docker-compose.yml`文件,用户主目录有一个`server.txt`,是记录各个当前系统已经分配的端口,下次我部署了新的程序,就会在这里找一个空余的端口。
NAS 上的文件夹可以通过 SMB (smb就windows上那个网络邻居,现在邻居去掉了,就文件管理->网络面板) 挂载到 LXC 容器中,由于都在一个网桥下面,也不会受到网络质量影响。
还有一台 LXC 容器部署了 [coding](coding.net) 的自定义节点,coding 是国内的代码托管平台,我不开源自己写的项目主要就放在上面,主要还是干吃饭的活,国内网络好点,能省点麻烦就省一点。他们提供了免费的 CI(代码构建)服务,不过资源有限,而且构建用的机器最大内存就 4G ,在我打包一个项目的时候因为内存不够打包失败过 (NUXT太夸张了),我挺喜欢他们这个自定义构建节点的功能,只要自己机器上执行一行安装代码,安装他们的服务后就可以在自己机器上执行构建,那肯定就是不限时不限量啦,通信好像是用 websocket , 也不需要公网 ip 内网穿透这种。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726973379064.png)
所以说,虽然我这玩意功耗不低,一个月电费比网盘会员还贵,但是想到这个在实际生产力的用途,就觉得还是很值的,可以省点云服务器钱,部分服务器迁移到我本地服务器。
下面简单讲下我其中一些服务
</br>
---
</br>
### PVE
像是 vmware 微软等都也有虚拟化方案,这里主要选择了 pve ,用了之后才是感觉爽,怎么形容呢,我都想我自己的主力电脑整一个这玩意,上面运行一两个虚拟机,可以随时切换,快照,回滚,设备直通也不会有什么性能上的损失。当然这只是想想,我电脑又不需要一直开着,并且也没啥重要数据,而且睡眠和电源指示灯常亮也是一个困扰。
如果你对虚拟机没什么要求,只是简单的 NAS 功能,顺便部署一两个 Docker 程序,那一般的 Nas 系统也能满足你的需求,包括 OMV(openmediavault,以下均以此简称),这种非商业的 Nas 系统也不会有什么权限限制,ssh登录安装一些第三方程序都是轻轻松松。
而用 PVE 的好处,除了虚拟机以外这个优点,就是你可以随便更改你的架构,增加内存啦,快照啦,迁徙系统啦,设备映射啦,增加系统盘大小什么的,除非你新增了什么硬件,你都不需要重启系统(显卡直通这种有些涉及内核改动还是需要的,但也就这一次),躺在床上手里笔记本都可以操作,耗时的任务就搁在一边,自己做别的事情去。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726974326307.png)
这是我部署的一些虚拟机,有些就是临时搭建个什么东西,比如哪里看到的私服玩玩,不需要了再把虚拟机删了,关了也不消耗啥资源。
还有一个 macos 的虚拟机,说实话有点卡,看过一些别人的教程,直通显卡之后呢,是可以当正常系统用的,我这没有多余的显卡,目前就是用它测试一些东西,卡点就忍着了。
比如后面我想学习一个 k8s 之类的东西,PVE 也能派上点用场,所以这就是最大的好处,对于`玩`来说,这东西(PVE)很有必要。
另外说下他这个 usb 直通
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726974714364.png)
你需要把 usb 插上去,他才可以识别到,直通之后即使拔掉也会一直分配这个 usb 端口给虚拟机(当然你可以随时移除)。我想后面可以写一些程序实现 usb 自动备份(OMV已经有这个功能,但是不好用),把端口分配给指定虚拟机,把相机的 usb 读卡器插上去自动复制里面内容到 NAS。
</br>
---
</br>
### OMV
OMV 这里充当着我的 NAS 系统的角色,几乎所有的储存都在这里,其他的 NAS 系统也有 FreeNas (免费,设备性能要求高), TrueNas (收费,性能要求没那么高),我都没用过,这里也就不多说了。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726974926439.png)
我是把主板上的整个 SATE 控制器通过 PVE 直通给 OMV,关于上文 PVE 的有些没讲,硬盘直通方面可以参考[这篇文章](https://foxi.buduanwang.vip/virtualization/1754.html/),这位博主[佛西博客](https://foxi.buduanwang.vip/) 关于 PVE 的内容写的蛮多,受益匪浅。
SATA 控制器直通给 OMV,便于 OMV 读取硬盘基本信息,硬盘故障邮件通知,硬盘休眠等功能,如果你也使用虚拟机方案,也是非常推荐直接直通控制器。
OMV 提供了很多插件,但我觉得这些插件大多不太行,没有什么灵活性,想什么虚拟机,Docker 也都有,如果你是裸机装这个系统,也只能用这个方案(或者直接 ssh 安装你需要的)。
硬盘这块,我这就三个,不过主要的就俩,另一个凑数,也没整什么 RAID,主要我觉得,后面的数据恢复什么的,我还不太了解。还有就是呢,目前因为出租屋的原因,我主要用 wifi,NAS 放在了客厅,wifi 连接的速度也不是很快,也就 30m/s,扯一跟网线的话比较费事。如果是想要直接在 NAS 上工作,达到本地硬盘一样的体验,还是要有个网线才行,目前先不考虑。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726977022199.png)
不过我这种的好处就是硬盘直接就是原始文件格式,即使服务器挂了,我插在我的硬盘盒上,依然不耽误使用
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726977276014.png)
硬盘的备份是使用自带的定时任务面板,使用 Rsync 命令,Rsync 本身也支持增量同步。
同时我的这篇博客所在的公网服务器上的数据,也会通过定时 Rsync 备份到我的 Nas
其他数据共享,自带是支持 NFS,SMB 这些,插件有其他的支持就没怎么看了,NFS 我目前也没搞懂,在 PVE 上我通过 NFS 挂载了个远程存储,网络断了(我重启了 NAS
虚拟机)之后也没有自动恢复,实在搞不懂,所以我还是安安心心用了 SMB,windows 也能完美支持。
</br>
---
</br>
一些其他软件们
</br>
### immich
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726981986777.png)
也是我一直在和别人安利的照片管理服务吧(也可以支持视频),目前更新的频率很高,基本每个月都会推出新的功能,优化界面逻辑。也有安卓和苹果的 app,目前完全免费,官方有个捐助 license ,不捐助的话功能也都没影响。
虽然官方有声明目前为开发版,功能可能不稳定,不要作为你唯一的数据保存方式,不过因该也不会有啥数据丢失,最多是软件数据库重建。
我目前是主要保存在两个文件夹,一个是来自手机同步的,就全部由 immich 管理,一个是我相机拍摄,immich 通过外部库的方式索引,并且只能查看不能删除移动,这点也算是优点吧。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726982423998.png)
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726982436297.png)
另外人脸识别的质量还行,可以纯cpu识别
![1726982544397.png](https://thetbw-hk.cos.thetbw.xyz/blog/1726982544397_1726982546752.png)
还有就是这个地图,没有中文支持,目前也不能更换地图提供商。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726982627079.png)
</br>
### Jellyfin
</br>
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726982861796.png)
由于我这个 cpu 有核显,硬件转码还行,前面`司波图`的教程里面有 jellyfin 转码的教程,在内网使用这个不太重要,在户外访问的时候不转码的话,带宽一般都不够
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726983117499.png)
说下我踩到的坑。
* 转码设置里面有个转码临时路径,确保这个路径空间够大,这些临时文件可能会有几十上百 GB,虽然 jellyfin 会自动清理,可能还没来得及清理你的系统就因为被塞满程序都莫名报错了。我是程序直接挂了,启动的时候一直是数据库连接错误,我还以为是数据库损坏了,后面才发现是系统空间全满了,后面我全都挂载到 NAS 存储了。
* 视频播放字体问题,jellyfin 有两种字体,一个是 web,也就是网页直接渲染的字体,这个会受到浏览器的影响,还有一个是系统字体,这个在字幕嵌入(把字幕渲染到视频中)会调用,如果你播放的一个视频字幕用了特殊字体,你播放可能就显示一些方块,需要添加额外的字体,在 jellyfin 后台的`备用字体文件路径`只针对网页渲染,字幕嵌入调用的是系统,你还需要把字体也添加到系统目录,我下面的docker-compose.yml有示例。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726983193203.png)
> 题外故事 : 昨天又重新看了下《后会无期》这部电影,片头的主题曲`后会无期`和片尾的 `平凡之路`挺切合整片的,几个小故事看起来杂乱无章,也没什么关联,这个电影评分也算一般,不过我挺喜欢的,感觉人生就像是由这种一篇篇杂乱无章的故事构成。
> 最近之所以想起这个电影,是因为另一个电影,《里斯本丸沉没》,《后会无期》的制片`方励`导演的一个纪录片,讲述的是二战时期日本押运英国战俘去日本的路上,船被美军击沉,最终船沉没,船上800多名英国士兵跟随船一起在中国东极岛附近沉入海底这个历史事实,其中有一些士兵被当地的中国村民救助。
> 韩寒导演写的那个歌词,“当一艘船沉入海底,当一个人成了迷” 也是来自于这个故事,推荐去看下,虽然我还是蛮喜欢日本文化的,但日本当时做的真的一个比一个离谱。
[一个理想主义者的倾家荡产|方励 一席第231位讲者](https://mp.weixin.qq.com/s/7SODZ0XP8Jz--D4czjwFvw)
> 上周还想去东极岛玩玩,但众所周知,上周来了台风,世事就是这么不如意,有想法时还是不要拖拉好。
</br>
### filebrowser
</br>
自托管的网盘的程序有蛮多,之前我用的是 [cloudreve](https://cloudreve.org/) ,配合 onedrive ,不过各个网盘都有自己的数据结构,怎么和外部系统协同才是最大的问题。
正如上文说的,我的 NAS 没有使用 RAID,储存就是基本的文件夹结构,这时候 filebrowser 感觉正好,正如其名,他不是类似 cloudreve , nextcloud 那种,filebrowser 遵循你硬盘的原始文件结构,同时也有多用户,文件预览,文件编辑功能, 也不需要什么数据库支撑。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726984905500.png)
</br>
---
</br>
### 网络
其他的应用也没有什么好介绍,说下我的网络相关的吧,NAS,网络存储设施,网络和存储才是最重要的两个。
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726985567436.png)
> 飞书简单画下
网络不存在什么架构的,就是比较简单的直接都连接到一起,只要大家都有个 ip,就能连,ipv6 啥的不太懂,就没折腾。
这里主要讲下对外的连接方式。
第一个就是 tailscale,这是我最初使用的方式
![image.png](https://thetbw-hk.cos.thetbw.xyz/blog/image_1726985805155.png)
> 内网ip暴漏应该没啥事吧
每个机子,虚拟机,我都装了一个 tailscale ( docker 里面装 tailscale 需要特殊操作), 在内网,tailscale 可以直接连接连接,外网,tailscale 先从中转服务器转发,同时进行 p2p 连接,连接成功后再切换到 p2p,由于 tailscale 境内没有中转服务器,我自己搭建了一个,不过也不是国内,香港的服务器。
需要自己搭建的话可以看下 `fredliang/derper` 这个 Docker 镜像,不过我发现他这个运行一段时间就会连接失败,又设置了个定时任务,定时重启。不得不说,tailscale这个先走中转的逻辑,中转服务器启动后两个设备就是秒连,不像我用过的其他的打洞还要等一会,体验还是蛮好的。
由于我的也属于境外服务器,白天体验还行,晚上别提看视频,打开网页都卡,延迟还是很高。
然后我又发现,[CloudFlare Tunnel](https://post.smzdm.com/p/admp85dn/) 的 内网穿透的效果体验还行,虽然速度不太行,但好在稳定,即使是晚上,也能低码率看我 NAS 上的视频。
最后应该就是目前我最满意的一个,那当然是 `公网ip` !!!
之前也是在网上听别人说说,自己从来没有尝试过,更别说我这只是很便宜的套餐了。那天自己突发奇想,给客服打了个电话询问了一下,结果下午就有个回访电话,确认了一下我的基础信息,直接给我开通了。就是这么的意外,那天可是激动死我了。
有了公网 ip 玩法就多了,再也不用搞什么内网穿透了,不过我的内网穿透都还保留着,因为即使我切换了网络,把电脑搬到了另一个地方,只要能联网,它们都能正常工作,也算是个后备方案吧。
30M 的上行管带,我可以在工作直接远程桌面到家了,也不用向日葵什么的玩意。
坐标南京联通,有需求的小伙伴可以试试。其他地方就看当地的规则了。
开通了公网 ip ,并不是就代表你 ip 直接就是公网,就能直接访问了,通常你可能需要重启下光猫,由于之前都是光猫来拨号,你的路由器处于光猫的内网中,即使有公网ip 也是不能直接访问的,所以你需要把光猫设置为桥接,路由器进行拨号,这时候路由器就直接暴漏在公网了。
通过路由器上的端口转发,你可以把连接路由器上指定 mac 的电脑的指定端口也暴漏在公网。不同的运营商不同的地区设置不一样,详情可以搜索下,管带拨号密码≠你的账号密码,不清楚可以打客服电话,光猫设置桥接可以打当时装光猫师傅的电话,我是直接网上搜到的解决方案,因为我这个光猫后台密码好像是固定的。
</br>
---
</br>
然后就是这样吧,最后分享两个我的服务器图片
![b4a4b72e42fd6366cd33ba56ebfb54e.jpg](https://thetbw-hk.cos.thetbw.xyz/blog/b4a4b72e42fd6366cd33ba56ebfb54e_1726987238025.jpg)
![77de5ae594537d88b33953d22388f9a.jpg](https://thetbw-hk.cos.thetbw.xyz/blog/77de5ae594537d88b33953d22388f9a_1726987243956.jpg)
之前硬盘温度还蛮高,前面板我又加了三个风扇,现在温度基本就 40°,还挺稳定,就是硬盘炒豆子声音还蛮大。
硬盘架的空余还很多,还有三个多余的空间的 PCIe 接口,后面再慢慢折腾。
</br>
---
</br>
这个文章前几天就打算写了,但一直拖着,本来觉得也花不了多少时间,就一点点体验,现在已经花了我大半天的时间了,感觉也没写什么东西。不知道是不是我能力的问题,按我目前的认知,写一篇不错的文章,那不要花好几天时间了,感觉网上挺多谈到xx副业的都挺扯的,人的精力还是有限的。
我的nas解决方案