从零部署 Rin 博客：基于 Cloudflare 生态的轻量化博客搭建指南

在追求「无服务器运维」和「轻量化工具」的当下，越来越多开发者倾向于用云原生服务搭建个人博客。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）。 2. 配置 Cloudflare Pages 登录 Cloudflare 控制台，左侧菜单栏找到「Workers 和 Pages」，点击「创建」；切换到「Pages」选项卡，选择「连接到 Git」；首次使用需授权 Cloudflare 访问你的 GitHub 账号，授权后选择刚才 Fork 的 Rin 仓库，点击「开始设置」；填写构建配置（未提及项保持默认）：构建命令：bun b（Rin 依赖 Bun 构建工具，Cloudflare 会自动处理环境）；构建输出目录：client/dist（前端代码构建后的输出路径）。 3. 添加关键环境变量点击「环境变量（高级）」，添加以下变量（严格避免多余空格，变量含义已标注）：环境变量名取值示例说明 NAME 小明博客左上角显示的昵称 DESCRIPTION 分享技术与生活的小站昵称下方的个人描述 AVATAR https://avatars.githubusercontent.com/xxx 左上角头像的在线链接（建议用 GitHub 头像） API_URL https://api.yourdomain.com 后端域名（先填临时值，后续会修改） 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 分钟），状态变为「有效」后，访问该域名即可看到前端页面（此时因未对接后端，功能暂不可用）。四、第二步：后端部署（GitHub Actions + Cloudflare 生态）后端是 Rin 的「大脑」，负责处理 API 请求、存储文章数据和图片，核心依赖 GitHub Actions 自动部署到 Cloudflare Workers，无需手动操作 Workers 项目。 1. 配置 Cloudflare R2 存储桶（存储图片等资源） R2 是 Cloudflare 的对象存储服务，用于存放博客中的图片、附件等资源：进入 Cloudflare 控制台，左侧菜单栏找到「R2」，点击「新建存储桶」；存储桶名称：自定义（如 rin-storage，后续需用到）；位置提示：可选「亚太地区」（提升国内访问速度），不选也可；存储桶配置：复制「S3 API」地址（如 https://abc123.r2.cloudflarestorage.com，后续需去掉路径，仅保留域名）；「公开访问」：绑定一个域名（如 storage.yourdomain.com，用于公开访问存储的资源）；「CORS 策略」：点击「添加 CORS 策略」，避免前端跨域问题（将示例中的域名替换为你的前端域名，可以跳过这一步）： [ { "AllowedOrigins": ["https://blog.yourdomain.com"], "AllowedMethods": ["GET", "DELETE", "HEAD", "POST", "PUT"], "AllowedHeaders": ["Content-Type"] } ] 创建 R2 API 令牌：回到存储桶「概述」页，点击「管理 R2 API 令牌」→「创建 API 令牌」；权限选择「管理员读和写」，名称自定义；生成后立即记录「访问密钥 ID」和「机密访问密钥」（刷新后会消失，务必保存）。 2. 获取 Cloudflare 账户 ID 与 API 令牌后端部署需要 Cloudflare 账户权限，需创建一个具备特定权限的 API 令牌：账户 ID：进入 Cloudflare 控制台，任意打开一个域名的管理页，页面下方即可看到「账户 ID」；自定义 API 令牌：点击右上角「我的个人资料」→「API 令牌」→「创建令牌」；选择「编辑自定义令牌」→「开始使用」；授予以下权限（后端运行必需）： Workers R2 存储：编辑； D1：编辑； Workers 脚本：编辑； TTL（有效期）：留空为永久生效，或设置具体时间（过期前需重新生成）；点击「继续以显示摘要」→「创建令牌」，记录生成的令牌（安全存储，勿公开）。 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（后端域名+固定路径）；点击「Register application」，然后点击「Generate a new client secret」（需 GitHub 二步验证）；记录「Client ID」和「Client secret」（后续配置需用到）。 4. 配置 GitHub Actions（自动部署后端） GitHub Actions 会读取仓库中的配置，自动将后端代码部署到 Cloudflare Workers，核心是添加「变量」和「密钥」：步骤 1：添加 Repository Variables 打开你 Fork 的 Rin 仓库（openRin/Rin 的衍生仓库），进入「Settings」→「Secrets and variables」→「Actions」→「Variables」；点击「New repository variable」，依次添加以下变量（值来自前文配置）：变量名取值示例来源 FRONTEND_URL https://blog.yourdomain.com 前端域名 S3_BUCKET rin-storage R2 存储桶名称 S3_REGION auto 固定值（R2 自动识别区域） S3_ENDPOINT https://abc123.r2.cloudflarestorage.com R2 的 S3 API 域名（去掉路径） S3_ACCESS_HOST https://storage.yourdomain.com R2 公开访问域名步骤 2：添加 Repository Secrets 切换到「Secrets」选项卡，点击「New repository secret」，依次添加以下敏感信息（Secrets 会加密存储，不显示具体值）：密钥名取值示例来源 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」，触发自动部署；等待约 1 分钟，若显示绿色对勾（Success），说明后端已部署到 Cloudflare Workers；若显示红色叉号，需检查变量/密钥是否填写正确（重点排查域名、密钥拼写）。五、第三步：前后端对接与最终验证前端和后端分别部署完成后，需通过配置关联，让前端能调用后端 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 相关请求）。 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 博客！无需服务器运维，即可拥有一个轻量化、高速度的个人博客。后续可根据需求慢慢探索功能，享受「零成本」博客的便捷～