Year of Self Host - 2023 Summary 自托管2023年度总结

一眨眼一年都过去了。这一年又在Self Host上面花费了巨量的时间,又因此掉了不少头发。这不禁让我觉得必须要写点什么,算是给过去的这一年一个小小的交代。这篇文字可能会有点长,涉及这一年之间使用过的各种Self Host的Application,以及在期间的一点点感悟,一点点想法。一是聊以自慰,二是以资回忆,三是与君同乐。

Self Host Applications 自托管应用

你折腾这些究竟有什么用?
-- Someone else asking

今年以及之前陆续使用过了一些自托管应用,也积累了一些经验。应该说自托管真正的用处最终都还是靠这些优秀的开源应用。这些用爱发电的项目的存在,让Self Host能真正解决平时遇到的问题,真正给这个爱好一些实质的意义。

至于众所周知的Self Host的好处,我想也不用再多重复了。喜欢折腾的自然明白,不喜欢的自然也不屑于折腾。

以下,笔者斗胆,尝试给简单用过的几个Applications按照体验,做一下分类。有很多App都没有来得及在博客中提及。以后有时间也会找几个细细的聊一下。

Must-Have 装机必备

  • 照片管理:Immich - Google Photos的直接替代。Reliability/Performance/Feature set方面都基本上做到了完美。如果你不喜欢Google Photos不再免费的服务,那这个几乎就是最好的替代方案了。至于专业摄影师,可能还需要更多更specific的需求了。
  • PDF工具:Stirling PDF - 各种政府文件PDF编辑神器。
  • Media Management and Streaming: Jellyfin - 随时随地看电影看电视 + 海报墙。
  • Password Management: Bitwarden / Vaultwarden - 密码管理器是有必要的,但是你可能也不想把密码都交给第三方管理吧?
  • Github alternative: Gitea - The chest for all of your docker compose files and scripts。(对,我想你一定有很多这类文件 😂)
  • Firewall: OPNSense / PfSense - 对于Self Host,防火墙是必须的。PfSense已经可以算是大名鼎鼎了。OPNSense可能是另一个非常好的选择。

一下都是个人使用过,很多是目前还在使用并且已经使用过一段时间的应用。总体来讲稳定可靠,并且功能全面。

  • TODO: Vikunja - 一个对于个人用户来讲相当完备的Todo了。就是可惜没有离线支持。
  • Quick Notes: Memos - 快速笔记输入,替代Flomo,也可以作为Self Host版的 Twitter
  • Knowledge Base: Trilium - Database backed programmable Notebook with backlink support, markdown, daily notes, calendar, TODO, and so much.
  • Knowledge Base: SilverBullet.md - Flat file backed notebook with offline/online mode switch support, also programmable. This is a rising star.
  • Google Drive Alternative: Nextcloud AIO - 有了AIO之后,set up终于变得容易了。Nextcloud的生态还是太强了(虽然可能也都不太可靠)。
  • Google Drive Alternative: Seafile - 清华出品,德国合作,高性能传输和同步,而且几乎从不出错(Nextcloud相比之下就很糟糕),非常稳定可靠。Dropbox的直接替代。加上Onlyoffice,也可以替代Google Drive。
  • 重要信件/文档管理:Paperless-NGX - 你的PDF文档都应该交给它。
  • Reverse Proxy: Nginx Proxy Manager - Reverse Proxy总是需要的,有个UI总是好的。
  • NAS: TrueNAS - 如果你用ZFS做文件存储,请用TrueNAS。笔者可能还是更简易用Core。但是笔者用的是Scale,因为Scale有 QEMU Guest Agent所以适合跑在虚拟机里面。当然官方不推荐用虚拟机。
  • NAS: OpenMediaVault - 你的电影等等大文件也许不想用ZFS。另外在ZFS之外也许你还想要个简单(by simple, I mean, the disk can be read directly in ANY machine)存储的backup。但是说实话,这个系统如果装很多插件,可能就会开始出错误。所以建议就是尽量只用简单的功能,尽量避免用它里面的docker跑应用,或者用它跑ZFS或者VM。
  • Virtual Machine Platform: Proxmox - 几乎是免费的选择里面,唯一严肃的选择了吧。

