For international audience: English Documentation
一个运行在 Cloudflare Workers 上的 Waline 评论系统后端实现,使用 D1 (SQLite) 作为数据存储。实现了 Waline 的绝大多数功能。
- 快速
- 安全
- Markdown 语法支持
- 轻量易用
- 免费部署
- 完全兼容
@waline/client前端和@waline/admin管理面板
| Waline on Worker | |
|---|---|
| 运行时 | Cloudflare Workers |
| 数据库 | Cloudflare D1 (SQLite) |
| 框架 | Hono |
| 语言 | TypeScript |
- 评论 CRUD(线程化、计数、最近评论)
- 文章浏览量统计
- 评论反应(赞踩)
- 置顶评论
- 用户注册 / 登录
- 评论管理(审核、删除)
- 社交登录 + 账号绑定(社交账号可关联至已有密码账号)
- 两步验证 (2FA / TOTP)
- Markdown 渲染 + XSS 防护
- Gravatar 头像
- UA 解析(浏览器 / 操作系统)
- RSS 订阅
- 数据导入导出(兼容 @waline/admin 迁移面板)
- Akismet 反垃圾评论(四档:关 / Akismet / LLM / Mix)
- LLM 评论审查(内嵌 waline-plugin-llm-reviewer-next 设计,支持自然语言安全策略)
- 评论默认状态控制(匿名 / 登录用户独立设置)
- 管理面板(@waline/admin CDN + Worker 设置页)
- IP 频率限制 (IPQPS) 可直接配置 Cloudflare 安全规则实现
- 附加管理面板,能够设置前端默认版本,控制评论默认状态,配置反垃圾策略等功能
- 邮件通知(SMTP)
- Webhook 通知
所有密钥均遵循同一规则:环境变量 /
wrangler secret的优先级始终高于管理面板。面板配置适合快速上手;需要锁定时在服务端设置 Secret 即可,服务端值无条件优先。
在 Worker 设置页中选择反垃圾模式:
| 模式 | 说明 |
|---|---|
| 关 | 不启用任何检测 |
| Akismet | 仅使用 Akismet 服务 |
| LLM | 仅使用 LLM 大模型审查 |
| Mix | Akismet 与 LLM 并行,任一判定为垃圾则标记 |
Akismet 密钥放置方案
Akismet API Key 支持两种放置方式,环境变量优先级始终高于前端配置:
-
环境变量(生产推荐) — 作为 Worker Secret 存储,不会暴露给前端:
wrangler secret put AKISMET_KEY
-
管理面板 — 在 Worker 设置页(
/ui/worker-setting)直接填写,加密存储于 D1。仅在未设置AKISMET_KEY环境变量时生效。
两种方案可按需选用,无需修改代码。
使用 Overture 部署入口 可以直接部署,无需本地安装 Node.js 或 Wrangler。选择本仓库的发布版本后,Overture 会创建或复用 D1 数据库、写入 schema、部署 Worker,并在首次部署时生成 JWT_SECRET。自定义域名是可选项:留空会使用 Worker 的 workers.dev 地址;填写时才会绑定该域名。
Overture 可提供以下 Cloudflare 认证方式:
- OAuth:在所用 Overture 实例已启用并配置 OAuth 时,可在 Cloudflare 授权 Workers Scripts、D1 以及可选自定义域名所需的路由与区域权限。
- Account API Token:使用 Overture 预填权限模板创建并粘贴 API Token;该 Token 只用于本次部署,不会作为应用凭据保存。
普通更新保留评论数据和已有 JWT_SECRET。完整重建也保留 D1 数据,但会生成新的 JWT_SECRET,使现有登录会话失效。更新时将 CORS 源地址留空会保留当前 SECURE_DOMAINS;如需清空它,请在 Cloudflare Dashboard 的 Worker 变量中修改。为了保留填写自定义域名的能力,OAuth 和 API Token 权限模板仍会列出路由与区域权限,即使本次留空域名。部署前请阅读并接受包内提供的中英文条款,其中说明了账户费用、凭证与数据责任。
git clone https://github.com/lsy-404/Waline_On_Worker.git
cd Waline_On_Worker
pnpm install
# 创建 D1 数据库并编辑 wrangler.toml
pnpm exec wrangler d1 create waline-db
pnpm run db:init
pnpm exec wrangler secret put JWT_SECRET
pnpm run deploy详细部署步骤和配置说明请参阅文档。
更新日志
- 修复:OAuth 社交账号绑定 — 已登录用户通过社交方式登录时,现在会正确将社交账号关联至当前密码账号,而非创建新账号。若社交 ID 已绑定其他账号,将返回明确的
oauth_already_bound错误。 - Akismet 反垃圾评论 — 原生支持 Akismet,与 LLM 审查并列。管理员在设置页选择四档模式(关 / Akismet / LLM / Mix)。Akismet 密钥可通过
wrangler secret(服务端,优先)或管理面板(存储于 D1)两种方式配置。 - 统一反垃圾流水线 — 内部重构,所有反垃圾检测路径合并至单一
runSpamReview()函数,消除冗余 DB 查询。 - 设置批量读取 — 评论提交路径中的设置查询统一为单次
getSettings()批量调用,不再多次串行查询。