在静态网站上使用waline评论系统

阅读次数:

Waline是什么

一款从 Valine 衍生的带后端评论系统。可以将 Waline 等价成 With backend Valine.

简单来说,Waline可以引入到任意网站上,比如hugo等搭建的静态博客系统。

为什么要用Waline

看到这个的第一眼我就心想:卧槽,我也要整一个!

![文章反应功能][1]
于是现在已经加入到提问箱首页了:[狼的提问箱][2]。

怎么搭建呢?

直接参考官网即可,文档较为完善。推荐使用vercel+LeanCloud,可以实现无服务器搭建,当然访问速度有一些慢。

需要注意什么?

Waline主要分为三个部分进行配置:

vercel环境变量

配置地址:https://vercel.com/%username%s-projects/%project_name%/settings/environment-variables 配置文档:https://waline.js.org/reference/server/env.html 描述:一些全局性的配置 具体可配置项目如下:

环境变量名称 默认值 备注
LEAN_ID - LeanCloud 应用的 App ID
LEAN_KEY - LeanCloud 应用的 App Key
LEAN_MASTER_KEY - LeanCloud 应用的 Master Key 用于后台修改数据
LEAN_SERVER - LeanCloud 服务地址,国内版用户需要配置此项
SITE_NAME 博客名称
SITE_URL 博客地址
LOGIN 当设置为 LOGIN=force 时会要求登录才能评论
DISABLE_USERAGENT false 是否隐藏评论者的 UA,默认为否
DISABLE_REGION false 是否隐藏评论者的归属地
DISABLE_AUTHOR_NOTIFY false 是否禁止新评论通知
AVATAR_PROXY https://avatar.75cdn.workers.dev 头像的代理地址,设置 false 关闭代理
GRAVATAR_STR https://seccdn.libravatar.org/avatar/{{mail\md5}} Gravatar 头像的地址,基于 nunjucks 语法
LEVELS 设置后会根据评论数为每个用户提供等级标签
IPQPS 60 基于 IP 的评论发布频率限制,单位为秒。设置为 0 不限制
SECURE_DOMAINS 安全域名配置,支持逗号分隔配置多个域名
AKISMET_KEY 70542d86693e Akismet 反垃圾评论服务 Key (默认开启,不用请设置为 false)
COMMENT_AUDIT false 评论发布审核开关。开启后评论需要经过管理员审核后才能显示,所以建议在评论框默认文字上提供提示
RECAPTCHA_V3_KEY reCAPTCHA V3 key,须与客户端同时配置
RECAPTCHA_V3_SECRET reCAPTCHA V3 secret,服务端使用,不可泄漏
TURNSTILE_KEY Turnstile key,须与客户端同时配置
TURNSTILE_SECRET Turnstile secret,服务端使用,不可泄漏
MARKDOWN_CONFIG {} MarkdownIt 配置
MARKDOWN_HIGHLIGHT true 是否启用高亮
MARKDOWN_EMOJI true 是否启用 Emoji 缩写支持
MARKDOWN_SUB true 是否启用下角标支持
MARKDOWN_SUP true 是否启用上角标支持
MARKDOWN_TEX mathjax 解析 TeX 的服务,支持 mathjax、katex、false
MARKDOWN_MATHJAX {} MathJax 选项
MARKDOWN_KATEX {} KaTeX 选项
SMTP_SERVICE SMTP 邮件发送服务提供商
SMTP_HOST SMTP 服务器地址
SMTP_PORT SMTP 服务器端口。
SMTP_USER SMTP 用户名
SMTP_PASS SMTP 密码
SMTP_SECURE 是否使用 SSL 连接 SMTP
SENDER_NAME 自定义发送邮件的发件人
SENDER_EMAIL 自定义发送邮件的发件地址
MONGO_DB   MongoDB 数据库名称
MONGO_USER   MongoDB 服务的用户名
MONGO_PASSWORD   MongoDB 服务的密码
MONGO_HOST 127.0.0.1 MongoDB 服务的地址,支持数组格式
MONGO_PORT 27017 MongoDB 服务的端口,支持数组格式
MONGO_REPLICASET   MongoDB 集群
MONGO_AUTHSOURCE   MongoDB 认证源
MONGO_OPT_SSL FALSE 是否使用 SSL 进行连接
MYSQL_DB   MySQL 数据库库名
MYSQL_USER   MySQL 数据库的用户名
MYSQL_PASSWORD   MySQL 数据库的密码
MYSQL_HOST 127.0.0.1 MySQL 服务的地址
MYSQL_PORT 3306 MySQL 服务的端口
MYSQL_PREFIX wl_ MySQL 数据表的表前缀
MYSQL_CHARSET utf8mb4 MySQL 数据表的字符集
MYSQL_SSL FALSE 是否使用 SSL MYSQL 连接数据库
TIDB_DB   TiDB 数据库库名
TIDB_USER   TiDB 数据库的用户名
TIDB_PASSWORD   TiDB 数据库的密码
TIDB_HOST 127.0.0.1 TiDB 服务的地址
TIDB_PORT 4000 TiDB 服务的端口
TIDB_PREFIX wl_ TiDB 数据表的表前缀
TIDB_CHARSET utf8mb4 TiDB 数据表的字符集
SQLITE_PATH   SQLite 数据库文件的路径,该路径不包含文件名本身
JWT_TOKEN   用户登录密钥,随机字符串即可
SQLITE_DB waline SQLite 数据库文件名,若文件名变化需要修改该字段值
SQLITE_PREFIX wl_ SQLite 数据表的表前缀
PG_DB   PostgreSQL 数据库库名
PG_USER   PostgreSQL 数据库的用户名
PG_PASSWORD   PostgreSQL 数据库的密码
PG_HOST 127.0.0.1 PostgreSQL 服务的地址
PG_PORT 3211 PostgreSQL 服务的端口
PG_PREFIX wl_ PostgreSQL 数据表的表前缀
PG_SSL FALSE 是否使用 SSL 连接 PostgreSQL 数据库
POSTGRES_DATABASE   同 PG_DB
POSTGRES_USER   同 PG_USER
POSTGRES_PASSWORD   同 PG_PASSWORD
POSTGRES_HOST 127.0.0.1 同 PG_HOST
POSTGRES_PORT 3211 同 PG_PORT
POSTGRES_PREFIX wl_ 同 PG_PREFIX
POSTGRES_SSL FALSE 同 POSTGRES_SSL
TCB_ENV   腾讯云开发环境 ID
TCB_ID   腾讯云 API 密钥 ID
TCB_KEY   腾讯云 API 密钥 Key
JWT_TOKEN   用户登录密钥,如果没有配任何环境变量的话需要配置此变量,随机字符串即可
GITHUB_TOKEN   Personal access tokensopen in new window
GITHUB_REPO   仓库名称,例如 walinejs/waline
GITHUB_PATH   数据存储目录,例如 data 表示存储在 data 目录下,默认存在仓库根目录下
DETA_PROJECT_KEY   Deta 项目密钥
OAUTH_URL https://oauth.lithub.cc OAuth 第三方登录服务地址,可以 自建 authopen in new window 这是能让用户使用 GitHub, Twitter, Facebook, Google, 微博等第三方账户登录最简单的方式。
WEBHOOK   评论成功后会向 WEBHOOK 配置的地址发送一条 POST 请求
WALINE_ADMIN_MODULE_ASSET_URL //unpkg.com/@waline/admin Waline admin 地址
IP2REGION_DB   自定义 IP 查询库路径
index.js(服务端)配置

