引
不知不觉,已经在现在工作的公司度过了 6 年。回望一下, 6 年前入职时的光景好像还在眼前。在离开前,或者适合回顾和思考这段时间的经历。工作上应用的技术一直在这个博客上更新,已经没什么好补充的了。不如写写这 6 年和之前工作的 14 年的区别,说一些好玩的事。
要说这 6 年有什么不同,大概是:
- 重视知识的实践。Get my hands dirty.
- 知识和记忆整理、然后分享。以前是要使用时才即兴地搜索或 LLM。产生了很多重复学习和记忆负担。
- 数据尽量自己可控。少依赖云厂商,我相信自己的数据,在个人能力范围内,要自己保护好安全和隐私。可访问的云厂商在这两方面其实都很不透明。我不想有天有人因为我自己记了什么、拍了什么而来拍门。
- 更多以数据和理智逻辑为依据的行动,更少的情绪影响
于是有以下文章:
2024 年 9 月搬家后,产生了一些问题:
- 电信宽带的 ipv4 public ip 很快不能用了
- 原来存放照片和视频的云盘免费空间满了
- raspberry pi 上的学习笔记、git repo 等等 self-hosted 数据从来没有备份机制
- 生活杂事多,而记忆力的空间好像也快满了
- 我需要一个让我自由提问而不必担心的 LLM 助手
- 部分信息需要家庭内共享协同编辑
硬件
我有:
- 宽带,无 public ipv4 ,但有 public ipv6
- 3 个 raspberry pi 2b 1G
- 1 个 raspberry pi 4 8G + USB NVMe 1T SSD
- 1 台 64G 的 x86 Dell 服务器,无VRAM + 1T SATA 传统硬盘。支持 WakeUp on LAN
- 1 个 10 LAN 口 1000M 家用交换机
由于我喜欢低炭生活(省钱)和不想在小小的生活空间中长期存在服务器风扇硬盘噪音,我只在需要时才开启 64G 的 x86 Dell 服务器
。这包括了数据备份和运行 Self-hosted 的 ollama LLM 时。
软件
基础软件
- 域名: ddns-go + aliyun 域名
- LAN dhcp & DNS
- ssh GIT server
- TLS 证书: acme.sh
- Reverse Proxy: nginx
- Network tunnel: Native Wireguard(在 ipv6 环境下使用) & Tailscale(在 ipv4 环境下使用)
- WebDAV: apache
- 数据备份: ZFS 增量备份
其中 Debian/Ubuntu 自带的 ZFS 是我最近才开始使用和喜爱的增量备份方法。有了它,我少了很多数据和回忆丢失的担心。 raspberry pi 4 8G
配置一个 USB NVMe 1T SSD。数据定期 ZFS 增量备份到 x86 Dell 服务器
上的 1T SATA 传统硬盘。我没使用 RAID 。
应用软件
- 阅读: Zotero
- 记事: Joplin / obsidian + obsidian-livesync
- 长期计划跟踪: Vikunja
- 物品管理: Homebox
- 照片与视频: Immich
- Web 文件共享: filebrowser
- LLM: ollama + Open WebUI
- 手机推送通知: ntfy
以下我以喜欢度为顺序大概介绍一下:
Zotero
我喜爱的特性:
- pdf 和 highlight 笔记跨设备同步
- web 浏览器快照和 highlight 笔记
- self-hosted 的资料主体备份
Immich
我喜爱的特性:
- self-hosted 照片管理, Google Photos 平替。解决了我十多年来照片保存、备份、全家共享的问题。从此我不再用微信发手机原图了。
- 专业级的手机端应用
- 广大的社区支持
- 操作方便,非技术人上手无门槛,为数不多的让我老婆也乐意使用的 self-hosted 软件。
- 我见过的 self-hosted 的 open source 消费级应用最中最专业的。到现在还没有发现有收费特性。开发者是 full time 做靠赞助的。真是用心开发和维护的,好像真是用爱发电。让我这个未给钱的人用起来也有点忏悔……
Joplin
我喜爱的特性:
- 记事管理,算是 EverNote/YinXiang 的平替吧。
- 全家共享协同编辑记事
- 非技术人上手无门槛,为数不多的让我老婆也乐意使用的 self-hosted 软件。开源的低使用门槛的笔记,可能就这个最好了。操作起来是有点体验不算好,不过 It works !
Obsidian livesync
Obsidian 在笔记界的地位不用我说了。但有个问题是软件本身不开源,另一个是内置同步服务不能 self-hosted 更要收费。但有了 Obsidian livesync 就可以 self-hosted 同步了。软件不开源,但数据格式和数据可控。加上 Obsidian 的使用体验的确比 Joplin 优秀一些,所以我现在是两个都在使用。
Homebox
年纪大,杂物多,还没想通去断舍离,所以杂物/物品,特别是闲置又不好卖电子杂物的管理是个难题。东西有时也要周期维护或更换电池。程序员为什么不用 DB 去 offload 一下大脑负担呢。于是,我用 Homebox。我还刚开始使用,所以谈不上什么经验。说不定最后我觉得麻烦,会放弃。
Open-WebUI
世上没有一个 LLM 可以满足所有应用场景,所以多 LLM 甚至自己定制的 LLM 才是我需要的。如果你不喜欢让人知道你与朋友之间聊了什么,那么同样也不喜欢别人知道你和 LLM 聊了什么。Why not self-hosted ?
我是 Open-WebUI + ollama ,在一台只有 4 CPU core 的 x86 64G RAM 无 VRAM 的机器上跑。暂时速度还可以接受吧。以后希望自研或集成 LLM tools 调用上面的 Homebox / Joplin / Obsidian 。这样,我可以动动口就可以管理日常了。
FileBrowser
安全隐私地共享文件,一直是一个难题。filebrowser 只要一个浏览器,就可以方便共享,我觉得不错。
Vikunja
把自己的人生规划,职业学习规划,同时把家庭的规划,当成一个项目来做 “PM” 。希望能坚持,不要让自己老是自控失败最后 off track.
复杂的部署
由于很多历史问题,加上我懒。现在的部署很不规整,也有点随性。不过没关系,这东西本来就是进化出来,而不是设计出来的。
后话
近几年时间比较可控,实践了 Get my hands dirty 的 self-hosted 。一方面是应用本身的确可以提高生活质量,减少大脑负担。更一方面也可以通过实践了解了很多理论学习无法领悟的体验。如果使用云服务/SaaS 服务类比城市生活,那么 self-hosted 大概是荒野求生了。它充分锻炼了技术人的各方面技术能力。从以太网线水晶头接线,到机器组装,到各层公私网络技术,到应用,到数据备份。现代程序员多为专才和职业化,加上基础设施的分工化。习惯在圈养环境中工作学习的我们,或者不时走出圈,去看看野生的世界,让自己不要完全丢失环境的适应能力。
我从不懂 太网线水晶头接线/DNS/dhcp/iptables/NAT/ip route/dummy interface/DDNS/TLS证书生成,到现在一路走来。作为“经验主义”追随者,学习和体验了很多很多。
互联网的发展经历了阳春白雪的 P2P 时代,然后是诸侯混战的时代,现在到了几个主流大厂控制一切数据的时代。原始以 P2P 为设计原则的互联网,变成以大厂中心化控制的互联网。加上大家都 well-known 的 “fake 互联” 环境,要做 self-hosted 的确比 Europe / North American 难。但无论如何,不要因圈养,而丢失自己的环境适应力和 common sense 。无论是技术上,还是生存上。