Deserve a Try 值得一试

  • Knowledge Base / Wiki: Outline
  • 笔记 / Knowledge Base / Wiki: 思源笔记 Siyuan
  • 照片管理:Photoprism
  • 照片管理:LibrePhotos
  • WORD alternative: OnlyOffice
  • WORD alternative: Collabora Online Development Edition (CODE)
  • EXCEL alternative: Grist
  • No-Code Solution: NocoDB
  • No-Code Solution: BudiBase
  • Body Building Track: Wger

Wow, But... 啊?

怎么说呢,这类应用就实际使用体验而言,没有让笔者一用就放不下来。但是对于用爱发电的开源自托管应用,我们心态上一定要感恩。人家愿意分享出来,就是非常无私的了。无论是实现的功能,还是开源的代码,哪一个不是随时可能inspire你的信息?很多时候笔者认为,笔者觉得不好用,很大可能是受笔者的能力所限,很多东西的精妙不是笔者现在可以领悟到的。

  • Knowledge Base / Notetaking: Flatnotes - 感觉还是过于简陋了。目前(2024-01-07)应该还没有link autocompletion。
  • Knowledge Base / Wiki: Tiddly Wiki - 这个也许是个神器,但是笔者实在是无福消受

Coming Soon 已挖坑已种草

2023年还发现了一些有意思的项目没来得及尝试。另外现在AI这么火,子托管的AI方案自然也要安排上,要不然思想都落伍了。

  • Google Drive Alternative: Filestash
  • PKMS / Wiki: Atom Server
  • Video Surveillance: Frigate

Learned Anything 学到点什么没?

花了这么长时间,有啥被坑的经历,说出来让大家开心开心呗?
-- The 'you are so mean' Dako is mocking

被坑了这么久,也有点久病成医的架势了。总结一下这两年趟过去的、没趟过去的各种大小坑,也许能对未来有所助益吧。

消费级硬件之殇

贵不是它的问题,是我的问题。
-- A saint once said

所谓消费级的硬件就是:

  • 能用档:给你个能用的就得了,要什么自行车。这硬件难道不能写PPT不能写文档?就是打开慢点怎么了,能用就得了呗。
  • 实用档:办公干活流畅吧?能看电影吧?能打打游戏吧?看这样子还行吧?那你还想要什么?
  • 游戏档:顶级消费级CPU+顶级消费级显卡=顶级游戏体验。至于游戏之外的,可能也就是个能用的水平。

真拿来做Self Host,消费级里面好东西真是太少了。

  • IPMI,或者说Intel vPro也行。可是根本很难找到。就连工作站级的主板基本上也没有。
  • PCIE Lanes。这东西再消费级的主板上基本上就是:显卡+NVME。别的不要想了。就算芯片组有,我主板厂商也不会给你的。你不需要PCIE,你需要10个USB接口和超高级电容滤波过的的镀金音频输出口(🤦‍♂️)。
  • 4通道内存?你在想什么,谁给你的勇气去想的?
  • U.2硬盘?我承认我就不该想这个,要不是2023年闹出来华为<>WD SN640这一出,你们臭捡垃圾的哪里用得到高贵的企业级NVME。
  • 板载10G网卡?你只能跟显卡之间选一个。板载?你这预算也不照照镜子看看自己。
  • ECC内存?TrueNAS和ZFS社区里面的人都推荐上ECC唉。我拿什么上ECC?空空如也的裤兜吗?把从美国运到国内的洋垃圾再买回来吗?虽然说不是不行,但是为什么还要比国内淘宝贵那么多啊,这心理上过不去啊。
  • 就连SATA口,便宜的主板都没几个。

算了,就连正经一点的消费级主板现在都要300🔪往上了。

嗯,不忘初心。最开始搞Self Host,就是想把手边不用的电脑用起来。谁曾想现在还要开始花钱买垃圾了。这真是大大的走歪了。

Kubernetes是个好东西,但是确实需要水平

