一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)

e3,nas · 浏览次数 : 0

小编点评

**Nextcloud推荐安装:** * 对公共网盘,推荐使用**Nextcloud**。 * 对私有网盘,推荐使用**Alist**。 **docker推荐:** * 使用**docker**,可以封装程序,实现开箱即用。 * 容器之间相互通信时,可以使用**docker-compose**等工具。 **内网穿透:** * **frpfrp**是开源的内网穿透程序,可以用于跨机房网络的访问。 * **frp**可以将内网中指定机器和端口的服务投射到拥有公网ip的机器上,在其他电脑上看来就像公网ip机器上在运行这个服务。 **其他事项:** * 在配置**nginx**时,可以设置子域名转发绑定域名后,网站看起来很完美,但是最后的那个端口号看起来仍然不舒服。 * **nginx**的端口转发功能可以实现子域名转发绑定域名后,网站看起来很完美,但是最后的那个端口号看起来仍然不舒服。

正文

一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)

本文将简要简要介绍本人自建NAS的完整配置,截至发文此NAS已经连续良好运行一年,应当说具有良好的稳定性。

本文所述配置包含洋垃圾成分,在仿照本文搭建系统前,请确保自己已掌握相关知识和具备足够的问题解决能力

0. 概论

本文将按照以下主题逐一介绍整个搭建方案:

  1. 硬件选择和组装
  2. 操作系统的选择
  3. 网盘的挂载与管理程序
  4. 将网盘服务穿透到公网
  5. 其他注意事项

1. 硬件选择和组装

a. CPU

基于稳定性和性价比考虑,自组NAS最好选择服务器CPU,比较合理的选择是英特尔E3平台和E5平台的服务器(洋垃圾)CPU。服务器CPU具有比普通消费级CPU更好的稳定性和设计冗余,同时支持ECC内存,保证电脑能够长时间开机运行。

E3 CPU更便宜,同时兼容英特尔4代CPU的主板,但是生产时间比较早,只支持一些较早的硬件和协议。E3 CPU一般都是4核8线程,只支持ddr3内存,最高容量支持到32G,部分型号有核显(核显可以用在流媒体解码加速上),功耗在20w到85w不等。

E5 CPU更新一些,核心数也有了显著提升,支持ddr4内存,但是E5开始服务器处理器彻底不兼容消费级主板,也就是说必须去寻找二手的服务器主板。这些主板通常比较贵,功耗通常上百瓦,开机时风扇直接起飞。

介于NAS本身并不从事高负载工作,所以E3 CPU的性能是完全够用的,而且E3 CPU功耗足够低,不需要强力的散热。

最后本人选择的CPU是E3 1265L v3,L代表低功耗CPU,这颗CPU的TDP只有45w,120块到手。

b. 主板

如果选择了E3 CPU,那么所有1150插槽的主板都可以用(包括支持4代酷睿的主板)。但是考虑到稳定性,最好还是用上服务器主板,或者工作站主板。这类主板支持ecc内存

如果选择E5 CPU,那么只能去找旧服务器主板了,价位略高;还有一些华强北产的寨板(x99),不过这种板子能撑多久不好说。

我最后选择的是华硕的 P9D-WS 主板,工作站主板,支持ecc内存,大概四五百块钱。这个板子有多达6个sata接口和四个pcie插槽,可以满足外接大量硬盘的需求。

买旧主板一定要仔细检查接口和功能,老主板经常会有各种小毛病。比如我第一次买到的主板风扇控制器是坏的,风扇一直满速运转。

c. 内存

E3 CPU只支持ddr3内存,都装服务器了,直接4根插满,内存频率能跑就行,1333M和1600M就够了。

再说一遍,为了保证稳定性一定要用ecc内存(ecc,带奇偶校验的内存,可以检测内存比特错误翻转,极大提高系统的稳定性)。ecc内存价格反而比普通内存更便宜,因为普通消费级CPU是用不了的,所以有了大量存货。

