跳到主要内容

OneBlog轻量自建评论

最后更新于:

image-20260801225536.avif

OneBlog轻量自建评论

问题

将Twikoo评论替换为轻量自建评论

1目前的评论有点重感觉,能不能依赖eo eo的Makers的kv/blob,eo边缘函数,七牛云对象存储,我的博客后台等,自建一个轻量的博客评论,只要满足能邮箱/钉钉接收消息,评论人工审核,后台删除、回复评论等等 常用的基本功能就好,不然目前的twikoo评论出现在首页,总感觉要刷新一会儿儿才能完全显示最新评论,很不友好。请先规划方案是否可行。

回答

结论:可行,而且你仓库里已经有大半后端雏形。 不必从零搭一套 Twikoo,更现实的是在 OneBlog Admin(EO Pages Functions + KV)上做一套轻量评论,替换首页/文章对 Twikoo SDK 的依赖。


现状与痛点

现状问题
Twikoo 跑在独立 EO(twikoo.onedayxyy.cn,KV+Blob)首页「最新评论」依赖 twikoo.getRecentComments() + CDN SDK
主题懒加载(首页约 200ms~移动端 2.5s)+ session 缓存首屏要等 SDK 就绪,体感「刷一会儿才出来」
审核/通知在 Twikoo 面板和 OneBlog 后台割裂
Admin 里已有 ~900 行 Waline 风格 KV 评论代码路由被硬关掉,且 edgeone.json 未绑 WALINE_KV

根因不只是「Twikoo 重」,而是:首页为了几条评论去拉整套评论 SDK


方案是否匹配你点名的组件

组件建议用法可行性
EO Makers + 边缘函数评论 API 挂在现有 oneblog-admin(或独立小项目)✅ 已有部署链
EO KV评论正文、按页索引、recent 索引、审核状态✅ 已有 comment:{id} / 索引设计
EO Blob可选;小评论用 KV 即可,Blob 留给导出/附件⚠️ 非必须
七牛评论配图/头像;不适合当主库(列表/审核/recent 要扫对象太贵)✅ 图床复用即可
博客后台审核、删除、回复、通知配置✅ JWT + 菜单已有,缺真正 CRUD UI
邮箱 / 钉钉新评论通知;EO 上勿用 QQ SMTP,用 Resend/SendGrid 或钉钉机器人✅ 代码/运维经验都有

