配置 NotionNext 博客 Waline 评论系统

2022-6-16|2023-3-16
D_SUPER
D_SUPER
type
Post
status
Published
date
Jun 16, 2022
slug
waline-setting
summary
NotionNext提供了非常棒的个人免费博客服务,其仍不断更新迭代,富有活力。最近引入Waline评论系统,给博客的互动提供了更多的可能性:注册评论账户、评论表情包、设置用户活跃等级等。Waline配置起来也非常明晰:Railway.app配置较为简单,Vercel+LeanCloud的配置方式更为普遍,Deta部署好像是最简单的……除了基础的部署,配置SMTP也会让你的网站评论系统有更好的体验。
category
技术分享
tags
建站
NotionNext
password
icon

NotionNext 添加了新的评论系统 —— valine 和 waline (With backend Valine). 使用 valine 可以搭配 valine-admin 管理评论。而 waline 是 valine 的升级版,配置更简便,建议直接 waline 一步到位了!NotionNext 配置 Waline 官方教程Waline 项目地址
我尝试了 Railway 部署和 Vercel 部署两种方式(之前用Railway作为Cusdis的评论数据库,注册了账号)。部署完成后,得到评论服务的 链接 即为 NotionNext 需要的配置参数 NEXT_PUBLIC_WALINE_SERVER_URL
三种方法:Railway 部署简便,但存在在线时长限制;Vercel + LeanCloud 部署数据库空间容量大(远超所需),但在 LeanCloud 注册部分较复杂,但可能存在跨域问题;Vercel + PostgreSQL 部署较 LeanCloud 简单,但可能存在跨域问题。

基本部署

Railway 部署

Railway 搭建更方便,因为内置 PostgreSQL 数据库,不需要另外配置数据库,无需注册LeanCloud。 Railway 支持 Github 登录。
注:目前 Railway 免费用户可能存在每月 500H 运行时长限制(月初重置),部署项目可能存在服务中断。(20230202) 推荐阅读: postgresql 数据库迁移

基础配置步骤

  • 点击 [Deploy on Railway],跳转至 Railway 平台快速部署。登录之后会让你选择新建仓库的名称,环境变量部分不需要改动,直接点击下方的 Deploy 按钮进行部署即可。
notion image
  • 进入管理界面后,选择 PostgreSQLQuery ,将 waline.pgsql 中的内容粘贴至输入框中,点击底部的 Run Query 按钮完成数据库的初始化。
    • waline.pgsql 初始化数据库代码
      CREATE SEQUENCE wl_comment_seq; CREATE TABLE wl_comment ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_comment_seq'), user_id int DEFAULT NULL, comment text, insertedAt timestamp(0) with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, ip varchar(100) DEFAULT '', link varchar(255) DEFAULT NULL, mail varchar(255) DEFAULT NULL, nick varchar(255) DEFAULT NULL, pid int DEFAULT NULL, rid int DEFAULT NULL, sticky boolean DEFAULT NULL, status varchar(50) NOT NULL DEFAULT '', "like" int DEFAULT NULL, ua text, url varchar(255) DEFAULT NULL, createdAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ; CREATE SEQUENCE wl_counter_seq; CREATE TABLE wl_counter ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_counter_seq'), time int DEFAULT NULL, url varchar(255) NOT NULL DEFAULT '', createdAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ; CREATE SEQUENCE wl_users_seq; CREATE TABLE wl_users ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_users_seq'), display_name varchar(255) NOT NULL DEFAULT '', email varchar(255) NOT NULL DEFAULT '', password varchar(255) NOT NULL DEFAULT '', type varchar(50) NOT NULL DEFAULT '', label varchar(255) DEFAULT NULL, url varchar(255) DEFAULT NULL, avatar varchar(255) DEFAULT NULL, github varchar(255) DEFAULT NULL, twitter varchar(255) DEFAULT NULL, facebook varchar(255) DEFAULT NULL, google varchar(255) DEFAULT NULL, weibo varchar(255) DEFAULT NULL, qq varchar(255) DEFAULT NULL, "2fa" varchar(32) DEFAULT NULL, createdAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ;
  • 最后在 Settings → Domains 中就可以获取到访问的地址了。在此处可以可以设置博客二级域名指向该服务,得到NotionNext所需的评论服务链接。
notion image
  • 在NotionNext中添加 NEXT_PUBLIC_WALINE_SERVER_URL 环境变量。

进阶设置

  • 在红框选项下,设置服务的环境变量。
notion image

Vercel + LeanCloud 部署

Vercel 部署使用 LeanCloud 数据库服务,需要设置三个数据库相关的配置参数。