不过ecc内存也分成两种,一种是带缓冲的ecc内存(Buffered ecc),还有一种是不带缓冲的(也叫纯ecc)。买之前要看清主板支持哪种ecc内存。我这里的P9D-WS主板就只支持纯ecc内存而不支持buffered ecc。买错内存轻则失去ecc功能,重则无法开机。(你也不想为了一个内存干等两天吧,笑)

我最后买的是三星的纯ecc内存8G * 4,一共240块。

d. 硬盘

硬盘没啥好说的,建议一个固态(SSD)做系统盘,剩下的就是组NAS的机械盘(HDD)了。

固态买个一两百G的就够用了,一定要买大厂的。或者可以逝逝去捡服务器拆机的slc,mlc硬盘。

机械盘不要买氦气盘,坏得快;不要买nas盘,智商税(点名批评西数红盘);注意一下不要买叠瓦盘。一般来说买监控用的黑盘就行了,写数据优化,不容易坏也不是叠瓦盘。

e. 其他

用E3 1650L的话电源大于250w绝对够了;不要显卡;散热器用最基础的下吹式就够了;机箱要选多盘位的;服务器不需要显示器。

强烈建议再购买一个pcie/pci转Sata的转接卡,用来接系统盘,从而实现将系统盘和数据盘隔离,pcie x1转2Sata的就行了,具体原因我会在下一章讲。

总合

除去一堆机械硬盘一整套加起来1千2以内绝对能搞定。

2. 操作系统的选择

a. 虚拟化:ESXI系统

虽然最初目标只是搭建一个NAS机器,但是为了灵活性和充分利用服务器硬件资源,强烈推荐在裸机上先安装一个虚拟机系统ESXI。ESXI系统也是VMware同公司出品的,你可以把它理解为一个系统级的VMware,在上面可以运行各个虚拟机。同时,还能即时对上面的子系统进行备份和快照存档,避免手残。此外,如果一个虚拟机崩了,不会影响其他系统。

关于ESXI系统的教程,请另行寻找学习资源,并特别留意虚拟网卡相关内容,这对面内容有很大关联。大部分机制和VMware类似。本章下面介绍的所有系统都是安装在ESXI上的

使用ESXI6或者ESXI7都没有问题,虽然ESXI7会提示硬件将在未来版本不受支持,but who cares。


补充一个小关键点:如果通过ESXI将Sata硬盘资源共享给TrueNas系统的话,硬盘是不会空载休眠的(也就是会一直转)。如果嫌费电或者费硬盘寿命,可以将六个Sata口直通给TrueNas系统。详情可参见:https://blog.csdn.net/qiaohewei/article/details/108284358

此外,你会发现P9D-WS主板的六个Sata口不在直通支持列表上(乐)。但是实际上是可以直通的,需要更改ESXI系统的配置,跟着 https://blog.csdn.net/priorhong/article/details/134393270 做就行了

但是如果把六个Sata口直通给Nas系统了,那么系统盘就不能直接接在这组Sata口上了。所以需要再买一个pcie转sata的转接卡,把系统盘接在转接卡上

b. 硬盘管理:TrueNas系统

此系统是本方案的核心,TrueNas是一个开源的NAS系统,提供了完整的磁盘管理,RAID组建方案,并且支持将磁盘以网络存储器的形式共享给其他设备使用。

关于TrueNas的安装和使用,请参考其他教程。在新建虚拟机的时候,将磁盘分配给TrueNas虚拟机,就可以利用TrueNas构建软件冗余磁盘阵列(RAID)了。关于RAID的种类,请参考其他资料。这里我选择的是用三块盘组建RAID5,使用一块盘做校验位,保证一块盘的故障冗余。当然,还是建议将磁盘直通给TrueNas,这样TrueNas可以实现更完备的硬件监控功能。

