教程 10 分钟阅读
0 技术基础、0 费用:30 分钟搭好你的顶级域名独立博客(CF CMS 保姆级教程)
除了域名本身 0 费用、0 技术基础:用 CF CMS 在 Cloudflare 免费套餐上搭一个顶级域名独立博客的 8 个步骤,以及上线后的日常运维。
你有没有过这种时刻:
在平台上写了两年,一次限流、一次封号,内容和粉丝说没就没。
想搭个属于自己的博客,一搜教程:买服务器、装环境、配 Nginx、上 HTTPS、天天防攻击……还没开始写,就先被劝退了。
今天这篇,就是写给你的。
我会带你用开源项目 CF CMS,在 Cloudflare 上搭一个带顶级域名的独立博客。你现在看到的这个站,就是这么搭起来的。
先把话说在前面:
- 0 技术基础:不用会写代码。全程就是复制、粘贴、回车;嫌麻烦,还可以把命令直接交给 AI Agent 去跑。
- 0 费用:除了域名本身(便宜的后缀一年几美元),网站、数据库、图片存储、自动翻译全部跑在 Cloudflare 免费套餐上,不用租服务器。
准备好了吗?我们开始。
先看结论:你能得到什么
- ✅ 一个属于你自己的顶级域名,比如
yourdomain.com - ✅ 自动 HTTPS + 全球 CDN,打开速度不输大站
- ✅ 中、英、日、西、阿五种语言,写一篇中文,保存时自动翻译
- ✅ 8 套预制模板 + 一键生成 logo、favicon、主题色
- ✅ 后台藏在随机秘密路径后面,直接访问
/admin是 404 - ✅ 自带 MCP 接口,以后让 AI Agent 帮你发文章、改设置
你需要准备的只有三样:
- 一个域名(下面教你买)
- 一个 Cloudflare 免费账号
- 一台能打开终端的电脑(macOS / Linux;Windows 建议用 WSL)
一张图看懂:它到底跑在哪

简单说:
- Pages:网站本体,负责渲染页面
- D1:数据库,存文章、标签、设置
- R2:存图片
- Workers AI:你保存文章时,帮你翻译成另外四种语言
没有一台需要你维护的服务器。 打补丁、扩容、防 DDoS,都是 Cloudflare 的事。
全流程一图看懂:8 步

顺利的话 30–60 分钟。其中真正需要你动脑的,只有第 1 步:起个好名字。
第 1 步:选购域名
域名是你在互联网上的门牌号,也是这套方案里唯一要花钱的地方。
在任意一家正规注册商购买都可以,比如 Spaceship、Cloudflare Registrar、Namecheap。选一家价格透明、续费不坑、支持 WHOIS 隐私保护的就行。
挑域名的 3 个小建议:
- 短、好记、好拼。能口述给朋友听的,就是好域名。
- 看续费价,别只看首年价。有些后缀首年很便宜,第二年翻好几倍。
- 后缀不必执着
.com:.cc、.dev、.me都很适合个人博客。
第 2 步:把域名接入 Cloudflare
- 打开 Cloudflare 官网,注册一个免费账号。
- 点 Add a site / 添加站点,输入你的域名,套餐选 Free。
- Cloudflare 会给你**两个 Nameserver(名称服务器)**地址。
- 回到你买域名的注册商后台,把 Nameserver 改成这两个。
- 等几分钟到几小时,Cloudflare 显示 Active 就成了。
关键点:域名要和后面部署用的,是同一个 Cloudflare 账号。 安装脚本会用 API Token 去找这个域名。
第 3 步:创建 API Token(照抄就行)
路径:Cloudflare 右上角头像 → My Profile → API Tokens → Create Token → Create Custom Token。
按下面这张图,一项一项勾上:

