评论系统切换到Twikoo

前言

换到Hugo以后一直使用giscus来实现评论功能,好处是只要在Github上操作一次后就不用再管,那么坏处是对移动网络和联通网络的访客不是那么的友好,在同一页面下回复目标访客也会导致其他访客收到邮件。

尝试waline

waline是作为我首选的评论系统,我把它添加到仓库之后,用Vercel、ESA、EO-Pages都构建了一番,甚至是部署在了自己的服务器上。部署后尝试访问首页,缓慢地出现了一个评论框,点击登录和注册不是英文提示错误请求就是403代码,操作了半天最终选择放弃。

尝试Twikoo

我对Twikoo的第一印象是,它的文档写的非常省略,让我这种技术低下的人看了疯狂挠头。不过往下文档看后会发现,它总结出了各大云函数服务商的使用体验,可惜它没列出EO-Pages和ESA这两个产品。博主不信邪,直接放到那两款产品上后,EO的访问报错404,ESA的是构建失败,总之就是屡屡碰壁。博主突然想起来还有台女朋友送的阿里云服务器,心头涌起一阵温暖。服务器安装了1Panel面板,之前跑的是PHP博客,我换到Hugo就没在使用过。我按照文档里给出的Docker Compose内容,到面板容器里添加编排内容,等到容器上线后才发现原来Twikoo已经上架到了1panel的应用商店里。

配置Twikoo

访问容器的地址后,返回了一段Json数据。我先是修改了hugo.toml文件中的评论系统的相关配置,然后在目录下执行了hugo server指令。刷新文章页面,可以看到评论页面已经被换成了Twikoo的样式。

踩坑之一:IP显示不正确

因为博主套上了EdgeOne,不采取措施的情况下默认读取到的是CDN的节点IP。

设置CDN

进入到EdgeOne控制台-站点加速,打开客户端IP头部,把头部名称修改成X-Forwarded-For
20260607151810422.webp

修改Nginx配置

server处添加两行内容:

    # 1. 允许从哪些代理服务器获取真实 IP(这里设置为信任所有IPv4)
    set_real_ip_from 0.0.0.0/0;       

    # 2. 指定从 EdgeOne 传递的 X-Forwarded-For 头中获取访客真实 IP
    real_ip_header X-Forwarded-For;

保存,重载Nginx。

踩坑之二:IP直接不显示

博主在给自己胡乱发送评论的时候发现,有些评论是不显示IP的,翻找了记录评论的数据文件也找不到IP。推测是Twikoo自身不支持IPV6。

操作CDN

进入EdgeOne关闭评论系统域名下的IPV6开关。

拓展:开启回复提醒

Twikoo支持邮件提醒,需要在插件的设置页面中填写发信账号、地址等信息。不过传统的发信方式会在邮件原文中暴露服务器的IP,这会增加服务器运行的风险,因此博主选择使用阿里云的邮件推送功能。和传统发信的配置是一样的,只需要把SMTP服务器地址替换成阿里提供的内容即可。