TrueNas支持多种网络文件协议,包括SMB,NFS和WebDav,也就是说安装并配置好TrueNas后,已经相当于完成了内网NAS的搭建,并且可以从内网访问并使用磁盘了。

c. 搭载其他服务:Linux/Debian系统

为了完成一些其他的任务,例如内网穿透或者网盘程序,我们还需要一个Linux系统来搭载这些服务。在Linux发行版中,比较稳定适合做服务器的有Debian和CentOS,但是CentOS已经不再被支持,所以这里首推Debian。什么,还有人不会用Linux,不会吧不会吧(手动滑稽)。

d. 更好的网络管理:OpenWrt软路由系统(可选)

如果有更复杂的路由管理需求,可以考虑安装这个软路由系统。不过绝大部分情况ESXI系统自带的虚拟路由器和家用路由器已经足够应对了。

3. 网盘的挂载与管理程序

a. 将NAS挂载到Linux系统上

为了完成这一步,需要将TrueNas中的SMB或者NFS共享打开,并且在Linux中挂载到本地文件树下。这样就可以以访问本地目录的形式访问NAS了。这一步请确认ESXI虚拟网卡的设置,最好使用桥接模式,让每个系统都分配到家中路由器的独立ip。

还可以考虑使用autofs这个工具实现挂载管理,好处是在一段时间没有访问行为后,会自动断开挂载,然后在下次访问时重新挂载,可能对硬盘休眠有一定帮助。


另:如果路由器的网口不够了,一个交换机就能够解决问题。

b. NAS的管理程序(网盘软件)

如果我们希望能够在浏览器上利用一个网页就能够完成文件的上传/下载与管理,就像那些商业网盘一样,我们还需要一个网盘软件。有很多软件可供选择,这里只推荐我试过的两个:Alist和Nextcloud。这些软件都推荐安装在那个Linux上。

Nextcloud是一个开源的网盘软件,基本实现了所有市面上的网盘功能,甚至做得更好。功能全面的代价就是占用的资源会大一些。不过上文的配置完全能够流畅运行Nextcloud。Alist相比则比较轻量,只实现了文件相关的功能,但是在用户分组或者访问权限方面功能没有那么全面。

总体而言,如果你想用作公共网盘,需要给其他人创建账号或者有其他协作内容,我推荐使用Nextcloud。如果只是想用作私有网盘,不共享给其他陌生人使用,我推荐Alist。


这里还有一个细节,一般的网盘,特别是涉及多用户权限的网盘,会使用自己的文件存储格式,例如打乱的存储路径,重命名而不可认的文件名等等。也就是说使用这类网盘软件之后,绕过网盘软件直接去访问磁盘,会根本看不懂也找不到对应文件。而Alist的优点就体现出来了,Alist软件中列出的文件组织和硬盘上实际的文件组织是完全相同的,也就是说,不管从网盘程序中看,还是直接到磁盘中看,文件夹层次和文件名都是完全一致的。在这么多款网盘软件中只有Alist是这样设计的。但正因为这样,Alist的用户管理就不够好了。

c. 题外话:一定要试试docker

docker相当于一种程序级别的虚拟机,相当于为不同的程序提供了不同的运行环境。如果你因为配运行环境心态爆炸过,就懂得docker的好了。(比如,两个程序,一个需要某某库版本>=1.6.0,而另一个程序,需要同一个库版本==1.5.0。在普通环境下,两个程序根本就同时跑不起来,而docker直接创建了两个虚拟运行环境,两个程序装在自己的环境中就能够同时运行)

使用docker,很多程序被封装在镜像中,直接下载下来就能运行,实现了真正的开箱即用。此外,docker还保证了一个程序的崩溃并不会影响到其他的程序,更不会导致系统崩溃。

4. 将网盘服务穿透到公网

如果你有公网IP,可以直接跳过这章,不过这种情况应该很少。还有网上一堆免费内网穿透的教程,一个都不要信,天下没有免费的午餐。

