前言
如今网络上有很多关于如何自建NAS、搭建家庭私有云的教程,但基本都止步于文件共享和多媒体服务。
作为一个半吊子的码农,这显然不能满足我的需求。
所以,结合着自己需求搞了一套自己的私有云方案,在各种大坑小坑中坚持了近大半年后,发现该方案极大的提高了自己的工作效率。
以下的方案不一定完全适合你,你可能需要根据自己的实际需求进行适当更改。
核心内容
- 数据中心,提供数据存储服务
- 家庭服务中心,提供常见的NAS服务
- 工作服务中心,提供工作上所需服务
准备工作
- 准备一台家用服务器(我个人用的是Gen8 1230v2 16G)
- CPU需要支持VT-D和VT-X
- 准备1块SSD和至少2块以上的机械硬盘
- 准备一张HBA卡(IT模式的D2607-A11阵列卡)
- 安装ESXI6系统
- 系统建议单独安装在U盘/SD卡上
- SSD连接在主板SATA接口上,机械硬盘连接在HBA卡上
- 将HBA卡配置为直通模式
- 将SSD挂载到ESXI中,新建存储为
SSD_DataStore
Q: 为什么选用ESXI而不是Hyper-V?
A: 如果只是用来搭建NAS服务,两者区别不大。但目前的这套方案,使用ESXI更为合适。
数据中心
数据中心,主要提供数据存储服务,这里有两个数据中心:
- 被ESXI管理的SSD
- 用于存储
提供基础服务的虚拟机的文件
和交换文件
- 用于存储
- 被FreeNAS管理的机械硬盘
- 主要提供NFS、CIFS、AFP这3种形式的数据服务
- 为ESXI提供部分存储空间,用于存储
使用频率较低的虚拟机的文件
FreeNAS安装与配置
- 创建FreeNAS虚拟机
- [存储位置为SSD_DataStore]
- 创建ZFS卷
- 2个以上的机械硬盘
- 存储池类型为Mirror或RAIDZ
- 创建多个数据集
/vms
,提供给ESXI,开启NFS/media
,用于家庭影音,开启NFS、CIFS共享/share
,用于文件共享,开启NFS、CIFS共享/tm
,用于TimeMachine,开启AFP共享- 等
- 将vms挂载到ESXI中,新建存储为
VMS_DataStore
FreeNAS的数据,一定要做好手动备份,毕竟号称有五重备份的GitLab也吃了大亏的:)
服务集群中心
服务集群中心,包括ESXI提供的虚拟机资源和Rancher提供的容器资源。
Rancher集群安装与配置
- 创建3台虚拟机(RancherOS、CoreOS、Ubuntu等系统任选)
- [存储位置为SSD_DataStore]
- 分别命名为master、node1和node2
- 分别安装docker
- 部署Rancher集群
- 在master主机上部署Rancher-Server
- 在master主机上部署Rancher-Agent,将master添加到server
- 在node1、node2主机上部署Rancher-Agent,将node1和node2添加到server
- 合理分配3个主机上的容器的部署
- 配置Rancher数据源
- 在数据中心创建
/rancher
数据集 - 部署Rancher-NFS
- 使用Rancher-NFS服务,容器可实现数据持久化
- 在数据中心创建
基础建设服务
- 智能家庭服务
- Home-Assistant和Homebridge
- 容器方式部署
- 实现用网页端和IOS端对家里的服务或设备进行管理
- 透明代理服务
- openwrt虚拟机,[存储位置为SSD_DataStore]
- 具体部署方法在本站中搜索
- 设置主机的网关为openwrt地址,即可实现透明代理
- 公网映射服务
- 容器方式部署,ngrok、n2n和frp任选
- 需要一台公网主机
- 实现将内网服务映射到公网,方便远程访问
- 证书签发服务
- 容器方式部署
- 内网使用自签发证书
- 公网使用Let’s Encrypt服务签发证书
对于使用ngrok和n2n,个人有一些心得,有时间另开篇介绍
家庭类服务
一般包括同步、影音、网盘等服务,需要用到以下系统:
- Plex Media Server / Emby Server
- 容器
- 管理影音文件
- 多设备同时看电影、追美剧
- Resilio Sync
- 容器
- 多个平台之间文件同步
- Xware
- 容器
- 迅雷官方远程下载服务
- DSM6(群晖)
- 虚拟机,[存储位置为SSD_DataStore]
- 和FreeNAS功能类似
本方案中,因为已经搭建了FreeNAS,DSM6的功能已经被大大地弱化了,可以不装
Plex和Emby两个都是比较出名的家庭流媒应用,目前个人用Plex比较多
工作类服务
一般包括代码版本控制、记事本、测试环境等服务:
- Leanote Server
- 容器
- 开源的多平台云笔记
- Gogs Server
- 容器
- 代码版本控制系统,和github类似
- Drone
- 容器
- 持续构建系统,方便测试代码或部署环境
- 各类数据库
- 优先容器(MongoDB不宜搭建在容器中,会发生错误,暂未解决)
- 多种数据库统一存储,统一管理
进阶
由于各个服务之间联系不大,系统平台也比较多,管理起来实在不便。如果有开发能力的话,还是建议自己开发个系统来统一协调各个服务。比如使用微信端入口,对服务进行定期检查,消息通知,甚至是远程控制,未来还是很美好的:)
最后
最后,这个方案其实还有很多的内容,本文只是列了一些提纲,具体在实际操作中必然会有很多问题,就拿Rancher来说,Rancher中容器如何配置、存储如何挂载就需要好好斟酌,当然这会有一个很长的试错过程。当然和去年相比,Rancher上的坑已经少了太多了,想当初把Rancher从v1.1一步步升到现在的1.5.x,中间经历了什么,想想都要哭了