推荐架构(轻量自建)

 1访客博客页 / 首页
 2  └─ 极薄 comment-widget.js(fetch,无 Twikoo SDK)
 3 4 5OneBlog Admin EO Functions
 6  POST/GET /api/comments/*     公开:提交、按 path 列表、recent
 7  /api/admin/comments/*        鉴权:审核、删除、回复、设置
 8 9         ├─ COMMENT_KV(或复用/扩展 ADMIN_KV 独立前缀)
10         │    comment:{id}
11         │    index:page:{path}
12         │    index:recent
13         │    index:pending
1415         ├─ 钉钉 Webhook(关键词「评论」)
16         ├─ 邮件(Resend / SendGrid)
17         └─ 七牛(可选上传,URL 写进评论字段)

数据放 KV,不放七牛主存。 七牛只当附件;Blob 仅在你要「整站评论 JSON 导出备份」时用。


功能范围(够用即可)

访客端

  • 昵称 / 邮箱 / 网站 / 内容(Markdown 精简)
  • 按文章 path 列表 + 楼中楼回复
  • 首页 recent:一个轻量 GET /api/comments/recent?limit=5(可缓存 30~60s)
  • 提交后状态 pending,通过后才公开展示

管理端(OneBlog)

  • 待审列表、通过/拒绝、删除、管理员回复
  • 通知:钉钉必开,邮件可选
  • 基础防刷:IP QPS、同源 CORS、蜜罐字段、可选简单验证码

刻意不做(控制体量)

  • 点赞、表情反应、OAuth 登录、完整 Waline/Twikoo 兼容层
  • 把评论写进 Git/Hugo(会拖慢发布)

三条落地路径

A. 复活并裁剪现有 Waline-KV(推荐)

  • 打开 waline/ 404 闸门,绑独立 KV,或改成 /api/comments 自有协议
  • 主题换成自写小 widget,不再加载 Twikoo
  • 首页 recent 直接打 Admin API

优点: 审核/邮件/索引代码已在 [[default]].js
缺点: 要清死代码、对齐 API、补 Admin Vue 页

B. 独立 EO 小项目 oneblog-comment

  • 单独 Makers 部署 + 自己的 KV
  • Admin 只做管理前端代理

优点: 和后台解耦、故障隔离
缺点: 多一套部署与鉴权

C. 继续 Twikoo,只治首页

  • 用服务端/边缘代理缓存 getRecentComments,或关首页评论卡

优点: 改动小
缺点: 不解决「重 + 审核割裂」,只是缓解

你要的是自建轻量评论 → 选 A;若怕碰大文件 [[default]].js选 B


关键风险

  1. KV 体积与列举:评论多了要靠索引键,不能 list 全库;现有 Waline 代码已按此思路写。
  2. EO 出站邮件:继续避开 QQ SMTP;钉钉作主通知更稳。
  3. 迁移:Twikoo 数据在独立 EO,需导出 JSON 再导入 KV(一次性脚本)。
  4. CORS / 域名:博客域调 oneblogadmin 要配好 CORS 与鉴权边界(公开读/写 vs Admin JWT)。
  5. [[default]].js 过大:A 路径建议把评论抽到 functions/lib/comments.js,避免继续堆巨型文件。

工作量粗估

阶段内容量级
1KV 绑定 + 公开/管理 API + 审核状态机2~4 天
2钉钉 + 邮件通知0.5~1 天
3主题 widget + 替换 recent-comments1~2 天
4Admin 评论管理页1~2 天
5Twikoo 数据迁移 + 灰度切换1 天
可选七牛评论配图0.5 天

整体大约 一周量级(熟悉仓库的话可更短),比维护完整 Twikoo 更可控。


建议决策

  • 可行,建议做。 基础设施(EO Functions、KV 模式、邮件 helper、七牛、钉钉运维、后台 JWT)都已具备。
  • 主存用 KV,七牛只做附件,Blob 可选备份。
  • 优先路径 A:裁剪复活现有评论后端 + 极薄前端,专门解决首页「等 SDK」问题。
  • 灰度:先 provider = 'oneblog' 双轨,首页 recent 先切自建,文章页确认稳定后再下 Twikoo。

如果你认可这个方向,下一步可以细化成:API 字段表、KV key 设计、和 Twikoo 字段映射,以及 Admin / 主题改动的文件清单(仍先设计、不动代码)。

开弄

轻量自建评论已落地,首页「最新评论」不再依赖 Twikoo SDK。

🟢已完成

后端(OneBlog Admin EO)

  • 新增 oneblog-admin/functions/lib/comments.js:公开提交/列表/recent + 后台审核/删除/回复/设置
  • 路由已挂到 /api/comments/*edgeone.json 增加 COMMENT_KV(未绑定时回退 ADMIN_KVcmt: 前缀)
  • 支持钉钉 Webhook、Resend/SendGrid 邮件、人工审核、IP 限流、蜜罐字段、CORS

主题前端

  • oneblog-comment.js + 样式:文章页轻量评论框
  • recent-comments.jsprovider=oneblog 时直接 fetch API,秒开、无 Twikoo 等待
  • services.toml 已切到 provider = 'oneblog'

后台

  • 「内容 → 评论」改为完整审核台(通过/待审/垃圾/回复/删除 + 通知设置)
  • Admin 前端已重新 build

🟢你需要做的

  1. EO 控制台:给 oneblog-admin 绑定 KV 命名空间 COMMENT_KV(推荐独立库;不绑也能先靠 ADMIN_KV 跑)
  2. 推送/部署:合并后 CNB 会部署 Admin;Hugo 站点构建后前台才会切到新评论
  3. 后台配置:打开评论页 → 填站点 URL、钉钉 Webhook(关键词「评论」)、可选邮件 → 点测试
  4. 验证:发一条测试评论 → 待审核 → 通过 → 看首页「最新评论」是否立刻出来

切回 Twikoo:主题配置里把 comment.provider 改回 twikoo 即可。旧 Twikoo 数据不会自动迁移;需要的话可以再加导入脚本。


🟢自己配置下即可

🟢体验

博客首页抓心时间的确变短了哈哈哈,nice。😘😘😘

解决抓取评论者qq头像失败问题

🟢问题

这个评论目前好像没获取评论者邮箱头像哦,请解决

🟢回答

已修好并推送。

原因: 服务端邮箱 MD5 算错了,Cravatar 一直落到默认灰头像;QQ 邮箱也没走 QQ 头像接口。

改动:

  1. 换成正确的 MD5
  2. 数字@qq.com / 昵称为 QQ 号 → 用 q1.qlogo.cn
  3. 其他邮箱 → WeAvatar
  4. 图片加 referrerpolicy="no-referrer",减少 QQ 头像防盗链失败

Admin 部署完成后刷新留言区即可;2675263825@qq.com 这类应直接显示 QQ 头像。

🟢效果

增加批量删除功能

🟢问题

我想批量删除这些待审核的垃圾评论,请增加这个功能。

🟢回答

已加上并推送。Admin 部署后刷新评论页即可用:

  • 表格多选
  • 批量删除 / 批量通过 / 批量标垃圾
  • 待审核页还有 清空当前待审核(一键清掉这批垃圾)

勾选后点「批量删除」,或直接用「清空当前待审核」。

🟢效果

最新文章