企业级不仅仅只是意味着高品质高可靠,同时也意味着高维护。企业级的方案需要企业级的投入才能产出企业级的回报。
-- The 'enlighted' dako saying, after the 'angry' dako smashed the keyboard.

上K8s好不好?当然好。但是对于Self Host有多大意义,不好说。尤其是对于自家用,或者是小团队使用,那真是不一定有意义。

大量的Self Host application还是依赖一个 File System的。通常直接就是docker container的本地挂载。而如果使用K8s,那对应的就是 hostpath。但是实际上CNCF已经将 hostpath 打上了“不安全”的标签。同时如果用 hostpath, 那么不同机器之间 FS 里面的内容很可能不一样,所以没法 consistent。最简单的解决这个问题的方法是用 remote mount,外加deployment size 设为1 (对于自家用,1确实也就够了)。这或许是用K8s唯一不那么费劲的方法了。

然而这不是全部。如果用K8s,那么就要用 Helm Chart。这东西本质上就是给你的 docker containers (or Podman containers) 的参数再套上一层 Kubernetes specs 的 template。怎么说呢,对于小规模应用这个其实没有什么意义,自找麻烦。

然后这还没完。如果要用K8s。那K8s现在也有好多distribution。你用哪家的呢?Ubuntu他们家的MicroK8s?还是K3s,K9s?原版的K8s?还有雨后春笋一般的一堆堆什么什么Kubernetes Distribution。然后各种K8s都会有各自的坑。

然后还没完。选择K8s基本上就意味着你大概也要有一套相对完备的ingress controller + persistent volumes (and controllers) 才能开始基本的玩耍。Rancher+K3s大概可以解决一些问题。但是就如所有的这些 Distribution,很多时候一点点OS上面的改动或者没配置好都有可能一下载烧掉N个小时。

不过,归根结底,还是个人水平不行。如果基础知识扎实,Linux运维技术完备,K8s也理解的足够深入,同时又确实对开源的几个K8s的Controller比较熟悉,那么,用K8s应该还是确实会对Availability又很大的帮助。如果哪天笔者的Self Host也能给笔者赚钱了,那笔者一定下功夫好好学习一下,提高赚钱机器的Availability。

P.S. TrueNAS上面那个Kubernetes笔者觉得实在是太扯了(说难听了叫做,脱了裤子放屁)。TrueNAS上面的Kubernetes不支持多节点扩展(至少此时此刻不支持)。这实在是没有任何实质有意义的理由去强行要求用户用 Kubernetes而不是Docker。

笔记和个人知识管理是个大坑

近两年Notion和Roam带起来的这波Notetaking的浪潮毫无意外的也打到了Self Host上面。而通过这两年数不尽的被浪费的夜晚,我也许可以下一个结论。这真的是一个大坑。

PKMS in a nutshell

现在回看,上面这个图实在是太精辟了。

Notetaking或者说PKMS有几个问题,因为总是互相之间有千丝万缕的联系,不容易分隔开,但是又很难在一个展现形式下被清晰的表达,同时还要做到数据完整性和易于编辑。这就导致恨锁时候总有些问题不好解决。而一旦再加上scalability的要求(不过说实话,PKMS,能又多大的Scalability要求?),不好解决的问题就很容易变成无法解决的问题。最后就导致用了很多似乎功能很全面的工具,但是最后还是落得个七零八落。

在商业软件领域是如此,在Self Host这个相对还是贫瘠又缺乏足够的QA和Motivation的领域,情况就更不可能很尽如人意了。