a. 购买一个云服务器

为了完成内网穿透,需要先租用一个拥有公网IP的(云)服务器(VPS)。国内有各种云,国外也有很多厂商。建议还是优先选择国外厂商。国内虽然便宜,但是买服务器还要备份,买到的服务器带宽更是小得可怜。普遍正常价位只能买到5M,10M带宽的VPS,折成字节最多也就1.2MBps,传个上G的东西要十几分钟,完全不能用。

国外的可以自己去找,有每个月五美刀的服务器,带宽基本是千兆级上下等宽,每个月1个t流量,个人完全够用。当然国外服务器最重要的还是能不能直连,这个要自己想办法。

b. 安装内网穿透软件:frp

frp是一个开源的内网穿透程序,分为客户端和服务端两个程序。frp的作用是将内网中指定机器和端口的服务投射到拥有公网ip的机器上,在其他电脑上看来就像公网ip机器上在运行这个服务(也就是隧道技术)。

frp服务端(也叫frps)安装在有公网IP的机器上,而frp客户端(frpc)安装在内网机器上(在我的方案中,当然也是安装在Linux上)。映射类型选择tcp类型就可以了,具体的配置方法请参照frp官方网站和其他博客。

配置好以后,输入云服务器的ip和端口号,就可以访问到内网的网盘服务了。例如:12.34.56.78:11451(怎么确定端口号?frp里面可以自己设置)。


frp软件是提供docker镜像的,上面的alist和nextcloud和下面的nginx也是。Why not try?

c. 做得更好:购买域名

如果您记不住自己的服务器ip,或者觉得直接把ip分享给别人有些掉价,可以去购买一个域名,然后让域名和服务器ip相关联。这样访问网站时输入域名就等同于输入ip,例如:输入domain.top:11451也可以访问到网盘。具体操作请参阅其他教程。

域名最好也去国外网站购买,虽然国内便宜,但是要审核和报备。如果绑定的ip是国外的,大概率不过审。

d. 给完美主义者:利用nginx实现子域名转发

绑定域名后,网站看起来很完美了,但是最后的那个端口号看起来仍然不舒服。这个最终问题可以使用nginx的端口转发功能实现。具体实现可以参见 https://blog.csdn.net/u013810234/article/details/89707077 或者其它教程。当然,需要先熟悉nginx的使用。配置成功后,输入类似nas.domain.top的url就会被重定向到domain.top:11451上。这样,url中终于看不到数字了。当然,nginx的功能比这强大得多,可以试试再搭建一个个人主页或者个人博客,然后用不同的子域名定位到他们上面。


重要:如果用nginx转发网盘程序的话,上传文件时会出现上传大小超过nginx默认值的问题。解决方法见:https://www.cnblogs.com/hellojesson/p/13393512.html nginx默认的文件上传大小限制为1M,可以手动改成更大的数值,比如几个G。

5. 其他事项

  • 如果家里路由器网口不够,可以买一个交换机。

  • 断电对机器极为不好,如果家里供电不稳,可以考虑配置一个ups(不间断电源)

  • 虽然TrueNas也有自己的插件库,里面也有类似nextcloud的插件,但还是建议将这些功能单独配置到隔壁Linux上。一方面这些插件不好自定义和管理,另一方面插件会降低系统的稳定性。NAS系统专注于NAS就够了。

  • 一篇文章不可能覆盖到所有内容,更何况还有很多隐藏的问题我没有遇到。请善用程序提示和搜索引擎,独立解决问题,也欢迎将问题与解决方法分享出来。

与一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)相似的内容:

一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)

本文介绍了本人基于E3平台搭建NAS系统的一套完整方案,内容涵盖了硬件选择,系统选择,网盘软件与内网穿透方法。

一种基于光电容积波的血压测量神经网络算法,开源、低功耗、低成本的人工智能软硬件提供者

