故剑遗 故剑遗 GUJIANYI
English

DEVLOG · 2026-10-18

开发日志 #1:网站基础工程落地(M1)

从零搭建故剑遗博客站:Astro + Cloudflare、设计系统、中英双语、API 契约、D1 迁移与限流,以及一路踩过的坑。

这是本站的第一篇开发日志,记录 2026-10-18 完成的 M1(基础工程)阶段。

范围

首个公开版本是完整网站:博客、双语简历、项目展示、公开反馈与讨论、开发进度、更新记录、登录/免登录、站内与邮件通知、站长管理,以及 Civitas 展示与试玩入口。M1 只做地基,不铺内容。

已落地

  • 工程:Astro(静态正文 + React 岛屿)+ Cloudflare Pages/Workers,D1 数据库,R2 预留。
  • 设计系统:设计令牌、深浅主题、按钮/表单/状态/对话框/列表组件,移动优先与键盘可达。
  • 中英双语:词典 + locale 路由(中文在 /,英文在 /en/),构建时阻断式缺项检查。
  • API 契约:统一错误码、requestId、异常不透传内部细节、JSON 大小上限与字段校验,11 项单元测试。
  • 数据:D1 迁移(项目/模块字典、限流表),预览与生产库隔离,本地幂等重放验证。
  • 安全基线:安全响应头、/api/* JSON 404 兜底、公开产物秘密扫描、CI 工作流。
  • 游客与限流:HttpOnly 游客 Cookie + D1 固定窗口限流,本地实测第 6 次请求起返回 429。

踩坑记录

  1. Astro 模板里属性表达式内嵌 JSX、frontmatter 里写 JSX,都会构建失败。
  2. Node 24 直接跑 TypeScript 测试不支持 as const。
  3. 限流验收几次”不生效”,最后发现全是测试客户端问题:PowerShell 的 -Headers 不发 Cookie 头、curl -b 文件 需要 Netscape 格式。服务端自始至终是对的——先怀疑客户端,再怀疑服务端。
  4. 本地 D1 验证时,wrangler pages dev --d1 旗标和配置绑定不是同一个本地库。

下一步

M2 铺内容:首页三模式、简历页、博客管线、项目页与 Civitas 展示页。模组正式资料与云端账号就绪后,反馈闭环(M3)才能真实跑通。

← 文章列表

讨论

…