开源博客系统 — 一个按钮部署到Cloudflare,开源博客项目内置AI写作

这个开源项目叫 qiaomu-blog-opensource,它不是博客模板,而是一套完整的博客内容生产系统。从写第一行字到读者打开页面,整条链路它都管了。

而且把 AI 写作辅助和 Cloudflare 一键部署都内置了。部署门槛和 AI 工作流,一个仓库同时解决。

不是博客模板,是内容生产系统

仓库 README 开头就说了——这是一套完整的博客系统。前后台双编辑器、AI 写作辅助、AI 生图、主题系统、全文检索、API Token、外部发布生态,全塞在一个仓库里。连 Cloudflare 部署路径都帮你铺好了,开箱即用。

技术栈这块:Next.js 16、React 19、TypeScript、OpenNext for Cloudflare、Cloudflare Workers + D1 + R2。编辑器用的是 Novel/Tiptap,MIT 协议开源,商用无忧。

老实讲,玩具 demo 不会上这套技术栈。你一看选型就知道,作者一开始就是冲着生产环境去的,不是随便玩玩。

写作链路上的三个摩擦点

作者为什么要做这个项目?README 里有一段话很直接:自媒体账号可能被封,平台流量也会波动,但自己的站点不会。

顺着这个思路往下想,写作这件事其实有三个让人烦的地方:

第一,写作工具和发布工具是割裂的。你可能在一个地方写,另一个地方改,再在第三个地方发布。中间的搬运成本全靠自己扛。

第二,写完之后的"杂活"太多。摘要、标签、SEO slug、封面图,这些东西跟表达无关,但你每次都要做。

第三,搭站本身就是门槛。买服务器、配域名、装系统、管证书……很多人光是走到这一步就放弃了。

这个项目针对的就是这三件事。写作体验统一到编辑器里,杂活扔给 AI 处理,部署直接扔给 Cloudflare。不需要服务器,不需要 nginx,不需要管证书续期。

Cloudflare Workers + D1 + R2 这个组合很适合博客:Workers 做计算,D1 做 SQLite 数据库,R2 做对象存储。博客读多写少、全球分布、对可用性敏感,Cloudflare 的边缘网络刚好吃住了这些需求。

四层能力:从写完到发布

基础层:打开就能写

前台展示、后台管理、编辑器、主题系统……分类、发布状态、全文检索、软删除与恢复,这些全齐了。编辑器前台后台都能用,所见即所得,手感嘛,比较接近飞书和 Notion 那种。然后有四套首页主题开箱即用,手机端也能看,不用自己折腾适配。

发布状态支持四种:公开、草稿、密码访问、链接访问。老实讲,后两种挺适合做付费内容或者"半公开"那种,而且不会出现在博客索引和 RSS 里,这点我觉得设计得比较细心。

AI层:摘要、标签、封面,全部自动

整个项目里我自己最关注的就是这一层。编辑器内置了 Ask AIBubble Menu——你选中一段文字,气泡菜单直接弹出来,改写、润色、扩写、翻译都能发起。摘要、标签、SEO slug、封面图,也可以让系统自动生成。

生图也接了,支持 GPT-Image-2Nanobana,可以生成封面、段落配图,或者根据选中文本直接出图。最近 100 条生图记录都留着,方便你翻回去找之前用过的图。

模型配置做了比较灵活的手动或模板创建方式。温度、Max Token 这些参数都能调,可以对接 OpenRouter、硅基流动,也可以按任务分配不同模型。话说回来,甚至支持 Cloudflare Worker AI,免费用户每天 1 万"神经元",能调 50 多个开源模型。零成本就能跑,你猜怎么着,这对想试水的人来说挺香的。

AI 的接入点划分得清楚。每个功能模块的 AI 调用是独立的,你不需要把整个 AI 栈全部配好才能开始写,只用文本模型也可以,只开生图也行,按需来就好。

入口层:Obsidian、浏览器、Claude都能发

这个仓库开源的不只是博客主站,还有配套工具——

  • Chrome 剪藏插件:浏览器里看到的网页直接剪藏进博客草稿箱,一键操作,不用复制粘贴折腾
  • Obsidian 发布插件:从 Obsidian 一键发布,对 Obsidian 重度用户来说很顺手
  • Claude Skill 发布:通过命令工作流直接发布

通过 API Token 接入,你习惯在哪写就在哪写……浏览器、Obsidian、Claude 都行,最终所有内容汇到同一个博客后台。是不是比想象中方便?

部署层:不需要服务器

部署是这篇重点,下面展开。

Cloudflare部署:从准备到上线

部署前要准备什么