简单说说:

  • 长文笔记和短的快速笔记很难兼得。两者的着重点不一样,侧重的平台也不一样,输入和输出的侧重程度也不一样。
  • Web application vs Local application。很多人preference不同,众口难调。不过对于Self Host来讲,个人认为Web Application如果有端到端加密,应该就没有太多隐私的问题了。不过Offline accessibility确实也是个问题。这方面现在兼顾的最好的大概就是 Silverbullet.md了。
  • Task -> Todo management -> Project Management -> Team PM。一旦笔记软件存在了 checkbox,立刻就会有人想用这个笔记软件做 Todo Mgmt。然后如果这个Application具备了用query来做页面的能力,那么就会有人拿他做更大型的PM,然后如果有多人,那立刻就升级为了 team project management。Notion大概就是这么被认为成project management application的吧。但是这对于PKMS意义多大呢?好事还是坏事呢?Task究竟要不要跟PKMS捆绑在一起呢?
  • Double link and/or Hierarchy: Double link用多了,有时又会怀念层级关系明确的组织形式,尤其是search出来的结果不知为何就是不靠谱的时候。可是如果依赖层级关系,平时的组织和维护压力又好像太大。
  • The granularity of your knowledge。像Roam/Siyuan这种的application,每一段文字就是one piece of knowledge 。但是这样的粒度是不是太细了?一“个”知识点,总是能锁在一个段落里面吗?这样的要求是不是牺牲了阅读时候的体验呢?(比如带有解释的代码范例?)。而如果是已Note/Page为基础单元,有的时候,一个笔记又会太大,而“自动”拆分一个笔记所需要解决的问题又不仅仅是技术上的问题,自动拆分如何保证拆出来的新笔记有称心如意被organized呢?
  • Content in your notes:究竟什么内容值得被记录?如何才能无脑记录内容同时还不妨碍未来的读取、扩充、引用?

这些全是问题。这个话题其实要是展开的话,有很多可说的。留待之后细聊吧。

ZFS

这一年跟ZFS真是恩怨难了。用实际行动践行了不要用消费级SSD跑ZFS。在经历了多次反反复复,不服和打脸之后,得出的跟官方建议基本一样的结论,不要用消费级SATA SSD跑ZFS。应该说,实际测得的结果远远比官方警告的程度还要深刻。用诸如MX550这类的SSD跑ZFS,最后的结果一定是假死。如果碰巧这个SSD还是host主机的系统盘,那么基本上可以保证网络断线。如果用的SSD还不如MX550,那也不会在性能上糟糕太多了,只是会更快的死机。非常快,SSD正常速度能维持的时间连5秒都不到,之后直接个位数速度教做人。

如果是NVME的话,如果碰巧速度要求不高,只要凑合能用,不要求高IO优化,那么消费级的硬件,性能上是可以用的。至于可靠性、写入放大什么的,也只能自求多福了。

详细的可以参见这两篇文章:

记录一次不严谨的ZVOL虚拟机顺序写入性能的测试
一直以来对于建构在ZVOL上面的虚拟机磁盘性能都不太满意。今天机缘巧合,测试一下,看看如何提高顺序的写入性能。 记录 测试平台 * Host OS: Proxmox VE 7.4 * CPU: i5 7600K * RAM: 64GB DDR4 2400 No-ECC * Motherboard: Gigabyte Z270p-D3 * Host File System: ZFS * 一个非常不入流的SATA转接卡:基于ASMedia asm1061的PCIE 3.0 x1转4口SATA * M.2 NVME: ADATA 850 2T * HDD: 2 x Seaga…
记一次ZFS小文件写入性能测试
记录一次简单的ZFS磁盘性能测试。希望能给后来人以及之后的自己一个baseline。同时也对比了一下相对于LVM thin(LXC container)的性能差距。

Daydreaming 不着边际的幻想

所以你接下来打算怎么着?有什么打算?
-- No one actually asking

  • 如果最终要上K8s的话,那么可能还是不得不逼迫自己早点上。找一个靠谱的distribution,然后好好学学怎么维护一个Kubernetes cluster,以及配套一堆 Networking / Persistent Volume / CI-CD 之类的东西。
  • 如果尝试multi-node Kubernetes的话,也许可以考虑收一些旧的小主机。同时还可以看看 Ceph 以及 Proxmox HA相关的东西。
  • Kubernetes方面还可以试试 LongHorn。应该算是跟Kubernetes配套使用的distributed highly available storage solution.
  • AI方面要试试一些Self Host的方案。比如Ollama。还要看看有没有办法可以利用上手头的几张3070显卡。看看有没有可以多卡一起用的AI方案。最好可以有一个用自己的PKMS喂出来的AI assistant。