前言
换到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。
修改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服务器地址替换成阿里提供的内容即可。