点 Deploy Button 之前,你得先备好几个值:

  • NEXT_PUBLIC_SITE_URL:站点域名,比如 https://blog.yourdomain.com
  • ADMIN_PASSWORD:后台管理密码,自己设一个
  • ADMIN_TOKEN_SALT:Token 加密盐值,随便生成一个随机字符串就好
  • AI_CONFIG_ENCRYPTION_SECRET:AI 配置加密密钥,也是随机字符串。说实话这两个盐值你不用去记,生成完塞进去就忘了吧
  • AI_API_KEY(可选):要接 AI 服务的话才需要,不用 AI 的话可以先不管

仓库根目录有个 .env.example 模板,复制成 .env.local 填进去就行。没什么花活,就是复制粘贴的活儿。

最快的方式:点一个按钮

GitHub 仓库页面上有个 Deploy to Cloudflare 按钮。点了之后,Cloudflare 自动帮你干这些事:

  1. 读取仓库里的 Worker 配置(wrangler.toml
  2. 创建 D1 数据库绑定
  3. 创建 R2 存储桶绑定
  4. 跑仓库里的 deploy.sh 脚本
  5. 应用数据库 schema 和默认配置,一步到位

D1、R2、Worker 绑定全自动的,你不需要手动去 Cloudflare 后台创建任何资源。填完环境变量,等部署跑完就行了。是不是挺省心的?

部署完系统会自动初始化什么

第一次部署完,系统会自动帮你建好一堆东西:默认导航菜单、默认主题和字体、默认分类结构、AI 文本和生图的模型配置模板、摘要/标签/slug/封面生成器、编辑器 Ask AI 预设动作。基本上你能想到的初始化操作,它都帮你搞好了。

不过有一点要注意——API Key 不会进仓库代码。首次部署后你得通过 Cloudflare secret 或者在后台管理页面手动补齐。这个设计我觉得挺好的,至少不用担心密钥不小心推到 GitHub 上了。

AI写作怎么配:两步搞定

部署完了想让 AI 真正跑起来,就两步的事儿。

先搞文本模型。进后台的管理页面,找到模型配置,新建一个文本模型。填上模型 endpoint 和 API Key 就行。能对接 OpenRouter、硅基流动这些,也可直接用 Cloudflare Worker AI(白嫖党狂喜)。配好之后,Ask AI、改写、润色、扩写、翻译、自动摘要、标签生成……这些功能就全通了。说实话,光这一步就已经够用很久了。

然后是生图模型。同样在后台搞定,支持 GPT-Image-2 和 Nanobana。配好之后,编辑器里直接生成封面图和段落配图,选中一段文字就能让 AI 根据内容出图,是不是挺省事的?

两个配置互相独立,你可以只配文本不管生图,也可以只搞生图不管文本。按自己节奏来就好,不用一口气全上。

这三类人最适合用

想找个自己说了算的内容阵地的人。说实话,做社交媒体账号最怕什么?平台突然改规则、算法一顿操作下来流量腰斩、甚至号说没就没了——这些破事儿谁遇到谁闹心。但博客不一样,这是你自己的地盘,虽然不能完全免疫风险,但至少比把所有鸡蛋都搁一个篮子里强多了吧。

内容产出比较高频的人。编辑器用起来跟飞书、Notion 那手感差不多,打开就能进入状态。然后像摘要、标签、SEO 优化、封面图那些杂七杂八的事,直接甩给 AI 搞定。你猜怎么着?省下来的时间全砸在内容本身上,这才有意义啊。

本来就在用 Obsidian、飞书、Notion 的人。对,这类同学基本零门槛,写作体验你早就熟了。而且设备对接这块也帮你铺好了路——Obsidian 发布插件、Chrome 剪藏插件都到位了,不用自己瞎鼓捣。你看,省心不?

常见问题

部署需要服务器吗?

不需要。整个项目跑在 Cloudflare 边缘网络上,用 Workers + D1 + R2,零服务器运维。

AI功能必须额外付费吗?

不一定。Cloudflare Worker AI 免费额度每天 1 万神经元,可调 50 多个开源模型。文本和生图功能按需配置,可以零成本跑起来。

支持哪些内容发布入口?

支持浏览器编辑器、Chrome 剪藏插件、Obsidian 发布插件、Claude Skill 命令工作流四种入口,通过 API Token 统一汇入博客后台。

相关链接

老实讲,那个在线示例本身就是用这个项目直接搭出来的站点。编辑器手感、主题实际效果、还有 AI 交互功能,都能亲自体验,比截图靠谱多了。不如点进去试试看,你猜怎么样,说不定就种草了……