从 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 的开源拆分,以及工作台审批流的进一步细化——清单不长,但每条都老老实实待在「待办」而不是「已完成」里,也比一年前敢想得多。

写在第二年门口

独立开发一年最大的收获不是上线了什么,而是建立了一套「坏了能回滚、错了能重生成、睡了不报警」的系统。渡劫还长,劫还不少——但手里的剑,比一年前快多了。