Waline是什么

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

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

为什么要用Waline

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

文章反应功能

于是现在已经加入到提问箱首页了:狼的提问箱

怎么搭建呢?

直接参考官网即可,文档较为完善。推荐使用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_USERAGENTfalse是否隐藏评论者的 UA,默认为否
DISABLE_REGIONfalse是否隐藏评论者的归属地
DISABLE_AUTHOR_NOTIFYfalse是否禁止新评论通知
AVATAR_PROXYhttps://avatar.75cdn.workers.dev头像的代理地址,设置 false 关闭代理
GRAVATAR_STRhttps://seccdn.libravatar.org/avatar/{{mail\md5}}Gravatar 头像的地址,基于 nunjucks 语法
LEVELS 设置后会根据评论数为每个用户提供等级标签
IPQPS60基于 IP 的评论发布频率限制,单位为秒。设置为 0 不限制
SECURE_DOMAINS 安全域名配置,支持逗号分隔配置多个域名
AKISMET_KEY70542d86693eAkismet 反垃圾评论服务 Key (默认开启,不用请设置为 false)
COMMENT_AUDITfalse评论发布审核开关。开启后评论需要经过管理员审核后才能显示,所以建议在评论框默认文字上提供提示
RECAPTCHA_V3_KEY reCAPTCHA V3 key,须与客户端同时配置
RECAPTCHA_V3_SECRET reCAPTCHA V3 secret,服务端使用,不可泄漏
TURNSTILE_KEY Turnstile key,须与客户端同时配置
TURNSTILE_SECRET Turnstile secret,服务端使用,不可泄漏
MARKDOWN_CONFIG{}MarkdownIt 配置
MARKDOWN_HIGHLIGHTtrue是否启用高亮
MARKDOWN_EMOJItrue是否启用 Emoji 缩写支持
MARKDOWN_SUBtrue是否启用下角标支持
MARKDOWN_SUPtrue是否启用上角标支持
MARKDOWN_TEXmathjax解析 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_HOST127.0.0.1MongoDB 服务的地址,支持数组格式
MONGO_PORT27017MongoDB 服务的端口,支持数组格式
MONGO_REPLICASET MongoDB 集群
MONGO_AUTHSOURCE MongoDB 认证源
MONGO_OPT_SSLFALSE是否使用 SSL 进行连接
MYSQL_DB MySQL 数据库库名
MYSQL_USER MySQL 数据库的用户名
MYSQL_PASSWORD MySQL 数据库的密码
MYSQL_HOST127.0.0.1MySQL 服务的地址
MYSQL_PORT3306MySQL 服务的端口
MYSQL_PREFIXwl_MySQL 数据表的表前缀
MYSQL_CHARSETutf8mb4MySQL 数据表的字符集
MYSQL_SSLFALSE是否使用 SSL MYSQL 连接数据库
TIDB_DB TiDB 数据库库名
TIDB_USER TiDB 数据库的用户名
TIDB_PASSWORD TiDB 数据库的密码
TIDB_HOST127.0.0.1TiDB 服务的地址
TIDB_PORT4000TiDB 服务的端口
TIDB_PREFIXwl_TiDB 数据表的表前缀
TIDB_CHARSETutf8mb4TiDB 数据表的字符集
SQLITE_PATH SQLite 数据库文件的路径,该路径不包含文件名本身
JWT_TOKEN 用户登录密钥,随机字符串即可
SQLITE_DBwalineSQLite 数据库文件名,若文件名变化需要修改该字段值
SQLITE_PREFIXwl_SQLite 数据表的表前缀
PG_DB PostgreSQL 数据库库名
PG_USER PostgreSQL 数据库的用户名
PG_PASSWORD PostgreSQL 数据库的密码
PG_HOST127.0.0.1PostgreSQL 服务的地址
PG_PORT3211PostgreSQL 服务的端口
PG_PREFIXwl_PostgreSQL 数据表的表前缀
PG_SSLFALSE是否使用 SSL 连接 PostgreSQL 数据库
POSTGRES_DATABASE 同 PG_DB
POSTGRES_USER 同 PG_USER
POSTGRES_PASSWORD 同 PG_PASSWORD
POSTGRES_HOST127.0.0.1同 PG_HOST
POSTGRES_PORT3211同 PG_PORT
POSTGRES_PREFIXwl_同 PG_PREFIX
POSTGRES_SSLFALSE同 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_URLhttps://oauth.lithub.ccOAuth 第三方登录服务地址,可以 自建 authopen in new window 这是能让用户使用 GitHub, Twitter, Facebook, Google, 微博等第三方账户登录最简单的方式。
WEBHOOK 评论成功后会向 WEBHOOK 配置的地址发送一条 POST 请求
WALINE_ADMIN_MODULE_ASSET_URL//unpkg.com/@waline/adminWaline 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。
可配置的项目:

名称参考说明
pluginsplugins: [HelloWorldPlugin],插件系统
secureDomainssecureDomains: 'waline.js.org',安全域名
forbiddenWordsforbiddenWords: ['违禁词A', '违禁词B'],违禁词
disallowIPListdisallowIPList: ['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未知
可配置的项目:

名称类型说明
elstringWaline 的初始化挂载器。必须是一个有效的 CSS 选择器。
serverURLstringWaline 的服务端地址。
wordLimitnumber \ [number, number]评论字数限制。填入单个数字时为最大字数限制。设置为 0 时无限制。
pathstring当前 文章页 路径,用于区分不同的 文章页,以保证正确读取该 文章页 下的评论列表。默认为window.location.pathname,可选为window.location.href或其他。
avatarstringGravatar 头像展示方式。见文档。
metastring[]评论者相关属性。可选值: 'nick', 'mail', 'link'
pageSizenumber评论列表分页,每页条数。
langstring多语言支持。可自定义,见文档。
visitorboolean开启文章访问量统计。
darkstring暗黑模式适配。详情见文档。
highlightboolean代码高亮,默认开启。
avatarCDNstring设置 Gravatar 头像 CDN 地址。默认值是https://sdn.geekzu.org/avatar/
avatarForceboolean每次访问是否强制拉取最新的评论列表头像
emoji(string \ EmojiInfo)[]表情设置,详见文档。
requiredMetastring[]设置必填项,默认匿名,可填['nick', 'mail']等
uploadImageFunction自定义图片上传方法,方便更好的存储图片。方法执行时会将图片对象传入。
loginstring登录模式状态,分为'enable': 启用登录 (默认) 'disable': 禁用登录,用户只能填写信息评论 'force': 强制登录,用户必须注册并登录才可发布评论
copyrightboolean是否显示页脚版权信息。

修改过的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。

最后修改:2024 年 03 月 10 日
如果觉得我的文章对你有用,请随意赞赏