从零部署 Rin 博客:基于 Cloudflare 生态的轻量化博客搭建指南
摘要
本文介绍如何利用 Cloudflare 全家桶搭建 Rin 博客。步骤包括:准备 GitHub 与 Cloudflare 账号及域名;前端通过 Cloudflare Pages 部署并配置环境变量;后端通过配置 R2、API 令牌及 GitHub Actions 自动部署至 Workers;最后绑定域名并更新 API 地址,实现前后端对接。该方案无需服务器,适合追求轻量化与零成本的开发者。

在追求「无服务器运维」和「轻量化工具」的当下,越来越多开发者倾向于用云原生服务搭建个人博客。Rin 博客作为一款基于 Cloudflare 全家桶(Pages + Workers + D1 + R2)的开源项目,完美契合这一需求——无需服务器、无需备案,且在小额用量内完全免费。本文将带你一步步完成 Rin 博客的部署,从环境准备到前后端对接,让你快速拥有自己的轻量化博客。(以前用的,目前flare-stack-blog
)
一、先搞懂:Rin 博客是什么?适合谁?
在动手前,先明确 Rin 博客的核心特性,判断它是否符合你的需求:
1. 核心技术栈
Rin 并非传统的动态博客(如 WordPress),而是前后端分离架构:
前端:纯静态页面,部署在 Cloudflare Pages(加载速度快,自动CDN加速);
后端:依赖 Cloudflare Workers 提供 API 服务,D1 数据库存储配置/文章数据,R2 存储图片等静态资源;
整体无需自建服务器,所有服务均运行在 Cloudflare 全球节点上。
2. 适合这类人群
不想维护服务器、反感复杂运维的「懒人」;
追求轻量化、高加载速度的个人博主;
喜欢云原生技术,想体验 Cloudflare 生态的开发者;
希望「零成本」搭建博客(小额用量完全免费)。
3. 注意事项(避坑提醒)
功能待完善:Rin 目前处于初期阶段,部分功能(如多用户、高级评论)尚未支持,稳定性需持续优化;
迁移限制:仅支持从 WordPress 批量导入文章,其他博客(如 Hexo、Typecho)迁移需手动处理;
R2 激活要求:Cloudflare R2 功能需绑定支付方式(PayPal 或银行卡均可,无用量不扣费,仅用于身份验证);
安全提示:后续配置中涉及的 API 令牌、密钥等信息,切勿公开或分享,否则可能导致账户权限泄露。
二、部署前准备:提前备好这些「工具」
开始部署前,确保你已准备好以下资源,避免中途卡顿:
GitHub 账号:用于 Fork Rin 源码、配置 GitHub Actions(后端部署依赖);
Cloudflare 账号:需完成个人域名解析(将域名托管到 Cloudflare,具体解析步骤可参考 Cloudflare 官方文档);
已解析的域名:1 个用于前端(如 blog.yourdomain.com),1 个用于后端(如 api.yourdomain.com,也可复用子域名,建议分开更清晰);
耐心+细心:后端配置涉及多个密钥和环境变量,需逐一对齐,避免拼写错误或空格问题。
三、第一步:前端部署(Cloudflare Pages)
前端是用户直接访问的页面,部署核心是将 Rin 前端代码通过 Cloudflare Pages 构建并绑定域名。
1. Fork Rin 源码
打开 Rin 官方 GitHub 项目地址:openRin/Rin;
点击右上角「Fork」按钮,将源码复制到你的 GitHub 仓库(仓库名称可自定义,如
rin-blog)。
blog image
2. 配置 Cloudflare Pages
登录 Cloudflare 控制台,左侧菜单栏找到「Workers 和 Pages」,点击「创建」;

blog image 切换到「Pages」选项卡,选择「连接到 Git」;

blog image 首次使用需授权 Cloudflare 访问你的 GitHub 账号,授权后选择刚才 Fork 的 Rin 仓库,点击「开始设置」;

