不用买任何 VPS 服务器、不需要配 Docker 和 Nginx,只要一个 Cloudflare 账号,就能免费部署一个永久在线、全球 CDN 加速的极轻博客。
随着 Cloudflare Serverless 生态的完善,Workers 负责运行后端逻辑,静态资源托管在边缘网络,数据直接存入底层的分布式 SQLite(Cloudflare D1)。
这种架构零运维成本,不用担心服务器欠费停机或系统崩溃,全球访问延迟极低。
这篇笔记记录如何通过 Wrangler 命令行创建 D1 数据库、初始化表结构、注入管理员密码,并一键部署到 Cloudflare 边缘网络。
Serverless 边缘博客的核心架构
很多新手习惯了“买 VPS ➔ 装 Linux ➔ 装 Nginx ➔ 跑数据库”的传统流程。而基于 Cloudflare 边缘网络的 Serverless 架构彻底颠覆了这一切:
┌─────────────────────────────────────────────────────────────┐
│ 🔴 传统 VPS 博客:单点开销与运维负担 │
│ - 每月必须交固定月租(哪怕一个月只有一个人看); │
│ - 机器在香港就只有香港快,跨国访问延迟高; │
│ - 必须自己操心 Linux 补丁、MySQL 维护、防 CC 与防爆盘。 │
├─────────────────────────────────────────────────────────────┤
│ 🟢 Cloudflare 边缘博客:纯 Serverless(零服务器) │
│ - 🧠 代码跑在 Workers:代码分散在全球 300+ 边缘数据中心; │
│ - 💾 数据存在 D1:Cloudflare 原生高可用分布式 SQLite 数据库;│
│ - 🖼️ 图片放在 R2:免出口流量费的全球对象存储; │
│ - 💰 成本 0 元:个人日常访问完全落在 Cloudflare 免费额度内!│
└─────────────────────────────────────────────────────────────┘
准备工作
- [ ] 一个 GitHub 账号:用于拉取开源博客代码;
- [ ] 一个 Cloudflare 账号:官网免费注册,无需绑定信用卡;
- [ ] 本地 Node.js 环境:电脑安装了 Node.js(推荐 v18+ 或 v20+);
- [ ] 一个解析在 Cloudflare 上的域名:任何便宜后缀均可(例如
note.example.com)。
获取博客源码与本地环境准备
💻 【你本地的电脑】 打开终端(Windows 打开 PowerShell,Mac 打开终端)。
克隆主流的轻量边缘博客仓库并进入项目目录:
# 1. 克隆代码仓库
git clone https://github.com/shali10/forest-blog.git
cd forest-blog
# 2. 安装项目依赖
npm install
# 3. 检查 Cloudflare CLI 部署工具版本
npx wrangler --version
- ✅ 成功标志:终端返回
wrangler 3.x.x或4.x.x版本号,无任何依赖报错。
创建 Cloudflare D1 边缘数据库
我们需要在 Cloudflare 的全球边缘网络里,为你开辟一个专属的分布式数据库。
💻 【你本地的电脑】 执行登录命令:
npx wrangler login
- 🗣️ 说明:终端会自动唤起你的电脑浏览器,弹出 Cloudflare 授权页面,点击「Allow(允许)」即可一秒完成认证。
接着,创建专属 D1 数据库:
npx wrangler d1 create forest-blog-db
- ✅ 成功标志:终端最后会打出一串绑定配置(如下所示),包含一串长长的
database_id:
text
[[d1_databases]]
binding = "DB"
database_name = "forest-blog-db"
database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
⚠️ 关键动作:记下这串 database_id!
配置 wrangler.toml 数据库绑定参数
我们需要告诉部署程序,把刚才建好的数据库绑定到博客代码上。
在项目根目录下打开 wrangler.toml 文件,找到 [[d1_databases]] 这一段,将刚才生成的真实 database_id 填入进去:
name = "forest-blog"
main = "src/index.ts"
compatibility_date = "2026-08-28"
compatibility_flags = ["nodejs_compat"]
[vars]
SITE_TITLE = "我的数字手记"
SITE_SUBTITLE = "在边缘网络收集生活碎屑"
ADMIN_USERNAME = "admin"
[[d1_databases]]
binding = "DB"
database_name = "forest-blog-db"
database_id = "填入你刚才获得的真实database_id"
执行 SQL 脚本初始化数据库表结构
数据库刚建好时是一张白纸,我们需要把文章、分类、标签等表格结构刷入云端。
项目内已经预置好了官方初始化脚本,只需执行一行命令:
npm run db:init:remote
-
🗣️ 大白话:这条命令会直接连接 Cloudflare 云端 D1 数据库,瞬间建好
posts、categories、settings等核心数据表。 -
✅ 成功标志:终端打印出
Executed 1 commands... Success,代表云端数据库初始化完毕!
配置后台管理密码与环境变量
为了绝对安全,后台密码不能以明文存放在代码里。我们通过 Cloudflare 官方加密管道将管理员密码和 JWT 签名密钥直接注入边缘节点:
💻 【你本地的电脑】 依次执行以下两行加密注入指令:
# 1. 注入管理员登录密码(输入后按回车,密码输入不显字)
npx wrangler secret put ADMIN_PASSWORD
# 2. 注入后台鉴权密钥(生成一条随机 32 位防伪签名)
npx wrangler secret put JWT_SECRET
-
🗣️ 提示:当终端提示
Enter a secret value:时,输入你想设置的管理员密码(务必记在便签上),然后按回车即可。 -
✅ 成功标志:终端分别打出
✨ Success! Uploaded secret ADMIN_PASSWORD与JWT_SECRET。
构建并部署到 Cloudflare 边缘网络
激动人心的时刻到了!我们要把整套博客代码推向全球 300 多个数据中心。
💻 【你本地的电脑】 执行编译与一键发布:
# 1. 跑一次语法体检
npm run build
# 2. 部署到 Cloudflare 边缘网络
npm run deploy
稍等 5 ~ 10 秒钟,终端屏幕会打出欢快的成功大捷报:
Total Upload: xx KiB / gzip: xx KiB
Uploaded forest-blog (1.23 sec)
Deployed forest-blog triggers (0.45 sec)
https://forest-blog.你的用户名.workers.dev
Current Deployment ID: xxxxxxxx-xxxx
- ✅ 成功标志:复制终端输出的
https://forest-blog.xxx.workers.dev链接在浏览器打开,一个清新素雅、秒级冷启动的现代化博客首页瞬间展现在眼前!
绑定自定义域名并配置 SSL
虽然官方赠送了 .workers.dev 域名,但绑定属于你自己的个性域名才算真正毕业!
- 打开浏览器登录 Cloudflare 控制台;
- 在左侧菜单点击 「Workers & Pages」,找到你刚刚部署的
forest-blog; - 点击 「设置 (Settings)」➔「触发器 (Triggers)」;
- 找到 「自定义网域 (Custom Domains)」,点击 「添加自定义网域」;
- 输入你喜欢的域名(例如
note.0000996.xyz),点击绑定; - 🏁 瞬间完成! Cloudflare 会自动帮你配置 DNS 解析并签发专属全球 HTTPS 证书,不到一分钟,你的专属域名就能秒开访问!
在域名后面加上 /admin(例如 https://你的域名/admin),输入刚才的账号密码,即可跃入极其清爽的 Markdown 边缘写作后台!🚀
常见报错与排障
| 异常现场 | 真实根因 | 对应一秒救命招式 |
|---|---|---|
打开网页提示 Error 500 或数据库报错 |
wrangler.toml 中的 database_id 填错或未绑定 DB |
检查配置文件的 [[d1_databases]] 下,binding 必须大写为 "DB",重新核对 database_id。 |
| 登录后台提示“服务未配置,拒绝登录” | 遗漏了第 5 步的 Secret 注入 | 必须执行 wrangler secret put ADMIN_PASSWORD 和 JWT_SECRET,程序安全机制要求无密钥时拒绝登录。 |
运行 npm run db:init:remote 报错表已存在 |
重复初始化了已有数据库 | 无需担心,说明数据表结构早已就位,直接执行 npm run deploy 部署即可。 |
在国内部分地区直接打不开 .workers.dev 域名 |
运营商对 workers.dev 免费后缀存在 DNS 阻断 |
必须执行【进阶实战】,绑定你自己的自定义独立域名,国内即可毫秒秒开直连! |
| 担心访客太多把 D1 免费额度刷爆 | 爬虫频繁扫描动态路由 | 项目内置了爬虫与预加载识别机制,非真实访客不触发阅读量计数;个人日常写作完全落在免费额度内。 |
还没有人在这篇手记留下纸条,来做第一个亮灯的人吧。