mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
3840 字
10 分钟
Twikoo 评论系统使用指南

Twikoo 是一款轻量级的开源评论系统,支持 Markdown、表情包、图片上传、邮件通知等功能。本文基于 Twikoo 管理面板源码(TkAdminConfig.vue)及 i18n 国际化文件,整理了所有配置项的实际含义和用法。


一、Twikoo 简介#

什么是 Twikoo#

Twikoo 是一款轻量级开源评论系统,基于 Node.js 开发,支持 Markdown、代码高亮、表情包、图片上传(支持多种图床)、邮件/IM 通知等功能。

Twikoo vs 其他评论系统#

特性TwikooValineArtalk
数据库MongoDBLeanCloud (免费版有限制)MySQL/SQLite
部署难度简单简单较复杂
邮件通知支持(配置 SMTP)支持(需 LeanCloud)支持
管理面板有,功能完善
免费额度腾讯云/Vercel 免费LeanCloud 国际版有限制自建无限制
反垃圾Akismet / 腾讯云Akismet无内置
图床支持多种图床支持

Twikoo 的优势#

  • 部署灵活:支持 Vercel、腾讯云、Railway、Docker 等多种部署方式
  • 配置丰富:7 大配置模块,覆盖评论系统的方方面面
  • 界面美观:默认主题简洁,支持自定义背景
  • 隐私友好:可选显示 UA、IP 属地等信息
  • 迁移方便:支持从 Artalk、Disqus、Valine 导入评论

二、进入管理面板#

普通入口#

在博客页面任意位置快速点击三次,会弹出管理面板登录框。

隐藏入口#

如果开启了「隐藏管理面板」(HIDE_ADMIN_CRYPT),常规点击不会触发登录框,需要访问:

https://你的Vercel地址/?twikoo=你的暗号

登录方式#

  • 腾讯云环境:需要使用私钥文件登录(私钥在腾讯云云开发控制台 → 环境 → 权限设置中可获取)
  • Vercel 环境:直接输入 TWIKOO_SECRET 环境变量的值

忘记密码怎么办?#

  • 腾讯云:前往云开发控制台,删除 config 记录,重新设置。
  • Vercel:前往 MongoDB Atlas,编辑 configs 集合,删除 ADMIN_PASS 字段,然后去管理面板重新设置密码。

三、快速上手#

方式一:使用公共版本(无需部署)#

如果不想自己部署,可以直接使用公共的 Twikoo 服务:

// 在博客中引入 Twikoo
<script src="https://cdn.jsdelivr.net/npm/twikoo@1.6.41/twikoo.all.min.js"></script>
// 初始化
<div id="twikoo"></div>
<script>
tk.init({
envId: 'https://twikoo.vercel.app', // 公共版本地址
el: '#twikoo',
});
</script>

公共版本功能完整,但建议生产环境还是自己部署。

方式二:Vercel 部署(推荐)#

  1. 申请 MongoDB Atlas,创建免费集群,获取连接字符串
  2. 在vercel中登陆账号后进行一键部署:

https://vercel.com/import/project?template=https://github.com/twikoojs/twikoo/tree/main/src/server/vercel-min

  1. 部署后,在 Vercel 的twikoo环境变量中添加 MONGODB_URI
  2. 进入 Settings → Deployment Protection,设置 Vercel Authentication 为 Disabled(关键步骤,否则邮件无法发送)
  3. 选择Redeploy(重新部署)
  4. 访问正确的域名地址,确认显示「Twikoo 云函数运行正常」

方式三:腾讯云部署#

适合国内访问,腾讯云有免费额度:

  1. 开通腾讯云开发 CloudBase
  2. 创建云函数环境
  3. 下载 Twikoo 源码,上传到云函数
  4. 配置环境变量 MONGODB_URITWIKOO_SECRET

四、管理面板配置项详解#

管理面板共分为 7 个分类。以下所有配置项均在管理面板中填写(非环境变量)。

4.1 通用设置#

