使用宝塔独立部署waline评论。

配置项目

安装依赖

下载waline-server-public项目,执行下面的命令安装需要的依赖,会生成一个node_modules文件夹。

1
yarn add @waline/vercel dotenv

添加环境变量

.env的文件中,填入下面的内容,按需修改相关内容和添加新的环境变量配置,其他环境变量参考官网服务端环境变量。里面的邮件配置按需修改成功你们自己的或者使用其他通知方式,具体参考文档评论通知。MySQL 也可以换成其它数据库,所支持的数据库参考文档的数据库服务支持

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 环境变量参考:https://waline.js.org/reference/server/env.html

# 基本配置
SITE_NAME="Nanbowan" # 站点名称
SITE_URL="https://blog.nanbowan.top" # 站点地址

# 显示配置
LEVELS="0,10,20,50,100,200" # 等级标签

# 安全配置
SECURE_DOMAINS="https://blog.nanbowan.top" # 安全域名
AKISMET_KEY="" # Akismet 反垃圾评论服务 Key

# 邮件配置
SMTP_HOST="" # SMTP 服务器地址
SMTP_PORT="" # SMTP 服务器端口
SMTP_USER="" # SMTP 用户名
SMTP_PASS="" # SMTP 密码
AUTHOR_EMAIL="" # 博主邮箱用来接收新评论通知

# MySql配置
MYSQL_DB="" # 数据库库名
MYSQL_USER="" # 数据库用户名
MYSQL_PASSWORD="" # 数据库密码

添加启动文件

新建启动文件index.js,写入以下启动脚本,已有index.js可不做修改。

1
2
3
const dotenv = require('dotenv')
dotenv.config()
require('@waline/vercel/vanilla.js')

部署到宝塔

添加站点和数据库

宝塔面板先添加一个纯静态的站点,并将域名解析好。创建相应的 MySQL 数据库,记录下数据库账号和密码。
接着初始化数据库,选择上面添加站点中创建的数据库,点击右侧的管理按钮打开phpMyAdmin

选择菜单栏的SQL,输入文档提供的waline.sql中的脚本。

注意下方的 SQL 脚本是复制的waline.sql中的内容,不保证是最新的脚本,随着 Waline 的更新,脚本内容也有可能会跟着更新,请以waline.sql中的内容为准。

SQL 脚本

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
SET NAMES utf8mb4;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


# Dump of table wl_Comment
# ------------------------------------------------------------

CREATE TABLE `wl_Comment` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`comment` text,
`insertedAt` timestamp 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(11) DEFAULT NULL,
`rid` int(11) DEFAULT NULL,
`sticky` boolean DEFAULT NULL,
`status` varchar(50) NOT NULL DEFAULT '',
`like` int(11) DEFAULT NULL,
`ua` text,
`url` varchar(255) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



# Dump of table wl_Counter
# ------------------------------------------------------------

CREATE TABLE `wl_Counter` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`time` int(11) DEFAULT NULL,
`reaction0` int(11) DEFAULT NULL,
`reaction1` int(11) DEFAULT NULL,
`reaction2` int(11) DEFAULT NULL,
`reaction3` int(11) DEFAULT NULL,
`reaction4` int(11) DEFAULT NULL,
`reaction5` int(11) DEFAULT NULL,
`reaction6` int(11) DEFAULT NULL,
`reaction7` int(11) DEFAULT NULL,
`reaction8` int(11) DEFAULT NULL,
`url` varchar(255) NOT NULL DEFAULT '',
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



# Dump of table wl_Users
# ------------------------------------------------------------

CREATE TABLE `wl_Users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`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 NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;




/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

脚本执行完成后生成三张表,用于存储评论的相关数据。

在宝塔中运行


将配置后的项目文件放到刚刚创建的宝塔目录中,然后打开宝塔面板的PM2管理器或者Node.js版本管理器管理器,两者互斥,没有的安装一个即可,这里以PM2管理器为例。
点击添加项目按钮添加一个项目,填写如下内容保存:

  1. 启动文件: /www/wwwroot/waline/index.js
  2. 运行目录: /www/wwwroot/waline
  3. 项目名称: waline

保存可以看到列表多出来一个项目,运行的端口号是8360,记住这个端口号。

然后在反向代理中配置到这个端口。不会反向代理的可以看这篇文章

验证

反代配置完后,打开访问[域名]/ui/register就能看到注册页面了,首个注册的用户就能成为系统管理员。