基础配置步骤

  • 注册LeanCloud 国际版账号,创建应用,在 设置应用凭证 中获得:
    • AppID + AppKey + MasterKey
  • 点击 [Depoly] (By tangly1024),跳转至 Vercel 进行 Server 端部署。
    • 此处推荐使用 NotionNext 开发者 tangly1024 配置的[Depoly]一键部署waline(调整了跨域访问的问题)
    • waline 官方 [Deploy] (仅供参考)
notion image
  • SettingsEnvironmrnt Variables 设置数据库相关环境变量:
    • 在环境变量(Environment Variables)中配置 LEAN_IDLEAN_KEYLEAN_MASTER_KEY 三个环境变量。它们的值分别对应在 LeanCloud 中获得的 AppIDAppKeyMasterKey
      NAME
      VALUE
      LEAN_ID
      ${AppID}
      LEAN_KEY
      ${AppKey}
      LEAN_MASTER_KEY
      ${MasterKey}
      notion image
  • DeploymentsRedeploy ,让修改的环境变量生效。
notion image
  • SettingsDomains 下,可以将二级域名指向该 vercel 服务,得到NotionNext所需的评论服务链接。 【教程:Vercel应用绑定自己的域名
notion image
  • 在NotionNext中添加 NEXT_PUBLIC_WALINE_SERVER_URL 环境变量。

进阶设置

  • 设置环境变量与基础配置中操作相同。

Vercel + PostgreSQL 部署

步骤与 Vercel + LeanCloud 部署 基本一致,区别仅在于使用不同数据库,更具体操作可结合上一小节。
  • bit.io 新建 PostgreSQL 数据库(提供 3G 免费数据库);
  • 初始化数据库: Data → Query 填入以下代码
    • waline.pgsql 初始化数据库代码 [*]
      CREATE SEQUENCE wl_comment_seq; CREATE TABLE wl_comment ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_comment_seq'), user_id int DEFAULT NULL, comment text, insertedAt timestamp(0) with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, ip varchar(100) DEFAULT '', link varchar(255) DEFAULT NULL, mail varchar(255) DEFAULT NULL, nick varchar(255) DEFAULT NULL, pid int DEFAULT NULL, rid int DEFAULT NULL, sticky boolean DEFAULT NULL, status varchar(50) NOT NULL DEFAULT '', "like" int DEFAULT NULL, ua text, url varchar(255) DEFAULT NULL, createdAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ; CREATE SEQUENCE wl_counter_seq; CREATE TABLE wl_counter ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_counter_seq'), time int DEFAULT NULL, url varchar(255) NOT NULL DEFAULT '', createdAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ; CREATE SEQUENCE wl_users_seq; CREATE TABLE wl_users ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_users_seq'), display_name varchar(255) NOT NULL DEFAULT '', email varchar(255) NOT NULL DEFAULT '', password varchar(255) NOT NULL DEFAULT '', type varchar(50) NOT NULL DEFAULT '', label varchar(255) DEFAULT NULL, url varchar(255) DEFAULT NULL, avatar varchar(255) DEFAULT NULL, github varchar(255) DEFAULT NULL, twitter varchar(255) DEFAULT NULL, facebook varchar(255) DEFAULT NULL, google varchar(255) DEFAULT NULL, weibo varchar(255) DEFAULT NULL, qq varchar(255) DEFAULT NULL, "2fa" varchar(32) DEFAULT NULL, createdAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) with time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ;
notion image
  • 在 Connect 中(见上图)获取数据库连接参数:PG_DBPG_USERPG_PASSWORDPG_HOST(替换 LeanCloud 数据库的环境变量),即可部署。
    • 环境变量名称
      必填
      默认值
      备注
      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 数据库
  • 点击 [Depoly] (By tangly1024),跳转至 Vercel 进行 Server 端部署。
    • 此处推荐使用 NotionNext 开发者 tangly1024 配置的[Depoly]一键部署waline(调整了跨域访问的问题)
    • waline 官方 [Deploy] (仅供参考)
  • SettingsDomains 下,可以将二级域名指向该 vercel 服务,得到NotionNext所需的评论服务链接。 【教程:Vercel应用绑定自己的域名
  • 在NotionNext中添加 NEXT_PUBLIC_WALINE_SERVER_URL 环境变量。

设置管理员账户

登录 <serverURL>/ui/register 进行注册,第一个注册的账户会被设定成管理员。

进阶设置 - 配置 SMTP 服务

配置SMTP可以允许waline给用户提供邮件服务:提醒网站新增评论,给新注册用户发验证码,提供忘记密码重置邮件链接等。Railway 部署增加环境变量会自动刷新,而 vercel 部署增加环境变量后,记得手动 Redeploy(见 Vercel 基础配置步骤)