配置地址:https://github.com/%username%/%repositorie%/blob/main/index.js 配置文档:https://waline.js.org/reference/server/config.html 描述:该文件位于github私有仓库内,其中一些项目与vercel环境变量效果一致。在这里修改过的文件会自动在vercel内重新build。 可配置的项目:

名称 参考 说明
plugins plugins: [HelloWorldPlugin], 插件系统
secureDomains secureDomains: ‘waline.js.org’, 安全域名
forbiddenWords forbiddenWords: [‘违禁词A’, ‘违禁词B’], 违禁词
disallowIPList disallowIPList: [‘8.8.8.8’, ‘4.4.4.4’], IP 黑名单
mailSubject 评论回复邮件标题自定义,等同于环境变量 MAIL_SUBJECT
mailTemplate 评论回复邮件内容自定义,等同于环境变量 MAIL_TEMPLATE
mailSubjectAdmin 新评论通知邮件标题自定义,等同于环境变量 MAIL_SUBJECT_ADMIN
mailTemplateAdmin 新评论通知邮件内容自定义,等同于环境变量 MAIL_TEMPLATE_ADMIN
QQTemplate QQ 评论通知模板,等同于环境变量 QQ_TEMPLATE
TGTemplate Telegram 评论通知模板,等同于环境变量 TG_TEMPLATE
SCTemplate Server酱 评论通知模板,等同于环境变量 SC_TEMPLATE
model 自定义数据库服务(见https://waline.js.org/cookbook/customize/database.html)
encryptPassword 自定义用户系统(见https://waline.js.org/cookbook/customize/userdb.html)
评论 Hooks 包含一些自定义HOOK,详情见文档。
修改过的index.js文件参考如下:
const Application = require('@waline/vercel');

module.exports = Application({
  plugins: [],
  //secureDomains: '*.tama.guru',
  COMMENT_AUDIT: true,
  forbiddenWords: ['***', '***'],
});
前端(html内)配置

配置地址:https://%yoursite%/%sitename%.html 配置文档:https://waline.netlify.app/client/basic.html 描述:每个html都可以独立配置以达到不同的显示效果 注意:以下配置针对v2版本生效,v3未知 可配置的项目:

名称 类型 说明
el string Waline 的初始化挂载器。必须是一个有效的 CSS 选择器。
serverURL string Waline 的服务端地址。
wordLimit number \ [number, number] 评论字数限制。填入单个数字时为最大字数限制。设置为 0 时无限制。
path string 当前 文章页 路径,用于区分不同的 文章页,以保证正确读取该 文章页 下的评论列表。默认为window.location.pathname,可选为window.location.href或其他。
avatar string Gravatar 头像展示方式。见文档。
meta string[] 评论者相关属性。可选值: ’nick’, ‘mail’, ’link’
pageSize number 评论列表分页,每页条数。
lang string 多语言支持。可自定义,见文档。
visitor boolean 开启文章访问量统计。
dark string 暗黑模式适配。详情见文档。
highlight boolean 代码高亮,默认开启。
avatarCDN string 设置 Gravatar 头像 CDN 地址。默认值是https://sdn.geekzu.org/avatar/
avatarForce boolean 每次访问是否强制拉取最新的评论列表头像
emoji (string \ EmojiInfo)[] 表情设置,详见文档。
requiredMeta string[] 设置必填项,默认匿名,可填[’nick’, ‘mail’]等
uploadImage Function 自定义图片上传方法,方便更好的存储图片。方法执行时会将图片对象传入。
login string 登录模式状态,分为’enable’: 启用登录 (默认) ‘disable’: 禁用登录,用户只能填写信息评论 ‘force’: 强制登录,用户必须注册并登录才可发布评论
copyright boolean 是否显示页脚版权信息。
修改过的html文件参考如下:
<script src="/waline.js"></script>
<link href='/waline.css' rel='stylesheet' />
 <div id="waline"></div>
 <script>
     const waline = Waline.init({
         el: '#waline',
         serverURL: 'https://%yourwalineserversite%',
         reaction: ture,
         meta: ['nick','mail'],
         requiredMeta: ['mail'],
         pageview: true,
         search: false,
         comment: false,
         login: 'disable',
         wordLimit: 50,
         pageSize: 5,
         avatar: 'monsterid',
         emoji: [
             'https://unpkg.com/@waline/emojis@1.2.0/tieba',
         ],
         //禁止图片上传按钮
         imageUploader: false,
         //不显示版权标志
         copyright: false,
     });
 </script>

再次提醒,我引用最新的v3版本会报错,建议用v2。

本博客已稳定运行
使用 Hugo 构建