配置项说明示例值
SITE_NAME网站名称虹墨空间站
SITE_URL网站地址https://www.imaegoo.com
CORS_ALLOW_ORIGINCORS 安全域名。格式:https://blog.example.com;多域名用 , 分隔。如不了解 CORS,请留空https://www.imaegoo.com
BLOGGER_NICK博主的昵称iMaeGoo
BLOGGER_EMAIL博主的邮箱地址,用于邮件通知、博主标识12345@qq.com
COMMENT_PAGE_SIZE评论列表分页大小8
MASTER_TAG博主标识自定义文字,默认为”博主”站长
COMMENT_BG_IMG评论框自定义背景图片 URL 地址(可选)
GRAVATAR_CDN自定义头像 CDN 地址sdn.geekzu.org
DEFAULT_GRAVATAR默认的头像显示样式mp
COMMENT_PLACEHOLDER评论框提示信息,可用 <br> 换行(可选)
SHOW_ORDER评论排序下拉框true
SHOW_DISLIKE评论点踩按钮true
DISPLAYED_FIELDS界面上展示的输入框nick,mail,link
REQUIRED_FIELDS评论必填信息。nick,mail,link=全必填,none=全选填nick,mail
HIDE_ADMIN_CRYPT隐藏管理面板入口暗号。留空则不隐藏admin
QQ_API_KEYQQ 昵称 API 密钥,用于获取 QQ 昵称(参考下文链接)

QQ_API_KEY 获取地址:https://api.nsuuu.com/admin/key

4.2 插件设置#

图床服务(IMAGE_SERVICE)#

配置项值图床名称备注
(留空)禁用图片上传
qcloud腾讯云腾讯云环境自带
7bu去不图床无免费套餐
seeS.EE 图床有免费套餐
lskypro兰空图床需配合 IMAGE_CDN_URL
piclistPicList需配合 IMAGE_CDN_URL
easyimageEasyImage 2.0需配合 IMAGE_CDN_URL
cheveretoChevereto需配合 IMAGE_CDN_URL
s3S3/R2/MinIO需配置下方 S3 相关项

自定义图床配置(IMAGE_SERVICE 设为 lskypro / piclist / easyimage / s3 时需要填写)#

配置项说明
IMAGE_CDN_URL图床的 URL
IMAGE_CDN_TOKEN图床 token(qcloud 图床无需设置)

S3 对象存储配置(IMAGE_SERVICE 设为 s3 时显示)#

配置项说明示例值
S3_REGIONS3 存储区域。使用兼容 S3 的服务(如 Cloudflare R2、MinIO)时可填任意值us-east-1
S3_BUCKETS3 存储桶名称my-bucket
S3_ACCESS_KEY_IDAccess Key ID(必填)
S3_SECRET_ACCESS_KEYSecret Access Key(必填)
S3_ENDPOINTS3 自定义 Endpoint,使用 Cloudflare R2、MinIO 等兼容 S3 的服务时填写https://xxx.r2.cloudflarestorage.com
S3_CDN_URLS3 图片访问域名(CDN 域名)。留空则使用默认 S3/Endpoint URL(可选)
S3_PATH_PREFIXS3 图片存储路径前缀。留空则存储在根目录images/twikoo

NSFW 图片鉴黄#

配置项说明示例值
NSFW_API_URLNSFW 图片检测 API 地址。免费服务:nsfw.xnet.rennsfw.qixz.cn(可选)
NSFW_THRESHOLDNSFW 检测阈值(0-1),当检测分数高于此值时拒绝上传0.5

其他插件配置#

配置项说明默认值
SHOW_EMOTION启用插入表情功能true
EMOTION_CDN表情 CDN,英文逗号分隔。默认为:https://owo.imaegoo.com/owo.json(可选)
SHOW_IMAGE启用插入图片功能true
HIGHLIGHT启用代码高亮功能。如果主题和代码高亮有冲突,请设为 falsetrue
HIGHLIGHT_THEME代码高亮主题。如主题有冲突,请设为 nonenone
HIGHLIGHT_PLUGIN代码高亮插件。设为 none 则不添加任何插件none
LIGHTBOX使用简易图片点击放大效果false

代码高亮主题可选值defaultcoydarkfunkyokaidiasolarizedlighttomorrowtwilight。访问 https://prmatchr.com 可预览主题效果。