blog image 填写构建配置(未提及项保持默认):
构建命令:
bun b(Rin 依赖 Bun 构建工具,Cloudflare 会自动处理环境);构建输出目录:
client/dist(前端代码构建后的输出路径)。
3. 添加关键环境变量
点击「环境变量(高级)」,添加以下变量(严格避免多余空格,变量含义已标注):
环境变量名 | 取值示例 | 说明 |
|---|---|---|
NAME | 小明 | 博客左上角显示的昵称 |
DESCRIPTION | 分享技术与生活的小站 | 昵称下方的个人描述 |
AVATAR | 左上角头像的在线链接(建议用 GitHub 头像) | |
API_URL | 后端域名(先填临时值,后续会修改) | |
PAGE_SIZE | 5 | 首页文章分页数量,推荐 5-10 |
SKIP_DEPENDENCY_INSTALL | true | 跳过依赖安装(固定值,勿修改) |
UNSTABLE_PRE_BUILD | asdf install bun latest && ...(原命令) | 预构建 Bun 环境(固定值,勿修改) |
4. 完成前端部署与域名绑定
点击「保存并部署」,等待约 30 秒(Cloudflare 会自动构建并部署);
部署完成后,回到 Pages 管理页,点击「自定义域」→「设置自定义域」,输入你的前端域名(如 blog.yourdomain.com);
等待 Cloudflare 验证域名(约 1-5 分钟),状态变为「有效」后,访问该域名即可看到前端页面(此时因未对接后端,功能暂不可用)。

blog image
四、第二步:后端部署(GitHub Actions + Cloudflare 生态)
后端是 Rin 的「大脑」,负责处理 API 请求、存储文章数据和图片,核心依赖 GitHub Actions 自动部署到 Cloudflare Workers,无需手动操作 Workers 项目。
1. 配置 Cloudflare R2 存储桶(存储图片等资源)
R2 是 Cloudflare 的对象存储服务,用于存放博客中的图片、附件等资源:
进入 Cloudflare 控制台,左侧菜单栏找到「R2」,点击「新建存储桶」;
存储桶名称:自定义(如
rin-storage,后续需用到);位置提示:可选「亚太地区」(提升国内访问速度),不选也可;

