引入 Waline 评论

Hexo 博客框架 Butterfly 主题中引入 Waline 评论操作可以参考以下文章解决:

注意:

  • 快速上手 | Waline 这篇文章中,请按照指引完成 Vercel 的部署,并完成域名绑定小节(虽然它说可选,但我强烈建议你完成,否则你的评论系统只能在严苛的网络环境中运行)

  • 在 Butterfly 的主题配置文件中有两处需要改:

    1
    2
    3
    4
    5
    6
    comments:
    use: Waline # Valine,Disqus
    # ...

    waline:
    serverURL: https://pl.uuanqin.top # Waline server address url

    注意 serverURL 填自己创建子域名

切换数据库

文档:多数据库服务支持 | Waline

基本步骤:

  • 打开 Waline 管理面板,导出数据
  • 准备好自己的数据库
  • 依据文档要求添加环境变量
  • 删除 Vercel 中原有数据库相关的环境变量。或者把这些变量的多环境「Production」取消掉。
  • Vercel 重新部署
  • 登录 Waline,并成为第一个注册用户
  • 打开管理面板导入数据,等待数据导入成功。

把数据从 LeanCloud 切换到自己服务器数据库的好处是:

  1. 评论数据加载迅速
  2. 数据维护方便

如果你是从 LeanCloud 迁入 MySQL,建议紧接着看下一小节完成时区转换问题。

加速 Waline

按照官网配置好的 Waline 在国内的加载速度还是有点慢,现记录下一些可用的加速手段:

  1. Waline 的 js 文件、css 文件全部替换为国内高速访问的 CDN 链接,或直接存储在本站。国内常用 CDN 镜像站详见:国内访问 Hexo 博客优化加速(CDN 链接替换)
  2. 使用的「文章反应」「表情包」等素材均替换为国内镜像。比如 Waline 内置的表情包源为 unpkg,我们可以切换到国内 unpkg 的镜像站。参考:学会通过看文档配置 Butterfly 主题中的 Waline 客户端
  3. 评论区头像服务使用国内的 Cravatar 服务。详见:Waline 配置头像服务(含常用公共头像服务介绍)
  4. Vercel 使用国内加速域名、将数据库服务部署到国内。上文已介绍了相关操作方法。

更多美化设置

推荐本站的索引文章: 【索引】定制自己的 Waline 评论系统

Vercel 中的 Waline 的维护

一点开发与维护提示:

  • Vercel 中的环境变量可以配置多环境生效设置。
  • 默认情况下,GitHub 提交到 main 分支为 Production 正式环境,其他分支则是 Preview 环境。
  • 并不是所有的改动提交到 GitHub 上时都会生效,默认情况下仅有 index.js 改动时才会生效。

官方文档:Deploying Git Repositories with Vercel

使用 Waline 可能遇到的问题

问题 1:无法获取和发布评论

问题:评论框已经能在博客中显示,但是获取不到评论内容,且无法发布评论。出现 Failed to Fetch 错误。但使用魔法后评论系统正常运行。

解决:打开 F12 控制台并重新加载问题页面,你可能会发现 vervel.app 无法访问:

vercal评论问题

注意到页面向 vercel.app 发送了 GET 请求,但此时 vercel.app 在国内环境是无法访问的。

排查方向:

Type Name Value
CNAME example(你想要的子域名名称 cname.vercel-dns.com (也可以是cname-china.vercel-dns.com
  • 确保在 Butterfly 的主题配置文件中设置了正确的 Waline 服务器地址(比如设置为example.yourdomain.com)。

问题 2:从 LeanCloud 迁入 MySQL 数据库后时间显示错误

问题描述:利用数据导入导出工具从 LeanCloud 把数据迁入 MySQL 后,数据中与时间相关的字段均落后 8 小时。且发布新评论时插入数据库字段中的时间均超前 8 小时。

下面介绍一种能解决问题的方式。

导入评论数据后,立即执行以下 SQL 恢复正确的时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UPDATE `waline-comments`.wl_Comment SET
createdAt = DATE_ADD(createdAt, INTERVAL 8 HOUR),
updatedAt = DATE_ADD(updatedAt, INTERVAL 8 HOUR);

UPDATE `waline-comments`.wl_Comment SET
insertedAt = DATE_ADD(insertedAt, INTERVAL 8 HOUR);

UPDATE `waline-comments`.wl_Counter SET
createdAt = DATE_ADD(createdAt, INTERVAL 8 HOUR),
updatedAt = DATE_ADD(updatedAt, INTERVAL 8 HOUR);

UPDATE `waline-comments`.wl_Users SET
createdAt = DATE_ADD(createdAt, INTERVAL 8 HOUR),
updatedAt = DATE_ADD(updatedAt, INTERVAL 8 HOUR);

调整 MySQL 数据库时区:修改服务器文件:/etc/my.cnf.d/mysql-server.cnf

1
2
[mysqld]
default-time_zone = '+0:00'
1
2
# 重启mysqld
systemctl restart mysqld.service

这样评论的时间就能正确展示,新评论时间也能正确设置了。