这里使用私有云这个词难免会有些浮夸,或许叫做自托管(self-hosted)服务会更合适,鉴于私有云高大上的特点,这里就继续沿用这个词。文章有点长,如果你感兴趣就再忍一忍!
当提到私有云(这里指面向个人而非企业级)这个概念时,可能很多人会联想到NAS,或许是由于大多数人所理解的私有云指的就是私有云存储或更通俗的叫做私有云盘。存储固然很重要,但数据如何能够被合理的管理并高效便捷的访问也是一个需要仔细考虑的因素。毕竟现在的数据多种多样,音视频,图片,书签记事,电子书,等等类型,如果都使用同一种方式来访问,显然不太合适。
我自己并没有使用NAS,一方面是觉得NAS的性价比不高,虽然提供的软件功能很丰富,但硬件相对来说并不突出。另一方面我不想和平台绑定,在这个技术日新月异的时代,我们要牢牢把握好自己的数据,随时准备拔线跑路。
还是遵循之前的原则,这里只讲手段和工具,不会过多的提供技术细节。技术在不停的进化,具有一定的时效性,今天的技术不一定在明天还有效,我的实施细节并不适用于所有人,也并不是最优解,适合自己的才是最好的。
硬件资源
原本用一块4G版本的Raspberry Pi 4B板子来当下载机和多媒体服务器,后来由于上面跑的东西越来越多,内存有点吃不消,索性把我之前组装的一台PC机也征用了。这台PC本来是用来玩游戏的,去年还把核心部件换了个遍(除了显卡,理财产品真心换不起),但自从买了Quest 2后Steam瞬间不香了,这台PC也已经吃灰一年多了。
存储资源,有一个500GB的M.2 SSD在PC上作为系统盘,1个1TB的SSD和4TB的HDD以前是挂在Pi上的,现在也挪到PC上来,SSD用来存储应用数据,HDD作为下载盘和备份。
基础软件平台
为了部署和管理方便,我使用了k3s作为基础平台,因此对于工具的选择上就会更倾向于提供Docker镜像的服务,这样后续的升级或迁移也会更加方便。直接使用Docker部署或者直接裸机部署当然也是没问题的,只是个人倾向而已。
我是把Pi作为集群的主节点,PC作为工作节点,所有工作负载全部跑在PC上。Pi目前当做软路由充当网关使用,同时做为DNS服务器和Wireguard VPN入口。
另外一点,我的所有数据都是直接原封不动的存储在本地磁盘中,通过k8s中的Local存储类直接挂载本地目录到应用中。这样做虽然扩展性上受限,但数据管理起来会比较灵活,后面如果切换平台也是可以很好的平滑过度。
工具集合
私有云的基础是私人数据,其次是对数据的管理和访问。不同的数据来源可能不一样,访问的方式也会不一样。我目前需要管理的数据大体分为以下几类:
视频
视频资源一般可以分为第三方资源(例如网上下载到的影视资源)和自生成资源(手机拍摄)。目前下载影视资源比较流行还是BT方式,因此我跑了一个Transmission应用,将视频直接下载到HDD盘中。手机拍摄的视频没有做特殊处理,而是和照片一起管理,后面再说。
起初视频是使用Plex播放,但Plex的硬件转码不是免费的功能,在手机上用客户端播放是没问题的,但用Web端就不行了。后面就换成了Jellyfin,正好PC上有一块RX560显卡可以用来硬解码。Jellyfin的功能或许没有Plex丰富,关键是支持免费的硬解码,还要啥自行车!
至于外网访问,一种是使用Cloudflare Tunnel将内网服务暴露到公网(需要域名),另外一种是通过中转机中转,Cloudflare Tunnel的问题是访问速度慢,如果不开高码率也是可以勉强看的。为了不影响观影体验,最后我还是买了一台国内的NAT云主机将Jellyfin服务远程映射到这台主机上。
照片
照片数据的管理我在上一篇文章中已经详细讲过,这里就不再赘述。
音频
大多数可能就是音乐资源,这类资源除了发烧友一般可能不会有人收集,但我还是收集了一些(你奈我何)。和视频一样,这种多媒体资源如果单纯使用类似与网盘的软件来管理意义不大,一般的音乐资源,特别是无损音乐大多是整张专辑一个文件,需要专门的音频管理工具来进行解析。
我选用的是Navidrome(官方提供的有Demo可以体验)。Navidrome的一个好处是不会修改我的音频原文件,但有些文件无法正确解析。
电子书
比较常见的电子书格式有pdf, epub等,手机上有很多软件和服务可以管理,例如Kindle,Google Play Book,还有单机版的Lithium,PC端也可以通过Calibre来管理。来到了Web端,我们当然也有工具,那就是Calibre-Web,可以认为是Calibre的Web版,但其本身只依赖于Calibre的数据库。
外部访问依然是通过Cloudflare Tunnel,速度会慢些,不过一旦加载完毕对于阅读是不影响的。
RSS Feed
RSS订阅虽然现在会觉得是老古董了,毕竟在一个内容快速产生快速消费又快速消失的时代,这种需求看似已无用武之地了,但对于需要个性化阅读的人来说价值还是不可估量的。之前我用过Feeder,手机端使用Google提供的内容聚合服务。做为替代方案,我使用Miniflux来聚合我的订阅流,这个软件界面看起来很简陋,但却工作的很好,毕竟只是单纯的阅读,也不需要太多花里胡哨的东西。
书签收藏
有了RSS订阅下一步就应该是收藏夹了,RSS是用来快速消费内容的,但还是有很大可能会遇到比较好的内容,这时就需要一个收藏夹将内容存档留着以后精读,也同时避免内容源丢失后无法再访问的情况。
之前一直用的是Pocket服务,也确实很方面。作为一个可选的替代方案Shiori还是可以试用一下的,同时也提供了从Pocket导入。
其他
除了上面已经在使用的工具,还有很多其他的工具也是值得探索的,例如笔记,日历,联系人,文档管理等等。网上也有人提供了很多好的工具和解决方案,例如Awesome-Selfhosted,可以根据自己的需要选择使用。
文件共享
这方面我的需求不是很大,也不复杂,所以就部署了一个Minio服务简单的应付一下。如果是通过Cloudflare来暴露服务要注意一下,Cloudflare对于上行流量有限制,文件过大(大概100MB左右)可能无法上传成功。之所以没有选用功能更强大的Nextcloud等网盘服务,主要是这类软件功能对我来说过剩了,这或许就是传说中的要你命三千吧。
为了紧跟潮流,我还额外部署了IPFS网关,是公开可访问的,地址为https://ipfs.ginuerzh.xyz/ipfs/。当然由于是私有服务,可靠性无法保证。
平台管理
上面讲的都是平台上的应用服务,平台本身也需要管理,包括k3s集群和节点网络。
对于k3s,本来是想通过Cloudflare将API服务直接暴露到公网,再通过Lens来管理,实际操作下来发现不可行,可能是安全考虑Cloudflare限制了这类请求,于是只能再借助于NAT云主机中转。后来又在集群中部署了Rancher,这样就可以通过CF在公网进行访问和管理了。
节点本身也可以借助于Cloudflare Tunnel来访问内网的SSH服务。由于我在Pi上部署了Wireguard服务,就顺便通过端口转发,将wireguard的端口映射到NAT云主机上了,直接通过wireguard来访问内网会更便捷。
完
以上就是我的全部家当,仅供参考,如有雷同,纯属巧合!