具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 心血管疾病是最严重的死亡原因之一,每年在全世界造成严重的生命损失。持续监测血压似乎是最可行的选择,但这需要一个侵入性的过程,带来了几层复杂性。这促使我们开发一种方法,通过使用光体积描记图(PPG)

一种基于柔性事务的分布式事务解决方案设计探究

1 背景 市面上常见的有,2pc/3pc、tcc、saga等常见的分布式事务解决方案,但是实际实施起来框架比较重,设计开发比较繁琐,不易于快速开发上手。本文提供一种基于柔性事务设计的简单易上手的分布式事务设计方案,用于解决常见的分布式事务常见场景。 2 常见分布式事务场景 2.1 同步场景 常见的场

一种基于图片搜索视频的方案

随着移动互联网发展,手机端购物已成为人们生活的常态。人们在搜索商品时采用的手段也越来越丰富,当前的主要搜索方式是文本搜索与拍照搜索。

一种基于实时大数据的图指标解决方案

在电商金融等多个领域,现在主要利用图来建模,并由业务人员根据图指标提出需求。但图指标时效性差、创建修改程序十分繁琐,元数据没有同意的管理分类,这导致开发运维都十分困难,根据此痛点,今天来介绍一项基于实时大数据的图指标解决方案。

鸿蒙HarmonyOS实战-Web组件(基本使用和属性)

前言 Web是一种基于互联网的技术和资源的网络服务系统。它是指由许多互连的计算机组成的全球性计算机网络,使用户能够通过浏览器访问和交互式使用各种信息和资源,如网页、文档、图片、视频、音频等。通过Web,用户可以浏览网页、发送电子邮件、参与在线社交网络、进行在线购物等各种活动。Web的核心技术包括

Linq开发技巧与业务逻辑校验

Linq 是一种基于 .NET Framework 的编程语言,它的出现极大地提高了开发效率。Linq 提供了一种统一的查询语法,使得开发人员可以使用一种语言来查询不同类型的数据源,包括对象、集合、数据库等。这种语言非常直观和简洁,可以大大减少编写代码的时间和工作量。但是,随着业务逻辑的复杂性增加,

7.3 C/C++ 实现顺序栈

顺序栈是一种基于数组实现的栈结构,它的数据元素存储在一段连续的内存空间中。在顺序栈中,栈顶元素的下标是固定的,而栈底元素的下标则随着入栈和出栈操作的进行而变化。通常,我们把栈底位置设置在数组空间的起始处,这样在进行入栈和出栈操作时,只需要维护栈顶指针即可。顺序栈的实现比较简单,它只需要一个数组和一个整型变量`top`即可。其中,数组用于存储栈中的元素,top则用于记录当前栈顶元素在数组中的位置。当

7.5 C/C++ 实现链表队列

链表队列是一种基于链表实现的队列,相比于顺序队列而言,链表队列不需要预先申请固定大小的内存空间,可以根据需要动态申请和释放内存。在链表队列中,每个节点包含一个数据元素和一个指向下一个节点的指针,头节点表示队头,尾节点表示队尾,入队操作在队尾插入元素,出队操作在队头删除元素,队列的长度由节点数量决定。由于链表队列没有容量限制,因此可以处理任意数量的元素,但是相比于顺序队列,链表队列的访问速度较慢,因

14.5 Socket 应用组播通信

组播通信是一种基于UDP协议的网络通信方式,它允许发送方将消息同时传递给多个接收方。在组播通信中,发送方和接收方都会加入一个共同的组播组,这个组播组对应一个特定的IP地址,所有加入该组播组的主机都能够接收到发送方发送的消息。组播通信可以有效地减少网络流量和网络负载,因为在传统的点对点通信方式下,每个消息都需要单独传输到每个接收方,而在组播通信中,每个消息只需要传输一次,就可以同时传递给多个接收方。