699 字
3 分钟
部署过程:用 Cloudflare 免费搭建带后台的博客

这个博客使用开源项目 Rin,跑在 Cloudflare 上,全程免费。记录一下部署过程和踩过的坑。

为什么选 Rin#

一开始用的是静态博客 Fuwari(Astro),但它没有后台,发文章要改代码再重新部署。我想要的是:

  • 有后台,账号密码登录;
  • 浏览器里直接写文章、传图;
  • 能部署在 Cloudflare,不用自己的服务器。

Rin 正好满足:前端 React,后端 Cloudflare Workers(Hono),数据库用 D1(SQLite),MIT 开源。WordPress 需要 PHP + MySQL 服务器,不适合 Cloudflare,排除。

准备工作#

  • 一个 Cloudflare 账户,域名 suohx.org 已托管在 Cloudflare;
  • 一个 API Token(Workers、Pages、D1、DNS 等权限),用于命令行部署。

坑 1:命令行连不上 Cloudflare API#

官方流程是 bun install 后执行 bun run deploy,脚本会用 wrangler 自动创建 D1、队列和 Worker。但我的部署环境访问 api.cloudflare.com 一直失败,wrangler 无法使用。

坑 2:GitHub Actions 路线也走不通#

Rin 自带 GitHub Actions 部署流程(fork 仓库 → 填 Secrets → 运行 Build/Deploy)。但我使用的自动化授权没有 fork 和设置 Secrets 的权限,需要手动在手机上点很多步,放弃。

最终方案:控制台拖拽上传(Pages 高级模式)#

Cloudflare Pages 的拖拽上传支持根目录放一个 _worker.js(Advanced mode),它会接管所有请求,静态文件通过 env.ASSETS 提供。Rin 的后端正好就是这么读静态资源的,于是:

  1. 本地构建前端:cd client && bun run build,产物在 dist/client;
  2. 打包后端:用 wrangler deploy --dry-run --outdir 把 server/src/_worker.ts 打成单文件 _worker.js(这一步不需要联网);
  3. 把 _worker.js 放进 dist/client 根目录,整体压缩成 zip;
  4. 合并数据库迁移:把 server/sql/0000~0012.sql 合并成一份建表 SQL,并写入 migration_version = 12;
  5. 控制台 D1 → 创建数据库 rin,在 Console 里执行上面的 SQL;
  6. Workers & Pages → 创建 → Pages → 上传资产,项目名 suohx-blog,上传 zip;
  7. 项目 设置:
    • 绑定 D1:变量名 DB → 数据库 rin;
    • 兼容性日期 2026-01-20;
    • 环境变量:NAME、DESCRIPTION、FRONTEND_URL、CACHE_STORAGE_MODE=database、ADMIN_USERNAME;
    • 加密 Secret:ADMIN_PASSWORD、JWT_SECRET(随机 64 位十六进制);
  8. 重新上传一次 zip,让配置生效;
  9. 自定义域 添加 suohx.org,Cloudflare 自动生成 CNAME 指向 suohx-blog.pages.dev。

几点说明#

  • 不需要 R2:图片存储(R2/S3)是可选的,缓存改用 database 模式即可;不过后台上传图片需要配置对象存储,目前文章里的图片放在静态目录。
  • 队列可选:Rin 的任务队列只用于 AI 摘要等后台任务,不配置不影响写文章和评论。
  • 管理员账号:Rin 用环境变量里的用户名密码登录,首次登录自动创建管理员。

结果#

部署完成后访问首页就能看到博客,右上角登录后即可写文章。这篇文章就是通过后台 API 发布的。

部署过程:用 Cloudflare 免费搭建带后台的博客
https://blog.suohx.org/posts/deploy-rin-on-cloudflare/
作者
Suohx
发布于
2026-10-07
许可协议
CC BY-NC-SA 4.0