代码高亮插件可选值showLanguage(展示代码语言)、copyButton(展示代码拷贝按钮)。可同时设置多个。

4.3 隐私设置#

配置项说明默认值
SHOW_UA是否显示用户系统和浏览器true
SHOW_REGION是否显示用户 IP 属地到省(可能不准确,不支持 IPv6)false

4.4 反垃圾设置#

配置项说明示例值
AKISMET_KEYAkismet 反垃圾评论 API Key。设为 MANUAL_REVIEW 开启人工审核,留空不使用反垃圾8651783edxxx
QCLOUD_SECRET_ID腾讯云 SecretId(付费,内容安全)。同时设置腾讯云和 Akismet 时,只有腾讯云会生效(必填)
QCLOUD_SECRET_KEY腾讯云 SecretKey(必填)
QCLOUD_CMS_BIZTYPE腾讯云内容安全 Biztype 名称,用于垃圾评论策略。可以自定义垃圾拦截规则(可选)
LIMIT_PER_MINUTE单个 IP 发言频率限制(条/10分钟),0 为无限制5
LIMIT_PER_MINUTE_ALL全站发言频率限制(条/10分钟),0 为无限制5
LIMIT_LENGTH评论长度限制,0 为无限制100
FORBIDDEN_WORDS违禁词配置,包含违禁词的内容会直接标记为垃圾评论。英文逗号分隔快递,空包
BLOCKED_WORDS屏蔽词配置,包含屏蔽词的内容会直接评论失败。英文逗号分隔快递,空包
NOTIFY_SPAM垃圾评论是否发送通知false

Akismet 注册地址https://akismet.com

人工审核设置:将 AKISMET_KEY 设置为 MANUAL_REVIEW 即可开启人工审核模式。

4.5 验证码设置#

配置项说明
CAPTCHA_PROVIDER人机验证码提供商。可选:无、Cloudflare Turnstile、极验 Geetest

Cloudflare Turnstile 配置#

配置项说明示例值
TURNSTILE_SITE_KEYTurnstile 验证码的站点密钥0x4AAAAAAAPLTtpBr_xxx
TURNSTILE_SECRET_KEYTurnstile 验证码的密钥0x4AAAAAAAPLTmBm6gxxx

Turnstile 申请地址https://dash.cloudflare.com/?to=/:account/turnstile

极验 Geetest 配置#

配置项说明示例值
GEETEST_CAPTCHA_ID极验验证码的 Captcha ID(必填)
GEETEST_CAPTCHA_KEY极验验证码的 Captcha Key(必填)

极验 Geetest 申请地址https://console.geetest.com/sensbot/management

4.6 即时通知设置(IM)#

配置项说明
PUSHOO_CHANNEL即时消息推送平台名称
PUSHOO_TOKEN即时消息推送 token
SC_MAIL_NOTIFY是否同时通过 IM 和邮件 2 种方式通知博主。默认只通过 IM 通知

IM 通知渠道qmsgserverchanpushpluspushplushxtripdingtalkwecombarkgocqhttpatripushdeerigottelegramfeishu

Pushoo 配置参考https://pushoo.js.org

4.7 邮件通知设置#

配置项说明示例值
SENDER_EMAIL邮件通知邮箱地址。必须和 SMTP_USER 保持一致blog@imaegoo.com
SENDER_NAME邮件通知标题虹墨空间站评论提醒
SMTP_SERVICE邮件通知邮箱服务商QQ
SMTP_HOST自定义 SMTP 服务器地址。如已配置 SMTP_SERVICE,此项请留空(可选)
SMTP_PORT自定义 SMTP 端口。如已配置 SMTP_SERVICE,此项请留空465
SMTP_SECURE是否使用 TLS。请填写 truefalsetrue
SMTP_USER邮件通知邮箱用户名blog@imaegoo.com
SMTP_PASS邮件通知邮箱密码。QQ、163 邮箱请填写授权码(必填)
MAIL_SUBJECT访客收到回复的邮件标题,留空则使用默认主题(可选)
MAIL_SUBJECT_ADMIN博主收到新评论通知的邮件标题,留空则使用默认主题(可选)
MAIL_TEMPLATE访客收到回复的邮件模板,留空则使用默认模板(可选)
MAIL_TEMPLATE_ADMIN博主收到新评论通知的邮件模板,留空则使用默认模板(可选)