增加环境变量

上述部署方式进阶设置均为在服务中增加环境变量,添加以下新的环境变量(✅为必要设置):
  • AUTHOR_EMAIL:博主邮箱,用来区分发布的评论是否是博主本身发布的。如果是博主发布的则不进行提醒通知。
  • SMTP_SERVICE:SMTP 邮件发送服务提供商,可以在这个页面查看所有支持的运营商。如果没在列表中的可以自行配置 SMTP_HOSTSMTP_PORT
  • SMTP_HOST:SMTP 服务器地址,如果未配置 SMTP_SERVICE 的话该项必填。
  • SMTP_PORT:SMTP 服务器端口,如果未配置 SMTP_SERVICE 的话该项必填。
  • SMTP_USER:SMTP 邮件发送服务的用户名,一般为登录邮箱。
  • SMTP_PASS:SMTP 邮件发送服务的密码,一般为邮箱登录密码,部分邮箱(例如 163 邮箱)是单独的 SMTP 密码。
  • SITE_NAME:网站名称,用于在消息中显示。
  • SITE_URL:网站地址,用于在消息中显示。
  • SENDER_NAME:自定义发送邮件的发件人,选填。
  • SENDER_EMAIL:自定义发送邮件的发件地址,选填。
  • MAIL_SUBJECT:评论回复邮件标题自定义,选填。
  • MAIL_TEMPLATE:评论回复邮件内容自定义,选填。
  • MAIL_SUBJECT_ADMIN:新评论通知邮件标题自定义,选填。
  • MAIL_TEMPLATE_ADMIN:新评论通知邮件内容自定义,选填。

yandex.com 配置模板

yandex.com 免费注册,提供功能较为全面的服务。yandex mail 还提供免费的域名邮箱服务-Yandex Connect,免费提供 1000 个子邮箱,每个子邮箱 10G 容量。
yandex.com 在[Waline页面]没有预设,需要填写 SMTP_HOSTSMTP_PORT。具体参数可以在[yandex官方]找到。
NAME
VALUE
备注
AUTHOR_EMAIL
aaa@bbb.com
博主邮箱,用来区分发布的评论是否是博主本身发布的。如果是博主发布的则不进行提醒通知。
SMTP_HOST
smtp.yandex.com
SMTP 服务器地址
SMTP_PORT
465
SMTP 服务器端口
SMTP_USER
xxx@yandex.com
SMTP 邮件发送服务的用户名,为登录邮箱
SMTP_PASS
abcd…dcx
yandex.com 提供的 APP 密码
SITE_NAME
D_SUPER
网站名称,用于在消息中显示
SITE_URL
https://dsuper.xyz
网站地址,用于在消息中显示

Waline 个性化设置

设置用户等级

在部署的环境变量中添加 LEVELS 关键词,设置值为 0,10,20,50,100,200 ,表示:
等级
条件
默认等级标签
0
0 <= count < 10
潜水
1
10 <= count < 20
冒泡
2
20 <= count < 50
吐槽
3
50 <= count < 100
活跃
4
100 <= count < 200
话痨
5
200 <= count
传说
除了可以自定义等级判断规则之外,我们还可以在客户端自定义等级标签。
默认只提供了 6 级文案,但并不表示只能有 6 个级别。具体的等级上限是根据你设置的等级判断规则来的。增加新的等级建议自己配置上等级对应的文案,没有提供文案的话默认展示的就是 Level 10 这样的默认文案。
NotionNext 的实现我估计是修改: walinecomponents.js 但是没验证。[参考]

Waline 的更新

Railway 部署更新

notion image

Vercel 部署更新

在 vercel Redepoly
https://github.com/walinejs/waline/tree/main/example 新代码 push 到自己的 Github 库 vercel-waline.(可能并不需要😝)

其他问题

Vercel 部署 最新评论持续 Loading…

根据我个人的调试过程总结,下述步骤仅供参考。
{ "name": "comment", "github": { "silent": true }, "builds": [ { "src": "index.js", "use": "@vercel/node" } ], "routes": [ { "src": "/(.*)", "dest": "index.js", "headers": { "Access-Control-Allow-Credentials" : "true" , "Access-Control-Allow-Origin" : "*" , "Access-Control-Allow-Methods" : "GET,OPTIONS,PATCH,DELETE,POST,PUT" , "Access-Control-Allow-Headers" : "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" } } ] }
  • 检查在 Vercel 中,是否将 waline.你的博客.com 二级域名指向搭建的 waline 服务。
  • 在 NotionNext 中,更新 NPUBLIC_WALINE_SERVER_URLhttps://waline.你的博客.com 形式。

