很多静态博客在接入评论区时,通常会选择 Giscus 或 Disqus 这一类第三方 iframe 嵌入方案。但实际用起来,痛点也非常明显:
- iframe 跨域白屏:国内网络经常加载不出外部脚本,正文底下留下一大块尴尬的空白;
- 视觉风格互不相认:iframe 里的字体、圆角、暗黑配色很难跟自己的博客主题完美融合;
- 数据不可控与垃圾广告:一旦第三方服务调整接口互动全挂,还容易被自动化黑产脚本灌水。
RustPress 选择了另一条路:内置 GitHub Issues 原生评论与点赞系统(rustpress-comments)。直接用原生 DOM 渲染在正文底部,零 iframe 损耗,自适应主题配色,而且数据完完全全沉淀在你自己指定的 GitHub 仓库里。
一、核心特色
- 原生 DOM 深度融合:不再套用任何 iframe,直接继承当前主题(
light/default)的排版样式与字体; - 点赞与评论合二为一:不仅支持 Markdown 评论,还支持读者一键点赞 👍(直接同步为 GitHub Issue 的
+1反应); - 数据资产完全私有:所有评论和点赞直接作为一条条 Issue 和 Comment 存放在你的公开 GitHub 仓库中,谁也拿不走;
- Issue 按需自动创建:某篇文章首次有人点赞或留言时,系统会自动以文章标题和 URL 创建对应的 Issue,不需要站长提前手动创建;
- 未登录平滑降级:读者即便不登录 GitHub,也能正常阅读已有评论并查看点赞计数。
二、三行极简全局配置
与传统方案需要去查一堆晦涩难懂的 GraphQL Node ID(如 repo_id、category_id)不同,RustPress 的配置只有三行:
打开博客根目录下的 config.toml,配置 [comments] 小节:
# ==============================================================================
# 评论与点赞系统配置 [comments]
# ==============================================================================
[comments]
enabled = true # 开启全站评论与点赞
repo = "rixingyike/yishulun.com_discus" # 存放评论 Issue 的 GitHub 公开仓库 (用户名/仓库名)
github_client_id = "0cdfd84658051b0f7de6" # GitHub OAuth App 的 Client ID
enabled:总开关,设为true开启;repo:专门用来存评论的公开 GitHub 仓库;github_client_id:GitHub OAuth App 的 Client ID。读者点击登录发表评论时使用;留空则以只读模式展示。
三、准备 GitHub 仓库与 OAuth App
1. 新建一个评论专用公开仓库
- 登录 GitHub,点击 New repository;
- 名字任意(如
yishulun.com_discus),必须选 Public(公开); - 确保仓库开启了 Issues 功能(默认开启)。
2. 创建 GitHub OAuth App
- 打开 GitHub -> Settings -> Developer settings -> OAuth Apps;
- 点击 New OAuth App 填写:
- Application name:应用名称(如
艺述论评论插件); - Homepage URL:应用首页地址(如
https://yishulun.com); - Authorization callback URL:先填应用首页,等会儿部署完 Cloudflare Worker 后换成 Worker 的
/callback地址;
- Application name:应用名称(如
- 点击 Register application,拿到 Client ID 和 Client Secret;
- 把 Client ID 填入
config.toml的github_client_id中。
四、部署 Cloudflare Worker 免服务器 OAuth 代理
为什么需要这个 Worker?
在标准的 OAuth 协议中,前端拿临时 code 换取 access_token 时必须提交 Client Secret。纯静态博客没有后端,我们绝对不能把私密的 Secret 写死在前端 JS 里。
RustPress 官方提供了一个开箱即用的 rustpress-comments-oauth-worker.js,部署在免费的 Cloudflare Workers 上,零服务器成本,安全加密保管密钥:
读者点击登录 ──> GitHub 授权 ──> Cloudflare Worker (安全换取 Token) ──> 跳回文章页
部署 3 步走:
步骤 1:在 Cloudflare 创建 Worker
- 登录 Cloudflare 控制台;
- 进入 Workers 和 Pages -> 点击 创建 Worker,起个名字(如
rustpress-comments-oauth),点击 部署; - 点击 编辑代码,把 RustPress 仓库中的
rustpress-comments-oauth-worker.js代码整段粘贴进去,点击 保存并部署; - 记下 Worker 分配的域名(例如
https://rustpress-comments-oauth.your-subdomain.workers.dev)。
步骤 2:配置 3 个加密环境变量
进入该 Worker 页面 -> 设置 (Settings) -> 变量 (Variables),添加以下 3 个变量:
GITHUB_CLIENT_ID- 内容示例:
0cdfd84658051b0f7de6 - 是否加密:否
- 说明:对应你的 GitHub Client ID。
- 内容示例:
GITHUB_CLIENT_SECRET- 内容示例:
48a2... - 是否加密:是(必须点击 Encrypt)
- 说明:对应你的 GitHub Client Secret。
- 内容示例:
BLOG_DOMAIN- 内容示例:
https://yishulun.com - 是否加密:否
- 说明:你的独立博客域名(用于防范跨站恶意重定向)。
- 内容示例:
步骤 3:回填 GitHub OAuth 回调地址
回到 GitHub 的 OAuth App 设置页,把 Authorization callback URL 改为:
https://rustpress-comments-oauth.your-subdomain.workers.dev/callback
到这里,整套评论鉴权闭环就搭建完毕了。
依托 GitHub Issues 构建评论区,让数据资产完全归自己掌控,并天然隔绝了网络上的自动化垃圾群发机器人;有人觉得,使用 GitHub 账号登录,抬高了非开发者访客的互动门槛。这要看你自己的取舍,在技术博客圈子中,这一门槛恰恰是保证高质量技术探讨的过滤器。读者并不是越多越好,读者和朋友一样,贵精不贵多。
五、单篇文章评论独立开关
如果你希望某篇特定文章(或者个人简介页、隐私政策)单独关闭评论区,只要在文章头部的 Frontmatter 里加上 comments: false:
---
title: "作者简介与免责声明"
layout: about
comments: false
---
主题模板检测到 page.comments == false 时,会自动隐藏底部的评论输入框与点赞组件。
下一篇,我们来看专栏与分类法路径配置,掌握如何打造短小精炼的优雅的博客 URL。