支持的 SMTP 服务商1261631und1AOLDebugMailDynectEmailFastMailGandiMailGmailGodaddyHotmailMaildevMailgunMailjetMandrillNaverOutlook365PostmarkQQQQexSESSendCloudSendGridSendPulseSendinBlueSparkpostYahooYandexZohoiCloudqiye.aliyun

邮件模板可用字段${SITE_URL}${SITE_NAME}${PARENT_NICK}${PARENT_COMMENT}${NICK}${COMMENT}${POST_URL}${IMG}${PARENT_IMG}

Vercel 部署提示:如果邮件测试正常但实际收不到通知,请进入 Vercel 云函数管理 → Settings → Deployment Protection,将 Vercel Authentication 设置为 Disabled。


五、评论管理功能#

在管理面板的「评论管理」页面,可以进行以下操作:

操作说明
查看查看评论详情
隐藏/显示控制评论的可见性
删除删除评论(确认后不可恢复)
置顶/取消置顶将评论置顶或取消置顶
搜索可按昵称、邮箱、网址、IP、评论正文、文章地址搜索

搜索支持模糊匹配,可以搜索评论正文内容或文章地址路径。


六、数据导入导出#

导出评论#

在管理面板可以导出全部评论数据为 JSON 文件。

如果评论较多、导出失败或缺失数据,建议连接 MongoDB 数据库手动导出。

导入评论#

支持从以下评论系统导入数据:

系统导出格式文件名
ArtalkJSONcomments.data.json
DisqusXML[网站名称]-[导出时间]-all.xml
ValineJSONComment.json

导入前建议备份 comment 数据库。

迁移注意事项#

  • 迁移前建议备份现有数据
  • 评论的 uid 会重新生成,原有评论链接可能失效
  • 评论的创建时间会保留,但审核状态会重置
  • 如果迁移失败率高,建议手动连接 MongoDB 导出后转换格式

七、与博客主题集成#

在 Twikoo 管理面板获取 envId#

部署成功后,在 Twikoo 管理面板的「关于」页面可以查看环境 ID(envId),格式如:https://your-twikoo.vercel.app

Mizuki 主题配置#

src/config.ts 中修改 commentConfig

export const commentConfig: CommentConfig = {
enable: true,
twikoo: {
envId: 'https://your-twikoo.vercel.app', // 你的 Twikoo 地址
lang: 'zh-CN', // 语言
},
};

静态页面引入#

如果博客不使用主题支持,可以手动在页面中引入:

<!-- 引入 Twikoo -->
<script src="https://cdn.jsdelivr.net/npm/twikoo@1.6.41/twikoo.all.min.js"></script>
<!-- 评论区域 -->
<div id="twikoo"></div>
<!-- 初始化 -->
<script>
tk.init({
envId: 'https://your-twikoo.vercel.app',
el: '#twikoo',
});
</script>

禁用单篇文章评论#

在文章 frontmatter 中添加:

---
comment: false
---

八、博主身份标识#

当访客的邮箱与 BLOGGER_EMAIL 配置的邮箱一致时,评论会自动显示博主标识。

配置方法#

在 Twikoo 管理面板设置 BLOGGER_EMAIL

配置项说明
BLOGGER_EMAIL博主的邮箱地址,用于博主标识
BLOGGER_NICK博主的昵称(可选)
MASTER_TAG博主标识文字,默认为”博主”

显示效果#

配置后,访客使用与博主相同的邮箱评论时,会自动显示博主标识(如红色”博主”标签),便于读者识别官方回复。


九、表情包自定义#

默认表情包#

Twikoo 默认使用 OwO 表情包,托管在 https://owo.imaegoo.com/owo.json

自定义表情 CDN#

在管理面板配置 EMOTION_CDN

