帖前引言本博客接入Twikoo接入图片和推送功能部署,在部署最基础的评论功能之后,接下来可以配置图片上传和即时通知
一、配置入口
v1.6.9 管理后台平台,改为内嵌在评论组件里
二、图片上传配置
前置条件(后端侧)
Worker 已绑定:
- R2 存储桶
twikoo(binding 名为R2) - 环境变量
R2_PUBLIC_URL= 你自己 R2 桶的自定义域名
R2 桶需要在 Dashboard 里给桶配自定义域名(R2 → 桶 → Settings → Custom Domains → img.<你的域名>),这样图片才能通过自己的域名访问
R2_PUBLIC_URL说明:它定义在wrangler.toml的[vars]段,wrangler deploy自动上传为 Worker 环境变量。Worker 上传图片时用它拼地址${R2_PUBLIC_URL}/${年}/${月}/${文件名},必须指向自己 R2 桶的域名。如果按照模板默认项目作者的值 ,将会404。修改方式:vim wrangler.toml→npx wrangler deploy --minify
前端判断(关键坑)
报错:上传图片时提示「博主未配置图床服务」
原因:v1.6.9 前端的 parseAndUploadPhoto 逻辑是:
1const a = this.config.IMAGE_CDN;2a ? uploadPhotoToThirdParty(...) // 有 IMAGE_CDN → 调 Worker 的 UPLOAD_IMAGE → 走 R23 : uploadFailed("博主未配置图床服务") // IMAGE_CDN 为空 → 直接报错,根本不发请求也就是说:Worker 的 R2 上传接口早就就绪,但前端在发请求前先检查管理后台的 IMAGE_CDN,为空就直接拦截报「博主未配置图床服务」
解决:管理后台把 IMAGE_CDN 填任意非空值(比如域名)。R2 上传不读 IMAGE_CDN 的内容,它只看 R2 绑定在不在,所以填什么值都行,纯粹是骗过前端判断
其他相关配置
SHOW_IMAGE:评论中是否渲染图片,必须为true(默认就是,别改成 false)。
验证
管理后台填好 IMAGE_CDN 后,重新上传图片,评论里的图片地址应以 自己配置的域名/... 开头,就能正常显示了
三、即时消息通知配置
配置项
即时通知由后端 noticePushoo 触发,需要同时设置两个配置:
| 配置项 | 含义 | 示例 |
|---|---|---|
PUSHOO_CHANNEL | 推送平台名 | serverchan |
PUSHOO_TOKEN | 该平台的 token/key | Server酱的 SendKey |
平台对比与推荐
但是如何选择呢?这里有可用平台的对比与推荐:
| 平台 | 推送到哪 | 国内体验 | 说明 |
|---|---|---|---|
| Server酱(serverchan) ⭐ | 微信 | ✅ 推荐 | 注册即用、免费、中文资料最多(sct.ftqq.com 拿 SendKey) |
| PushPlus(pushplus) | 微信(公众号模板消息) | ✅ 备选 | 免费档够用,国内稳定 |
| 企业微信(wecom) | 企业微信群机器人 | ✅ 很稳 | 免费无限量,需在企业微信里建群配置 |
| dingtalk | 钉钉群机器人 | ✅ 可用 | 如果你用钉钉 |
| bark | iPhone 推送 | 需苹果设备 | 只在 iPhone 上用 |
| telegram | Telegram | ⚠️ 需代理 | Worker 在海外能发出,但你手机收消息要开代理 |
| qmsg | QQ 消息 | 可用 | Qmsg 酱 |
推荐:Server酱(serverchan) —— 微信收通知最方便,注册快、免费、教程多;不想依赖其免费额度变化的话,企业微信群机器人(wecom) 是最稳的免费替代
配置步骤(以 Server酱 为例)
- 打开 sct.ftqq.com,用 GitHub 登录,创建密钥,得到 SendKey(形如
SCTxxx) - 进入 Twikoo 管理后台 → 找到
PUSHOO_CHANNEL,填serverchan - 找到
PUSHOO_TOKEN,填 SendKey - 保存。之后每有人评论,你的微信都会收到推送
注意:配置好Server酱之后可以从网页中测试发送,测试没问题再调试自己的服务;同时需注意,邮件通知(SMTP)和即时推送是两回事,本 CF Worker 部署里
nodemailer不兼容,邮件要走 SendGrid/MailChannels 的 HTTPS API;如果你主要用即时推送,可以不管邮件。
部分信息可能已经过时