从 Hello World 到现在,一年了。这篇不聊技术细节,聊聊一个独立开发者的选型复盘:哪些决定今天看是对的,哪些是学费,以及如果重来一次我会怎么选。
时间线:这一年起居注
| 阶段 | 关键词 |
|---|---|
| 第 1 个月 | Hexo 博客、买域名、熟悉 Git Pages |
| 第 2–3 个月 | 迁静态博客、接入 Cloudflare、域名体系收拢到 520691.xyz |
| 第 4–6 个月 | 渡劫code 立项:Vite + React + Monaco,Workers 后端 |
| 第 7 个月起 | 渡劫code 工作台持续打磨:Agent 循环、虚拟 Shell、远程执行节点 |
| 2026-10 · 最近一个月 | 博客重建集中落地:D1/KV/R2/DO 五件套、评论系统、三端同步、移动端适配、SEO 治理、文章工程化(gen_posts.py)——全部刚刚上线,热乎着 |
| 正在进行 | 评论后台与反垃圾、邮件回复通知、dujie-comment 开源拆分、十年之约的 30 篇、EdgeLink、PWA——清单里写着「正在做」,不写着「已完成」 |
这张表刻意把「最近一个月」单独列了一行:一年的叙事很动人,但时间线必须诚实——博客的地基是刚刚浇完的,不是半年前就夯实的。把上个月才落地的功能写进「第 10–12 个月」的已完成里程碑,骗得过读者骗不过自己。
选型复盘:四个关键决定
1. Cloudflare 而不是 VPS——对的
单人项目养一台 VPS,隐性成本是半夜的报警、过期的证书、忘续的域名。Workers + Pages + D1 + KV + R2 + DO 把运维压缩成一份 wrangler.toml(绑定方式见 Workers 全栈实践)。免费额度内月成本 0,国内可达性靠 三端同步的 Gitee 镜像兜底。重来一次还这么选。
2. D1 而不是自建 Postgres——对的,但有边界
评论、点赞、浏览这类「读多写少、单库足够」的场景,D1 是甜蜜点:SQLite 的简单换边缘的延迟,事务用 batch、去重用 UNIQUE(见 D1 实战)。但如果一开始就要多写点、多表 join、复杂报表,我会犹豫——单库单写点是硬天花板。选型前先问自己:数据量会不会涨到单库装不下?不会,就放心用。
3. 自建评论而不是 Giscus/Disqus——对的
Giscus 强绑 GitHub 账号,国内读者直接劝退;Disqus 国内加载慢且广告侵入。自建 D1 + Worker 方案(见 评论系统实战)的代价是两天工作量,收益是三端数据完全同步 + 数据自己拿着。对独立博客,数据自主权值这个价。
4. 文章手写 HTML——错的,已纠正
博客前 4 篇文章是手写 HTML 的,每篇都要复制面包屑、评论区、侧栏、SEO meta——漏一次 canonical,SEO 努力就打折。现在的方案是 posts.json 存元数据、posts/*.body.html 存正文、gen_posts.py 统一产出(流程见 SEO 全流程):
# 现在的产出链路:元数据 + 正文 → 生成器 → 文章页
python3 gen_posts.py # 生成全部文章(幂等,可重复执行)
python3 gen_posts.py --check # CI 校验产物与元数据保持同步重复三次的事,就必须自动化——这是今年最贵的一课,学费是若干个不一致的深夜。
踩坑博物馆
- 域名下划线:
dujie_cone主机名撞上严格 TLS 客户端的通配证书匹配,握手直接失败——改名dujiecone解决。教训:主机名永远不用下划线dujie_cone.520691.xyz # ✗ 通配证书不匹配下划线,Python/Go 握手失败 dujiecone.520691.xyz # ✓ 已更名为无下划线主机名 - wrangler 缓存旧账号:Pages 部署 AuthenticationError,真凶是 node_modules 里的账号缓存。教训:CI 里 fresh checkout,本地复现先删缓存
- gh-pages 竞态:首次推送镜像 job 抢在 gh-pages 生成前开跑。教训:部署链路里所有「等待」都要有超时和跳过分支
- 软 404:站点缺 404.html,错路径返回 200 的首页,搜索引擎按低质量站处理。教训:上线第一天就建 404.html
- git push | tail:管道吞掉退出码,「推送失败」显示成「成功」。教训:退出码必须裸奔,验证用
git ls-remote
如果重来一次
技术栈不变,顺序会变:先建 SEO 与工程化地基(404、sitemap、生成器),再写内容。今年的顺序反了——先吭哧吭哧写文章,后补地基,补地基时发现前 4 篇全是手写 HTML,返工翻倍。独立开发没有队友兜底,前期多花的两小时自动化,后期会连本带利还回来。
用数据给一年结账
| 指标 | 数值 |
|---|---|
| 累计文章 | 12 篇,全部由生成器统一产出 |
| 三端部署 | CF Pages / GitHub Pages / Gitee Pages 全部 200 |
| 评论系统 | D1 承载,三端数据实时同步 |
| SEO 基建 | sitemap 双端分离、404 页、JSON-LD、IndexNow |
| 月度账单 | 0 元(Cloudflare 免费额度内) |
数字不大,但每一个都跑在「醒了就能继续」的基础设施上。对一个独立开发者来说,这就是复利。
一些不好归类但重要的
关于健康:独立开发最容易卖掉的是睡眠,而睡眠债的利息比任何云账单都高。今年最值的习惯是晚上十一点后不碰部署——夜里的每一个「小改动」都值得等到明天。关于社区:给别人的项目提 Issue、写文档、回评论,这些「不产出代码」的时间,最后都以外链、反馈和合作的形式回来了。关于完美主义:先上线,再完美。渡劫code 的第一个版本连设置页都没有,但它今天养活了整个博客区的技术内容。关于命名:「渡劫」两个字比任何 description 都更容易被记住——名字是产品的第一句广告语,值得想三个月,不值得上线后改三年。第二年计划已经写好:评论后台与反垃圾、邮件回复通知、dujie-comment 的开源拆分,以及工作台审批流的进一步细化——清单不长,但每条都老老实实待在「待办」而不是「已完成」里,也比一年前敢想得多。
写在第二年门口
独立开发一年最大的收获不是上线了什么,而是建立了一套「坏了能回滚、错了能重生成、睡了不报警」的系统。渡劫还长,劫还不少——但手里的剑,比一年前快多了。