这是这个博客的第一篇文章,同时也是一次部署验证。

为什么这么折腾

我想要的写作体验很简单:打开 Notion,写完,关掉。 不想碰 Markdown 文件,不想 git commit,不想在本地跑 dev server。

但我也不想要 Notion 自带的发布页 —— 排版不能改,域名不好看,加载也一般。

所以拆成了三层:

用什么负责
内容Notion 数据库写作、草稿、标签管理
构建Astro构建时拉取 API,渲染成纯静态 HTML
托管Cloudflare Pages全球边缘分发,免费额度够用

数据是怎么流动的

Notion 数据库
    ↓  构建时调用 API(notion.dataSources.query)
Astro 拿到「已发布」的文章列表
    ↓  notion-to-md 把 block 转成 Markdown
    ↓  marked 渲染成 HTML
dist/ 目录里的一堆静态文件
    ↓  上传
Cloudflare 边缘节点

关键点是 API 只在构建时调用一次。访客打开网页时读的是纯 HTML,不走 Notion,所以速度和 Notion 的响应快慢无关。

几个踩过的坑

图片链接会过期

直接上传到 Notion 的图片,API 返回的 URL 大约一小时后失效。构建时下载下来的话没问题,但如果只是引用链接,第二天图片就全挂了。

解决办法:图片用外部链接(图床、S3),或者在构建流程里下载到本地。

状态字段决定可见性

只有 状态 = 已发布 的条目会出现在网站上。写到一半的东西留在 草稿写作中,对外完全不可见 —— 这就是我要的:草稿箱和发布系统是同一个界面

静态站不会自己更新

改完 Notion,网站不会自动变。需要触发一次重新构建(Deploy Hook 或者推一次代码)。

现在的工作流

  1. 在 Notion 数据库里新建一行,状态设成 写作中
  2. 点进去写
  3. 写完把状态改成 已发布
  4. 触发构建,两分钟后线上可见

就这样。


这篇文章本身就是通过上面这套流程发出来的。

用 Notion 写作,Astro 渲染,Cloudflare 托管

作者

周易

发布日期

2026 - 07 - 29

Avatar
周易

写代码,记笔记,少踩坑。