前言

如今网络上有很多关于如何自建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

Note

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,中间经历了什么,想想都要哭了