Hexo NexT8 主题配置 Waline 评论系统

Waline 是基于 Valine 的一个前后端分离的评论系统,后端可以部署在 Leancloud、Vercel 或者自己服务器的数据库上,前端也可以很方便的利用 Hexo 插件来完成配置。本次的后端:Ubuntu 20 服务器,docker 环境。

环境:Ubuntu 20,NexT v8,宝塔面板,MySQL,docker-compose。

配置数据库

Waline 支持多种数据库,对于每种数据库,都有不同的配置,详细请参考多数据库服务支持。我使用的是 MySQL 10.1.47-MariaDB,直接参考 MySQL 的配置即可。

使用宝塔面板创建一个空的数据库,数据库名、用户名、密码按照需要设置,编码选择 utf8mb4。图中密码在截完图后已修改。

创建完毕后,需要先导入 waline.sql 对数据库进行初始化,这个也可以在宝塔面板的数据库管理页面直接选择本地文件导入。

导入成功后,数据库配置就完成了。在后续步骤中,需要配置的环境变量如下所示:

环境变量名称 必填 默认值 备注
MYSQL_HOST 127.0.0.1 MySQL 服务的地址
MYSQL_PORT 3306 MySQL 服务的端口
MYSQL_DB MySQL 数据库库名
MYSQL_USER MySQL 数据库的用户名
MYSQL_PASSWORD MySQL 数据库的密码
MYSQL_PREFIX wl_ MySQL 数据表的表前缀
MYSQL_CHARSET utf8mb4 MySQL 数据表的字符集

评论通知配置

Waline 支持邮件通知、QQ 通知、微信通知、企业微信通知、Telegram 通知等多种方式,我只开启了邮件通知,如果有其他需求,请参考评论通知 | Waline

Waline 默认支持的邮件发送服务提供商在这里可以看到,我打算用的是 Outlook,也在此列表中。

  • SMTP_SERVICE: SMTP 邮件发送服务提供商,如 Outlook365。如果在上面的列表中找不到自己要用的 SMTP 服务提供商,那就需要配置以下两个选项;找到了就不用配置。
    • SMTP_HOST: SMTP 服务器地址,一般可以在邮箱的设置中找到。
    • SMTP_PORT: SMTP 服务器端口,一般可以在邮箱的设置中找到。
  • SMTP_USER: SMTP 邮件发送服务的用户名,一般为登录邮箱。如 little.cu@outlook.com
  • SMTP_PASS: SMTP 邮件发送服务的密码,一般为邮箱登录密码,部分邮箱 (例如 163) 是单独的 SMTP 密码。
  • SITE_NAME: 网站名称,用于在消息中显示。如 Cu Blog
  • SITE_URL: 网站地址,用于在消息中显示。如 www.litcu.cn
  • AUTHOR_EMAIL: 博主邮箱,用来接收新评论通知。如果是博主发布的评论则不进行提醒通知。

以下是选填的环境变量:

  • SENDER_NAME: 自定义发送邮件的发件人名称,如 litcu
  • SENDER_EMAIL: 自定义发送邮件的发件地址,如 comment@litcu.cn
  • MAIL_SUBJECT: 自定义评论回复邮件标题,如您在Cu Blog上收到了新的回复
  • MAIL_TEMPLATE: 自定义评论回复邮件内容
  • MAIL_SUBJECT_ADMIN: 自定义新评论通知邮件标题,如博客收到新评论啦!
  • MAIL_TEMPLATE_ADMIN: 自定义新评论通知邮件内容

Docker 部署

首先 docker pull lizheming/waline 下载 waline 镜像到本地。然后因为个人习惯,我使用 adduser comment 命令新建了一个叫做 comment 的用户,然后 cd /home/commentmkdir data,新建了一个 data 文件夹,用来映射 docker 镜像中的 data 目录。

本来打算直接 docker run 命令来启动容器,结果遇到了一点问题,怎么也解决不掉,于是用了 docker-compose。先创建了一个 docker-compose.yml 文件,写入以下内容:

# docker-compose.yml
version: '3'

services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: unless-stopped
ports:
- 33333:8360
volumes:
- /home/comment/data:/app/data
environment:
TZ: 'Asia/Shanghai'
MYSQL_HOST: '数据库服务器IP'
MYSQL_DB: 'waline'
MYSQL_USER: 'waline'
MYSQL_PASSWORD: '数据库密码'
SMTP_SERVICE: 'Outlook365'
SMTP_USER: 'little.cu@outlook.com'
SMTP_PASS: '邮箱授权码'
SITE_NAME: 'Cu Blog'
SITE_URL: 'www.litcu.cn'
AUTHOR_EMAIL: 'lsheep.me@outlook.com'
SENDER_NAME: 'litcu'
MAIL_SUBJECT: '您在Cu Blog上的评论收到了新的回复'
MAIL_SUBJECT_ADMIN: '博客收到新的评论啦'
AVATAR_PROXY: 'https://gravatar.loli.net/avatar'

然后使用 docker-compose up -d 在后台启动容器。

nginx 反代

首先使用宝塔面板新建一个网站,域名配置与 SSL 证书不再详谈,然后利用宝塔面板可以很方便地完成反代。

注册管理员

访问 https://comment.litcu.cn,就可以看到 waline 的评论框了,注意下面的 “来发评论吧~”,出现这个大概率说明没有问题,如果一直在刷新,可能是数据库配置有错误。可以通过 docker logs waline 来查看日志,确定是否出现了问题。

然后访问 https://comment.litcu.cn/ui/register 注册一个用户,第一个注册的用户会默认设置为管理员用户。注册完毕,就可以正常登陆了。

客户端配置

我是用的是 Hexo 的 NexT 主题 v8,虽然没有内置 waline 配置,但参考这里,可以通过 npm install @waline/hexo-next -S,然后在_config.yml_config.next.yml 文件中添加如下配置:

# Waline
# For more information: https://waline.js.org, https://github.com/walinejs/waline
waline:
enable: false
serverURL: https://waline.vercel.app # Waline server address url
placeholder: Just go go # Comment box placeholder
avatar: mm # Gravatar style
meta: [nick, mail, link] # Custom comment header
pageSize: 10 # Pagination size
lang: # Language, available values: en, zh-cn
# Warning: Do not enable both `waline.visitor` and `leancloud_visitors`.
visitor: false # Article reading statistic
comment_count: true # If false, comment count will only be displayed in post page, not in home page
requiredFields: [] # Set required fields: [nick] | [nick, mail]
libUrl: # Set custom library cdn url

完成后 hexo cl && hexo g && hexo s,在本地可以验证是否部署成功。

其他

如何修改头像?

Gravatar - Globally Recognized Avatars 可以根据邮箱来设置头像(该网站需要特殊方式才能访问)。

为什么收不到邮件?

docker logs waline 后,我确定了问题所在:outlook 的邮箱不允许设置发送的别名,也就是不允许有 SENDER_EMAIL 参数,将其去掉即可。