Waline 是一款从 Valine 衍生的带后端评论系统。可以将 Waline 等价成有后端的 Valine。Waline 有着及其灵活的部署方式,也有多种数据存储方案选择。其最简单常用的部署方式是部署到 Vercel 或腾讯云开发。但是对于拥有自己的 VPS 或云服务器的朋友来说可能更愿意将 Waline 直接部署到自己的服务器上。本文就是将自己的部署经过和经验介绍给大家。

Waline 的部署方式

Waline 同时具有 Valine 的轻量和后端管理的方便两大特性,并且提供了及其灵活的部署方案,遵循轻量化、集约化设计思路的指导,可以方便地部署在各种 FaaS 平台上,包括著名的 Vercel、腾讯云 CloudBase 以及使用 Docker 独立部署的方案,提供 LeanCloud、MongoDB、MySQL、PostgreSQL 和 SQLite 的数据库支持,支持邮件通知、Telegram 通知、QQ 通知及微信通知接口的接入,提供大量可自定义参数接口。强大的扩展组合能力让 Waline 成为了集几乎所有优点于一身的评论系统组合,只要配置适当,它就是静态站点最强大的评论系统。

Waline评论系统

以下是 Waline 可选的部署方案。

客户端脚本 服务端部署 数据存储
@waline/client Vercel LeanCloud
MiniValine Deta CloudBase
AprilComment CloudBase MongoDB
轻服务 MySQL
百度云 CFC SQLite
阿里云 FC PostgreSQL
Railway GitHub
Render Deta Base
Docker 轻服务
独立部署

如果你热衷于 Serverless 这种模式,那么各种 Function-as-a-Service (Faas)的平台当然是你最好的选择,比如腾讯云 cloudbase、阿里云 FC 等等。

但是如果你拥有自己的服务器,我更推荐你将 Waline 直接独立部署到你的服务器上。因为目前的 Faas 服务要么收费不便宜,要么国内连接不稳定。如果你已经买了云服务器,那为什么不充分利用您的服务器呢?并且代码直接部署到你的服务器上,调整起来更方便。

部署环境准备

服务器的配置和域名解析这些基本操作就不多说了,首先当然是安装 nodejs 和 nginx 了。根据你的发行版自行安装即可。

nodejs 是用来启动 Waline 服务的,nginx 是反向代理服务器,可以将 Waline 服务端代理向互联网提供服务,并且 nginx 可以给 Waline 套上 SSL 加密。

此外就是选择你的数据库,Waline 可以支持多种数据库,我选择的是 mysql 的开源替代版本 MariaDB。

安装了 MariaDB 后,一般还需要使用命令:

1
# mysql_secure_installation

进行进一步配置,在进行了 root 帐户设置密码,删除匿名用户,限制 root 用户对本地计算机的访问权限并删除测试数据库等一系列操作后,才算安装好了 MariaDB。

然后就是为 Waline 设置一个用户和数据库。

首先以 root 用户身份登录到 MariaDB。

1
mysql -u root -p

现在,为 Waline 安装创建一个数据库。 比如创建一个名为 dbwaline 的数据库,当然您可以使用其他数据库名称。

1
CREATE DATABASE dbwaline DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

注意要输入分号。

创建一个新用户并设置密码。 在这里请使用你自己的密码。

1
CREATE USER 用户名 IDENTIFIED BY '密码';

然后授予该用户完全访问数据库的权限。

1
GRANT ALL PRIVILEGES ON dbwaline.* TO 用户名;

最后刷新数据库表并退出 MariaDB。

1
2
3
FLUSH PRIVILEGES;

exit;

最后,还需要导入 waline.sql 文件初始化表结构。

将该文件下载到你的服务器上,然后登入 MariaDB。导入文件。

登入数据库:

1
mysql -u root -p

选择数据库:

1
use dbwaline

导入文件:

1
source 文件路径

这样准备工作就完成了。

安装 Waline 并配置 systemd 单元文件

选择你想要安装 Waline 的位置,然后 cd 进入该目录。

使用 npm 安装 Waline:

1
npm install @waline/vercel

然后创建 systemd 单元。对于 systemd 发行版,我都倾向于使用 systemd 管理服务器进程。

创建并编辑文件:

/etc/systemd/system/waline.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=A simple comment system with backend support fork from Valine.

[Service]
ExecStart=/usr/bin/node /waline安装路径/node_modules/@waline/vercel/vanilla.js
Restart=always
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
Environment=MYSQL_HOST=127.0.0.1
Environment=MYSQL_PORT=3306
Environment=MYSQL_DB=dbwaline
Environment=MYSQL_USER=用户名
Environment=MYSQL_PASSWORD=密码
WorkingDirectory=/srv/waline

[Install]
WantedBy=multi-user.target

在 systemd 的 .service 文件中,你可以使用 Environment= 的方式添加环境变量,也可以使用 EnvironmentFile= 的方式指定文件路径,然后在该文件中配置环境变量。Waline 的各种扩展功能都需要你灵活的配置环境变量。

编辑好了 .service 文件,就可以使用一下命令重新载入 systemd 单元。

1
sudo systemctl daemon-reload

现在可以启动 Waline 试试看了:

1
sudo systemctl start waline.service

使用一下命令检查进程运行情况:

1
sudo systemctl status waline.service
systemd 启动 Waline

如果第三行显示:Active: active (running),则说明启动成功了。

这时用浏览器访问 http://你服务器的ip或域名:8360/ui/register 地址,便能看到注册界面。第一个注册的用户会成为管理员。如果你的服务器有防火墙设置,需要开启 8360 端口,否则你无法访问。

Waline评论系统

设置反向代理用域名访问

如果你不想带端口访问的话,可以增加 Nginx 80 和 443 端口的反代。可参考如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
server
{
listen 80;
listen 443 ssl http2;
server_name your.domain.server.name;
root /www/wwwroot/your.domain.server.name;
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}

# SSL setting
ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";

# proxy to 8360
location / {
proxy_pass http://127.0.0.1:8360;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
# cache
add_header Cache-Control no-cache;
expires 12h;
}
}

客户端配置

最后在你的客户端配置你的 Waline 就可以了。

比如我是 hexo 博客,在主题配置文件中设置:

1
2
3
4
5
6
7
waline:
js: https://npm.elemecdn.com/@waline/client@latest/dist/Waline.min.js
path: # 全局评论地址 目前设置全局评论地址后visitor失效,这是waline的问题
placeholder: 快来评论吧~ # 评论占位提示
meta: [nick,mail,link] # waline comment header info
requiredFields: [nick,mail]
serverURL: http://你服务器的ip或域名:8360 # Waline 的服务端地址(必填)

如果你设置了 nginx 反代,则 serverURL 不需要带端口,设置了 ssl 则 serverURL 应该使用 https。

这样就可以愉快的使用 Waline 评论系统了,后续如果需要设置邮件通知等功能只需要按照官方文档设置环境变量就可以了,环境变量通过编辑 systemd 的 .service 文件,使用 Environment= 或 EnvironmentFile= 的方式设置即可。