LeanCloud 国际版20220719政策变化对 Waline 的影响

结论是:不影响 vercel 部署访问 LeanCloud 的 Waline 创建方式。
邮件原文
8 月 1 日起,LeanCloud 国际版共享域名不再向中国大陆提供服务 为履行合规责任,降低平台风险,LeanCloud 国际版共享域名将于 2022 年 8 月 1 日起不再向中国大陆的最终用户提供服务,国际版共享域名仅服务于海外用户。 影响范围 8 月 1 日以后,国内的 IP 无法通过共享域名调用国际版的数据存储、即时通信、云引擎等全部服务,请求会响应错误码 1020。 开发者需要做什么 如果国际版应用主要服务海外用户,那么不需要做任何处理。如果应用的用户主体是在中国大陆,需要使用自己的域名或者将应用数据迁移至国内节点,下面依次介绍这两种方式。 使用自己的域名 参考域名绑定指南文档。使用数据存储、即时通信、推送与短信服务的用户,需要在控制台绑定 API 自定义域名;使用云引擎服务的用户,需要在控制台绑定云引擎自定义域名。 需要注意,如果你在 2020 年 10 月之前绑定过自定义域名,需要修改域名解析至控制台上显示的最新的 CNAME 地址,否则从中国大陆的访问会被禁止!新的地址可以在 应用设置 > 域名绑定 处看到。 2.将应用数据迁移至国内节点 可以将应用数据迁移至国内节点(华北节点或华东节点),数据的迁移方式是将国际版数据导出后再导入到国内节点的应用下。 需要注意: 数据存储服务的结构化数据支持导出与导入。 即时通信服务的会话记录与聊天记录无法导出。 云引擎需要重新部署。 短信服务的签名与模板需要重新审核。 推送厂商设置、开发证书上传、敏感词库上传等应用的设置信息需要重新配置。 国内节点的应用需要实名认证后使用,并且需要 绑定自己的已备案域名。 另外,工信部规定,网站接入多个云服务商时,需要在各云服务商处接入备案。 如果应用使用的自定义域名没有办理接入备案,请通过工单提交相应资料,以便我们协助办理接入备案。提交工单时,分类请选择 域名与备案 > 备案接入(企业) 或 备案接入(个人)。详见接入备案常见问题。 如有疑问,欢迎通过工单或论坛和我们联系。 The LeanCloud Team
回复
LeanCloud 国际版 IP 限制的这个事情,对 Waline 没有影像哈,Waline 是用 Vercel 访问的 LeanCloud,Vercel 是国外 IP 所以不受影响。 — By lizheming

关于 Railway 部署评论时间不一致的问题

(改) waline.pgsql,用于初始化数据库
CREATE SEQUENCE wl_comment_seq; CREATE TABLE wl_comment ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_comment_seq'), user_id int DEFAULT NULL, comment text, insertedAt timestamp(0) without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, ip varchar(100) DEFAULT '', link varchar(255) DEFAULT NULL, mail varchar(255) DEFAULT NULL, nick varchar(255) DEFAULT NULL, pid int DEFAULT NULL, rid int DEFAULT NULL, sticky boolean DEFAULT NULL, status varchar(50) NOT NULL DEFAULT '', "like" int DEFAULT NULL, ua text, url varchar(255) DEFAULT NULL, createdAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ; CREATE SEQUENCE wl_counter_seq; CREATE TABLE wl_counter ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_counter_seq'), time int DEFAULT NULL, url varchar(255) NOT NULL DEFAULT '', createdAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ; CREATE SEQUENCE wl_users_seq; CREATE TABLE wl_users ( id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_users_seq'), display_name varchar(255) NOT NULL DEFAULT '', email varchar(255) NOT NULL DEFAULT '', password varchar(255) NOT NULL DEFAULT '', type varchar(50) NOT NULL DEFAULT '', label varchar(255) DEFAULT NULL, url varchar(255) DEFAULT NULL, avatar varchar(255) DEFAULT NULL, github varchar(255) DEFAULT NULL, twitter varchar(255) DEFAULT NULL, facebook varchar(255) DEFAULT NULL, google varchar(255) DEFAULT NULL, weibo varchar(255) DEFAULT NULL, qq varchar(255) DEFAULT NULL, "2fa" varchar(32) DEFAULT NULL, createdAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP, updatedAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ;

推荐阅读


SimCompanies 销售盈利策略分析 以生鲜超市销售橘子为例Notion认证 - Notion Essentials Certification
  • Waline
  • Cusdis