- Account · Cloudflare Pages · Edit
- Account · D1 · Edit
- Account · Workers R2 Storage · Edit
- Account · Account Settings · Read
- Zone · Zone · Read(要绑自己的域名时)
- Zone · DNS · Edit(要绑自己的域名时)
两个提醒:
- Workers AI 不用额外权限,网站运行时走 Pages 的 AI 绑定。
- 这个 Token 只给安装脚本用,别交给写作 Agent。 生成后只显示一次,先存好。
第 4 步:开通 R2
R2 是放图片的地方,必须提前在控制台手动开通,脚本没法替你点。
进入 Cloudflare 控制台左侧的 R2,点开通即可。
⚠️ 实话实说:有的账号开通 R2 时要先绑一张卡或 PayPal。别慌,绑了不等于扣钱,在免费额度(10 GB 存储)以内不收费。一个个人博客的图片,很难用完。
我第一次部署就卡在这里:脚本跑到一半报 10042,原因就是 R2 没开通。开通之后重跑,一次过。
第 5 步:拿到代码
CF CMS 是开源的,代码在 GitHub:github.com/jemkuo/cf-cms
二选一:
- 推荐:在 GitHub 上点 Fork,复制一份到你自己的账号,以后改起来方便。
- 或者直接克隆:
git clone https://github.com/jemkuo/cf-cms.git
cd cf-cms
电脑上需要先装好 Node.js 20 或更新版本(官网下载安装包,一路下一步)。
第 6 步:一条命令部署 ⭐
这是整篇最核心的一步。先把第 3 步的 Token 放进环境变量(它只存在你的终端里,脚本不会打印出来):
export CLOUDFLARE_API_TOKEN=粘贴你的token
然后,一条命令:
npm install && ./scripts/setup.sh --project myblog --domain yourdomain.com
把 myblog 换成你想要的项目名,yourdomain.com 换成你的域名。
不放心?先加 --dry-run 预演一遍,只检查、不创建任何东西:
./scripts/setup.sh --project myblog --domain yourdomain.com --dry-run
它会先给你做一次「体检」
脚本动手之前,会打印一份预检清单:Token、账号、Pages、D1、R2、域名,逐项打勾。

- 全是 ✓:自动建 D1 数据库、R2 存储桶、Pages 项目、各种密钥,然后发布网站。
- 有 ✗:一个资源都不建,直接告诉你哪一步有问题、去控制台哪里改、改完用哪条命令重跑,中英文都有。
- account id 不用自己找:Token 只能看到一个账号时,脚本自动填。
半路失败?直接重跑
进度记在本地的 .cf-cms-setup.json 里。重跑会接着做,已经建好的 D1、R2、Pages 都会复用,不会重复创建,也不会清空你的文章。
域名上有旧记录?它会先问你
如果你的域名以前指向别的服务器,脚本会先列出旧的 A / AAAA / CNAME 记录,默认不删。
你确认可以替换后,加上 --replace-dns 重跑(或者在提示里回答 y),它会换成一条指向 Pages 的 CNAME:

注意:替换之后,旧服务器在这个域名上的服务就访问不到了。TXT 之类的其他记录会保留。
跑完之后
终端最后会打印一行 Admin 地址,长这样:
Admin: https://yourdomain.com/<ADMIN_SAFEPATH>/admin/
后台密码是随机生成的,写在项目目录的 .dev.vars 文件里,不会显示在屏幕上。
👉 把 Admin 地址和 .dev.vars 一起存好,这就是你博客的钥匙。
域名状态如果显示 pending,别急,证书签发和 DNS 生效一般要几分钟。
第 7 步:进入隐藏后台,换上你的风格
打开那个 Admin 地址,输入密码:

为什么要藏起来? 绝大多数扫描器都在撞 /admin、/wp-login。CF CMS 的后台在一串随机路径后面,直接访问 /admin 返回 404,连登录框都看不到。
进去之后先做两件事:
- 选模板:个人技术博客(Dispatch、Signal)、生活方式(Atelier、Hearth)、企业首页(Practice、Civic)、科技公司(Launch、Orbit),外加原创的 Paper、Ink、Terminal。
- 一键生成视觉套件:点 Generate visual kit,自动生成和模板配套的 logo、favicon、主题色。不满意就再生成,或者换成自己的图。
第 8 步:写文章,自动变成五种语言
新部署的站点自带几篇示例文章,你可以先看看效果:

