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可能是另一个非常好的选择。
Highly Recommended 强烈推荐
一下都是个人使用过,很多是目前还在使用并且已经使用过一段时间的应用。总体来讲稳定可靠,并且功能全面。
- 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上面。而通过这两年数不尽的被浪费的夜晚,我也许可以下一个结论。这真的是一个大坑。
现在回看,上面这个图实在是太精辟了。
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优化,那么消费级的硬件,性能上是可以用的。至于可靠性、写入放大什么的,也只能自求多福了。
详细的可以参见这两篇文章:
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。