配置项说明
EMOTION_CDN表情 CDN 地址,多个用英文逗号分隔

自定义表情包格式#

表情包需要是一个 JSON 文件,包含表情分类和对应的 URL:

{
"items": [
{
"type": "image",
"container": [
{
"title": "表情名称",
"icon": "https://example.com/emoji/normal.png",
"src": "https://example.com/emoji/normal.png"
}
]
}
]
}

公开表情包列表#

  • OwO 官方https://owo.imaegoo.com/owo.json
  • Twikoo 原生https://cdn.jsdelivr.net/npm/twikoo@1.6.31/resource/owo.json

十、安全加固#

1. 设置管理面板暗号#

开启 HIDE_ADMIN_CRYPT 后,常规点击不会触发登录框,需要通过 ?twikoo=暗号 才能访问登录页面。

2. 配置 CORS 安全域名#

设置 CORS_ALLOW_ORIGIN 为你的博客域名,防止其他网站调用你的评论接口:

https://your-blog.com

多个域名用逗号分隔:

https://blog.com,https://www.blog.com

3. 限制发言频率#

配置项说明建议值
LIMIT_PER_MINUTE单 IP 发言频率5-10
LIMIT_PER_MINUTE_ALL全站发言频率20-50
LIMIT_LENGTH评论长度限制500-1000

4. 配置反垃圾#

  • 免费方案:设置 AKISMET_KEYMANUAL_REVIEW,开启人工审核
  • 付费方案:配置腾讯云内容安全 QCLOUD_SECRET_ID/SECRET_KEY

5. 违禁词防护#

配置项效果适用场景
FORBIDDEN_WORDS标记为垃圾评论,可恢复广告、低质内容
BLOCKED_WORDS直接评论失败敏感词、政治内容

6. 定期备份评论数据#

在管理面板「导出」功能可以导出全部评论为 JSON,建议定期备份:

管理面板 → 评论管理 → 导出 → 导出评论

十一、常见问题#

Q: 如何修改/重置管理员密码?#

  • 腾讯云:前往云开发控制台,删除 config 记录,重新设置。
  • Vercel:前往 MongoDB Atlas,编辑 configs 集合,删除 ADMIN_PASS 字段,然后去管理面板重新设置密码。

Q: 忘记隐藏入口暗号怎么办?#

在页面打开浏览器开发者工具(F12),Network 标签,刷新页面,搜索 HIDE_ADMIN_CRYPT,在返回结果中可找到暗号。

Q: 收不到邮件通知?#

  1. 确认已设置 Vercel Authentication 为 Disabled
  2. 邮件配置有约 10 分钟缓存
  3. 博主自己评论不会收到通知,请注销后用其他邮箱测试
  4. 使用国外邮件服务商,避免被判定为垃圾邮件

Q: 评论失败或管理面板进不去?#

打开浏览器 Console 查看错误:

错误解决方法
ERR_BLOCKED_BY_CLIENT禁用去广告插件
ERR_CONNECTION_CLOSED检查网络能否访问 Vercel
CORS policy确认 envId 以 https:// 开头
AUTH_INVALID_CUSTOM_LOGIN_TICKET删除数据库 config 重新配置私钥

Q: 如何开启人工审核?#

AKISMET_KEY 设置为 MANUAL_REVIEW 即可开启人工审核模式。所有评论会被标记为待审核状态,需要在管理面板手动审核通过后才能显示。

Q: 违禁词和屏蔽词有什么区别?#

  • 违禁词(FORBIDDEN_WORDS):包含违禁词的内容会直接标记为垃圾评论(可在管理面板手动恢复)
  • 屏蔽词(BLOCKED_WORDS):包含屏蔽词的内容会直接评论失败,用户无法提交

十二、官方资源#

资源链接
官方文档https://twikoo.js.org
GitHubhttps://github.com/twikoojs/twikoo
QQ 交流群1080829142
版本更新https://twikoo.js.org/update.html
Pushoo 说明https://pushoo.js.org
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Twikoo 评论系统使用指南
https://bayunmoyu.com/posts/twikoo-usage-guide/
作者
八云墨玉
发布于
2026-03-31
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00