blog image 
blog image
存储桶配置:
复制「S3 API」地址(如
https://abc123.r2.cloudflarestorage.com,后续需去掉路径,仅保留域名);
blog image 「公开访问」:绑定一个域名(如
storage.yourdomain.com,用于公开访问存储的资源);
blog image 「CORS 策略」:点击「添加 CORS 策略」,避免前端跨域问题(将示例中的域名替换为你的前端域名,可以跳过这一步):
纯文本
创建 R2 API 令牌:

blog image 回到存储桶「概述」页,点击「管理 R2 API 令牌」→「创建 API 令牌」;

blog image 权限选择「管理员读和写」,名称自定义;

blog image 生成后立即记录「访问密钥 ID」和「机密访问密钥」(刷新后会消失,务必保存)。

blog image
2. 获取 Cloudflare 账户 ID 与 API 令牌
后端部署需要 Cloudflare 账户权限,需创建一个具备特定权限的 API 令牌:
账户 ID:进入 Cloudflare 控制台,任意打开一个域名的管理页,页面下方即可看到「账户 ID」;

blog image 自定义 API 令牌:

blog image 点击右上角「我的个人资料」→「API 令牌」→「创建令牌」;

blog image 选择「编辑自定义令牌」→「开始使用」;

blog image 授予以下权限(后端运行必需):
Workers R2 存储:编辑;
D1:编辑;
Workers 脚本:编辑;
TTL(有效期):留空为永久生效,或设置具体时间(过期前需重新生成);

blog image 点击「继续以显示摘要」→「创建令牌」,记录生成的令牌(安全存储,勿公开)。

blog image
3. 配置 GitHub OAuth(实现登录功能)
Rin 依赖 GitHub 授权登录,需创建一个 OAuth 应用:
打开 GitHub OAuth Apps 页面,点击「New OAuth App」;
填写配置(后端域名后续绑定,先按格式填写):
Application name:自定义(如「Rin 博客登录」);
Homepage URL:你的前端域名(如
https://blog.yourdomain.com);Authorization callback URL:
https://api.yourdomain.com/user/github/callback(后端域名+固定路径);
blog image
点击「Register application」,然后点击「Generate a new client secret」(需 GitHub 二步验证);
记录「Client ID」和「Client secret」(后续配置需用到)。

blog image
4. 配置 GitHub Actions(自动部署后端)
GitHub Actions 会读取仓库中的配置,自动将后端代码部署到 Cloudflare Workers,核心是添加「变量」和「密钥」:
步骤 1:添加 Repository Variables
打开你 Fork 的 Rin 仓库(openRin/Rin 的衍生仓库),进入「Settings」→「Secrets and variables」→「Actions」→「Variables」;

blog image 点击「New repository variable」,依次添加以下变量(值来自前文配置):
变量名
取值示例
来源
FRONTEND_URL
前端域名
S3_BUCKET
rin-storage
R2 存储桶名称
S3_REGION
auto
固定值(R2 自动识别区域)
S3_ENDPOINT
R2 的 S3 API 域名(去掉路径)
S3_ACCESS_HOST
R2 公开访问域名
步骤 2:添加 Repository Secrets
切换到「Secrets」选项卡,点击「New repository secret」,依次添加以下敏感信息(Secrets 会加密存储,不显示具体值):

blog image 密钥名
取值示例
来源
CLOUDFLARE_ACCOUNT_ID
abc123def456...
Cloudflare 账户 ID
CLOUDFLARE_API_TOKEN
abc123def456...
自定义的 Cloudflare API 令牌
RIN_GITHUB_CLIENT_ID
abc123def456...
GitHub OAuth App 的 Client ID
RIN_GITHUB_CLIENT_SECRET
abc123def456...
GitHub OAuth App 的 Client Secret
JWT_SECRET
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
随机生成的加密密钥(用密码生成器创建)
S3_ACCESS_KEY_ID
abc123def456...
R2 API 令牌的「访问密钥 ID」
S3_SECRET_ACCESS_KEY
abc123def456...
R2 API 令牌的「机密访问密钥」
步骤 3:触发 GitHub Actions 部署
进入仓库的「Actions」界面,首次使用需点击「I understand my workflows, go ahead and enable them」开启功能;
找到「Deploy」 workflow,点击「Run workflow」→「Run workflow」,触发自动部署;

blog image 等待约 1 分钟,若显示绿色对勾(Success),说明后端已部署到 Cloudflare Workers;若显示红色叉号,需检查变量/密钥是否填写正确(重点排查域名、密钥拼写)。

blog image
五、第三步:前后端对接与最终验证
前端和后端分别部署完成后,需通过配置关联,让前端能调用后端 API:
1. 绑定后端域名(Cloudflare Workers)
进入 Cloudflare 控制台,「Workers 和 Pages」→ 找到名为
rin-server的 Worker(GitHub Actions 自动创建);进入
rin-server的「触发器」页面:点击「添加自定义域」,绑定你的后端域名(如
api.yourdomain.com);点击「添加路由」,依次添加两条路由(让前端请求转发到后端):
路由 1:
https://blog.yourdomain.com/sub/*(前端订阅相关请求);路由 2:
https://blog.yourdomain.com/seo/*(前端 SEO 相关请求)。
blog image
2. 更新前端 API 地址并重新部署
回到前端 Pages 项目(如
blog.yourdomain.com)的「设置」→「环境变量」;将「API_URL」的值修改为你的后端域名(如
https://api.yourdomain.com);进入「部署」页面,找到最新的部署记录,点击「重试部署」(让前端加载新的 API 地址)。
3. 验证登录与管理员权限
部署完成后,访问前端域名(如
https://blog.yourdomain.com);点击右上角「GitHub 登录」,跳转至 GitHub 授权页面,授权后返回博客;
第一个登录的用户会自动成为博客管理员,后续可通过登录后的后台管理文章、配置博客信息。
六、部署后:这些小事可以留意
问题排查:若遇到功能异常(如无法登录、文章无法加载),可先查看 Cloudflare Pages/Workers 的「日志」,或前往 Rin 官方 GitHub 仓库(openRin/Rin)的「Issues」板块搜索同类问题;
功能参考:Rin 支持的完整功能(如「 Moments 」动态、友链检测、标签自动解析等),可访问官方演示站 xeu.life 体验,或查看官方文档 docs.openrin.org;
数据备份:定期导出 D1 数据库(Cloudflare 控制台「D1」→ 选择 Rin 数据库 →「导出」),避免数据丢失;
贡献与定制:若需参与 Rin 开发或提交功能建议,可参考官方仓库的「CONTRIBUTING.md」或「CONTRIBUTING_zh_CN.md」文档,按规范提交 PR 或 Issues。
至此,你已成功搭建了一个基于 Cloudflare 生态的 Rin 博客!无需服务器运维,即可拥有一个轻量化、高速度的个人博客。后续可根据需求慢慢探索功能,享受「零成本」博客的便捷~
