起点#

大约是一周前,我萌生了一个想法。人生一天所拥有的时间是有限的,与此同时思想和观点、想法等等也都是有限的。我们不可能强求每一天都去写一篇很长的、富有哲理的博客文章,但是我们可以去在点点滴滴记录我们的人世日常。于是我想到了一款以前我曾经使用过的软件,叫 Flomo。但当时因为我还处在高中,也接触不到手机,所以 Flomo 可能是被我当做笔记。因为 Flomo 并不适合这个场景,所以最后也没用下去。直到现在突然又想起来,我便开始了这样一个计划。

寻找方案#

我大学就读的是计算机专业,而我又希望我的所有内容都能被我完整地掌控、私有化,永远地保留下来,不受服务商的干扰与控制。于是我便希望去寻找一款真开源的、能够方便记录生活的应用。于是我问了 ChatGPT,它给了我一个答案,就是 Memos。

这款软件就和微博或者推特一样,你可以去发送一些简短的笔记,可以附上你的位置,可以说出你的想法,可以贴上你的照片等等,甚至你还可以把你说的话、所有的一切各种各样的事情都附在上面。我们不需要一款真正能够覆盖我们全面的所谓笔记软件,我们希望有一个能够一直陪伴在身边的伙伴。

说干就干。

部署在哪呢?#

其实我之前曾经试过用云服务器去部署各种各样的应用,后面我放弃了。为什么呢?因为我发现云服务器并不是一个十分方便维护的架构,尤其对于一个需要长期运行的应用。它会有非常非常多的崩溃的可能性,而且整体的运维费用也不便宜。就比如说上一次我的服务器的存储就因为 Redis 的配置失误而导致整个服务器的存储爆炸了。所以我并不希望为此而付出太多的成本,我希望它还是一个稳定、易维护的架构。

Let’s Serverless!#

所以我想到了当前非常流行的一种方案,叫做 Serverless,也就是说我们把服务分离放在各种各样的平台上面:数据库放在数据库的平台上面,应用放在应用的平台上面,像对象存储就放在对象存储的平台上面,这样最大限度地解耦,同时发挥他们的特长,整体的运营压力就会小很多。

所以我也去问了 ChatGPT,同时附带了一些条件。因为我是 Cloudflare 的忠实用户,我知道它拥有非常便宜的存储、可靠的容器和 Worker 服务,所以我可能会倾向于最大程度上去利用这样一个平台。

于是服务的选型就被确定下来了。Cloudflare Worker 和 Container 用来存放应用的主体,Cloudflare 的 R2 用作对象存储。然后另外我们把数据库,也就是 Postgres,托管在 Neon 上面。这是一个拥有 0.5G 免费额度的数据库,同时它拥有着相对比较稳定安全的数据可靠性。

日常记录 · 访问路径

手机 / 浏览器 写下此刻
Cloudflare Worker 入口与请求路由
Memos Container 应用服务

Memos 写入的两处存储

Neon Postgres 文字与记录数据
Cloudflare R2 照片与附件

定时备份 · 数据库副本

Cloudflare 定时任务 每天触发
Backup Container 从 Neon 导出
R2 备份桶 保存数据库副本

版本发现 · GitHub Actions 只提议更新

每日检查 上游稳定版
升级 PR 补丁 / 次版本
人工审核 必要时预演迁移
合并到 main 触发生产构建

自动部署 · Cloudflare Workers Builds

main 更新 启动构建
部署前备份 Neon → R2
部署并重启 Worker / Container
冒烟检查 确认应用可用
我的 Memos 部署架构。切换上方按钮,可以分别查看日常记录、备份、升级和发布路径。

GitHub Actions 只负责发现稳定版并提出升级 PR,不直接部署。合并到 main 后,Cloudflare Workers Builds 才会依次完成部署前备份、发布、重启和检查。平时的数据库备份则由 Cloudflare 的定时任务每天触发。

那么,价格呢?#

域名就采用我的博客域名,大约 100 元人民币一年。应用主体上的 Container 大概是 5 美元每月。R2 的成本是按量计费的,目前我还没有遇到 10GB 的免费存储被用光的情况。

保持数据安全#

我几乎能百分百相信 Cloudflare 的存储安全性,但也没有其他能相信的服务商,是吧?唯一比较麻烦的是我的数据库,因为数据库用的是免费的 Neon,我不知道它平台的安全性,就假设它相对比较安全。不过为了保险起见,我们在应用里写了一个自动备份的脚本,每次升级都会备份,也会做每天的日常备份。整体上成本也相对比较可控。

耍起!#

经过这一番折腾,我们成功创建出了属于自己的人生日记本。当然,为了接入 ChatGPT,我还写了一个小小的 OAuth 适配。这样我的定时任务就会读取我的一辈子,我就能清楚地知道到底发生了什么事。当然也有一个非常非常可爱的小偶像每天鼓励我——好吧,这个其实就是 ChatGPT。

那么,咱就耍起吧!

And, by the way, 欢迎来我的 Memos看看我的日常~