Twikoo

Twikoo 是一个简洁安全免费的静态网站评论系统。

特色

简单

  • 免费搭建(使用云开发 / Vercel / 私有部署评论后台)
  • 简单部署(支持云开发 / Vercel 一键部署)

易用

  • 支持回复、点赞
  • 无需额外适配,支持搭配浅色主题与深色主题使用
  • 支持 API 调用,批量获取文章评论数、最新评论
  • 访客在昵称栏输入 QQ 号,会自动补全 QQ 昵称和 QQ 邮箱
  • 访客填写数字 QQ 邮箱,会使用 QQ 头像作为评论头像
  • 支持评论框粘贴图片(可禁用)
  • 支持插入图片(可禁用)
  • 支持去不图床、云开发图床
  • 支持插入表情(可禁用)
  • 支持 Ctrl + Enter 快捷回复
  • 评论框内容实时保存草稿,刷新不会丢失
  • 支持 Katex 公式
  • 支持按语言的代码高亮

安全

  • 隐私信息安全(通过云函数控制敏感字段(邮箱、IP、环境配置等)不会泄露)
  • 支持 Akismet 垃圾评论检测(需自行注册 akismet.com
  • 支持腾讯云内容安全垃圾评论检测(需自行注册 腾讯云内容安全
  • 支持人工审核模式
  • 防 XSS 注入
  • 支持限制每个 IP 每 10 分钟最多发表多少条评论

即时

  • 支持邮件提醒(访客和博主)
  • 支持微信提醒(仅针对博主,基于 Server酱,需自行注册)
  • 支持 QQ 提醒(仅针对博主,基于 Qmsg酱,需自行注册)

个性

  • 支持自定义评论框背景图片
  • 支持自定义“博主”标识文字
  • 支持自定义通知邮件模板
  • 支持自定义评论框提示信息(placeholder)
  • 支持自定义表情列表(兼容 OwO 的数据格式
  • 支持自定义【昵称】【邮箱】【网址】必填 / 选填
  • 支持自定义代码高亮主题

便捷管理

  • 内嵌式管理面板,通过密码登录,可方便地查看评论、隐藏评论、删除评论、修改配置
  • 支持隐藏管理入口,通过输入暗号显示
  • 支持从 Valine、Artalk、Disqus 导入评论

缺点

  • 不支持 IE

部署

以下是使用 Docker Compose 部署 Twikoo 评论系统的完整步骤,包含 MongoDB 数据库 和 Twikoo服务 的集成

创建Docker-compose.yml

version: '3'

services:
mongodb:
image: mongo:6.0
container_name: twikoo-mongodb
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: your_mongodb_root_password
MONGO_INITDB_DATABASE: twikoo
volumes:
- ./mongo_data:/data/db
networks:
- twikoo-net

twikoo:
image: imaegoo/twikoo:latest # 官方 Docker 镜像
container_name: twikoo
restart: always
ports:
- "8080:8080" # 映射宿主机 8080 端口
environment:
MONGODB_URI: mongodb://root:your_mongodb_root_password@mongodb:27017/twikoo?authSource=admin
# 可选 SMTP 配置(用于邮件通知)
# SMTP_HOST: smtp.example.com
# SMTP_PORT: 587
# SMTP_USER: your@email.com
# SMTP_PASS: your_smtp_password
# SMTP_FROM: "Twikoo <noreply@your-domain.com>"
depends_on:
- mongodb
networks:
- twikoo-net

networks:
twikoo-net:
driver: bridge

配置说明

MongoDB 服务

  • 持久化数据./mongo_data 目录用于保存数据库文件。
  • 安全认证:通过 MONGO_INITDB_ROOT_* 设置 root 账户(生产环境建议创建非 root 用户)。
  • 网络:与 Twikoo 共享 twikoo-net 网络,通过服务名 mongodb 内部通信。

Twikoo 服务

  • MongoDB 连接MONGODB_URI 格式为 mongodb://用户名:密码@服务名:端口/数据库名?authSource=admin
  • SMTP 邮件服务:按需取消注释并配置,用于发送评论通知。

启动服务

# 创建目录并启动容器
mkdir -p twikoo/mongo_data && cd twikoo
docker-compose up -d

验证部署

检查容器状态:

docker-compose ps

输出应显示两个容器均为 running 状态。

测试评论功能

在 Hexo 博客中提交评论,观察 MongoDB 数据库是否生成记录:

docker exec -it twikoo-mongodb mongosh -u root -p your_mongodb_root_password --authenticationDatabase admin
use twikoo
db.comments.find()

对接Hexo-Butterfly主题

在 Hexo 的 _config.butterfly.yml 中配置 Twikoo:

comments:
use: twikoo
twikoo:
envId: http://服务器IP:8080 # 或通过域名+反向代理的HTTPS地址
region: -

安全加固

通过反向代理启用HTTPS

使用 Nginx 配置 SSL 并代理到 8080 端口:

server {
listen 443 ssl;
server_name twikoo.your-domain.com;

ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;

location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

创建 MongoDB 非 root 用户

进入MongoDB容器:

docker exec -it twikoo-mongodb mongosh -u root -p your_mongodb_root_password --authenticationDatabase admin

创建专用用户:

use twikoo
db.createUser({
user: "twikoo",
pwd: "twikoo_password",
roles: [{ role: "readWrite", db: "twikoo" }]
})

更新 docker-compose.yml 中的 MONGODB_URI:

MONGODB_URI: mongodb://twikoo:twikoo_password@mongodb:27017/twikoo?authSource=twikoo

维护命令

操作命令
停止服务docker-compose down
更新镜像docker-compose pull && docker-compose up -d
查看日志docker-compose logs -f
备份数据打包 mongo_data 目录

常见问题

无法连接 MongoDB

  • 检查网络:确保 twikoomongodb 容器在同一网络。
  • 验证 URI:使用 docker exec -it twikoo sh 进入容器,执行 curl http://mongodb:27017 测试连通性。

效果

hexo-Butterfly添加Twikoo评论.png