配置 NotionNext 博客 Waline 评论系统
2022-6-16|2023-3-16

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
按钮进行部署即可。

- 进入管理界面后,选择
PostgreSQL
→Query
,将 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所需的评论服务链接。

- 在NotionNext中添加
NEXT_PUBLIC_WALINE_SERVER_URL
环境变量。
进阶设置
- 在红框选项下,设置服务的环境变量。

Vercel + LeanCloud 部署
Vercel 部署使用 LeanCloud 数据库服务,需要设置三个数据库相关的配置参数。
基础配置步骤
- 注册LeanCloud 国际版账号,创建应用,在
设置
→应用凭证
中获得:
AppID
+ AppKey
+ MasterKey
- 点击 [Depoly] (By tangly1024),跳转至 Vercel 进行 Server 端部署。
- 此处推荐使用 NotionNext 开发者 tangly1024 配置的[Depoly]一键部署waline(调整了跨域访问的问题)
- waline 官方 [Deploy] (仅供参考)

- 在
Settings
→Environmrnt Variables
设置数据库相关环境变量:
在环境变量(Environment Variables)中配置
LEAN_ID
、LEAN_KEY
和 LEAN_MASTER_KEY
三个环境变量。它们的值分别对应在 LeanCloud 中获得的 AppID
、AppKey
和 MasterKey
。NAME | VALUE |
LEAN_ID | ${ AppID } |
LEAN_KEY | ${ AppKey } |
LEAN_MASTER_KEY | ${ MasterKey } |

Deployments
→Redeploy
,让修改的环境变量生效。

- 在
Settings
→Domains
下,可以将二级域名指向该 vercel 服务,得到NotionNext所需的评论服务链接。 【教程:Vercel应用绑定自己的域名】

- 在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) ) ;

- 在 Connect 中(见上图)获取数据库连接参数:
PG_DB
,PG_USER
,PG_PASSWORD
,PG_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] (仅供参考)
- 在
Settings
→Domains
下,可以将二级域名指向该 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_HOST
和SMTP_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 容量。
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 部署更新

Vercel 部署更新
在 vercel Redepoly
将 https://github.com/walinejs/waline/tree/main/example 新代码 push 到自己的 Github 库
vercel-waline
.(可能并不需要😝)其他问题
Vercel 部署 最新评论持续 Loading…
根据我个人的调试过程总结,下述步骤仅供参考。
- 如果使用waline官方的 Depoly 方式,其 Github 文件 vercel.json 需按照 修改为:walinetangly1024 • Updated Jun 17, 2022
{ "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_URL
为https://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 部署评论时间不一致的问题
可能的解决方法:https://github.com/walinejs/waline/discussions/1177 感谢 @junhuame 等.
(改) 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) ) ;
推荐阅读
- NotionNext 开发者博客:https://tangly1024.com/article/notionnext-valine
- tangly1024/waline - Github: https://github.com/tangly1024/waline
- Railway 部署: https://waline.js.org/guide/deploy/railway.html
- 快速上手-Vercel 部署: https://waline.js.org/guide/get-started/#vercel-部署-服务端
- Waline 评论系统的介绍与基础配置: https://guanqr.com/tech/website/introduction-and-basic-setting-of-waline/
- 8月1日起,LeanCloud国际版共享域名…: https://github.com/walinejs/waline/discussions/1203
- Waline 显示配置: https://waline.js.org/reference/server/env.html#显示
- Waline locale 选项: https://waline.js.org/cookbook/customize/locale.html#locale-选项
- Waline 多数据库服务支持: https://waline.js.org/guide/database.html#postgresql
- NotionNext/Components (感谢 NotionNext 交流群 @ethereal619)
- Waline
- Cusdis