看完删掉,写你自己的:
- 用 Markdown 写,标题、列表、代码块、图片都支持
- 图片直接上传,存进 R2
- 保存时勾选翻译,Workers AI 自动生成英、日、西、阿四个版本(阿拉伯语自动从右往左排版)
- 每篇文章可以单独设置 SEO:关键词、canonical、Open Graph 分享图
写一次,五种语言的读者都能搜到你。 这是很多大平台都给不了的。
日常运维:让 AI Agent 当你的编辑
博客上线只是开始。真正省心的,是日常运维几乎可以交给 AI。
1. 一句话接入 AI Agent
CF CMS 自带 MCP 接口(地址是你域名下的 /mcp)。在 Cursor、Claude 等支持 MCP 的客户端里,贴一段项目 README 里现成的「一句话说明」,再把 .dev.vars 里的 ADMIN_API_TOKEN 填进去,Agent 就能:
- 列出、创建、修改、发布、删除文章
- 管理标签、栏目、模板、logo
- 上传图片
接上之后,你可以直接说:
「帮我建一篇中文草稿,slug 叫 edge-notes,放到 notes 栏目,并翻译成其他语言。」
安全设计:ADMIN_API_TOKEN 只能管内容,动不了部署,也碰不到你的 Cloudflare 账号。这也是为什么第 3 步的 Cloudflare Token 不要给 Agent。
2. 定期轮换密钥
觉得密码或 Token 可能泄露了?一条命令换掉:
npx wrangler pages secret put ADMIN_PASSWORD --project-name myblog
ADMIN_API_TOKEN、SESSION_SECRET 也一样。部署完成后,第 3 步那个 Cloudflare API Token 也可以删掉或轮换,等下次部署再新建。
3. 免费额度心里有数
| 资源 | 在博客里干什么 | 常见免费额度 |
|---|---|---|
| Pages | 网站和 Functions | 每月 500 次构建,每天 10 万次 Functions 请求 |
| D1 | 文章、设置 | 5 GB,按天限制读写行数 |
| R2 | 图片 | 10 GB 存储,有限次数的读写操作 |
| Workers AI | 保存时翻译 | 每天 10,000 Neurons |
额度以 Cloudflare 控制台为准。个人博客的流量,基本碰不到天花板。 翻译只在保存时跑,不是每次有人访问都跑,Workers AI 额度每天重置。
4. 常见报错速查
| 你看到的 | 怎么办 |
|---|---|
✗ R2 is not enabled,错误 10042 |
去控制台开通 R2(可能要先绑付款方式),然后重跑 |
| Token 无效(10000)或权限不足(9109、HTTP 403) | 按第 3 步的清单补齐权限,重新 export 后重跑 |
| 域名一直 pending | 看脚本列出的旧 A / AAAA / CNAME,确认后加 --replace-dns 重跑;DNS 对了之后证书还要几分钟 |
| Pages 项目名被占用 | 换一个 --project 名字 |
| D1、R2、Pages 已存在 | 直接重跑,同名资源会复用 |
| 网络错误 | 检查网络后重跑,做完的步骤会跳过 |
记住一句话:报错了,先看提示,改完重跑。 脚本会告诉你去哪改、怎么跑。
关于「0 技术基础」,说句实话
这套流程里,你确实要打开终端、敲几条命令。
但你不需要理解它们在干嘛。你要做的只是:
- 复制命令
- 粘贴到终端
- 回车,看有没有 ✗
更懒的办法:把这篇文章和 README 丢给你的 AI Agent,让它替你跑。 它卡住的时候,要么是要你去控制台点一下(比如开通 R2),要么是要你确认一下(比如替换 DNS),跟着提示做就行。
算一笔账
| 项目 | 费用 |
|---|---|
| 域名 | 每年几美元起(看后缀) |
| 服务器 | 0(Cloudflare Pages) |
| 数据库 | 0(D1 免费额度) |
| 图片存储 | 0(R2 免费额度) |
| 五语翻译 | 0(Workers AI 免费额度) |
| HTTPS 证书 + CDN | 0 |
| CMS 软件 | 0(开源) |
除了域名,一分钱不花。
最后
平台给你流量,但地盘永远是平台的。
独立博客才是你的数字资产:域名是你的,内容是你的,读者能直接找到你。
今天就迈出第一步:挑一个你喜欢的域名,照着这篇走一遍。
搭建过程中遇到问题,欢迎留言。觉得项目有用,也欢迎去 GitHub 给 CF CMS 点个 ⭐。
下一篇,我们聊聊怎么让 AI Agent 每天帮你运营这个博客。