从零开始部署waline服务器

前言

waline 是一款简洁、安全、支持多种部署方式的评论系统。网上关于如何使用Vercel+LeanCloud进行部署的资料很多很详细,但这类免费平台的稳定性很差。如果自己有服务器,在自己服务器上部署无疑是更好的选择。遗憾的是,很少有文章会详细地记录如何使用独立服务器部署waline,大多数只记录了其中某些关键的步骤,容易让新手感到困惑。

因此在看了官方文档和一些独立部署的文章之后,这里总结了如何从零开始,一步一步地在一台服务器上部署waline。

服务器:腾讯云轻量应用服务器(CentOS 8系统)

数据库:MySQL


安装node环境

运行curl命令,下载并运行NodeSource安装脚本。setup_16.x里的16是版本号,可根据自己需要修改。该脚本运行后会将NodeSource签名密钥添加到您的系统,创建yum储存库文件,安装所有必需的软件包,并刷新yum缓存。

1
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash

接着运行以下命令安装Node.js和npm。

1
sudo yum install -y nodejs

安装完成之后,可以运行以下命令判断是否安装成功。

1
2
3
4
5
node --version
# v16.20.0

npm --version
# 8.19.4

配置mysql环境

安装mysql

首先通过以下命令确保CentOS系统处于最新的状态。

1
sudo yum update

然后在服务器的任意目录下,使用yum下载MySQL 8.0数据库版本。

1
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

下载完成后,通过ls指令可以看到mysql80-community-release-el7-3.noarch.rpm已成功下载到服务器上。此时可以执行以下指令安装数据库。

1
sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm

安装完成之后,可以直接使用yum安装MySQL Server。在遇到系统提示时输入y并按Enter确认安装即可。

1
sudo yum install mysql-server

至此,mysql的安装工作已全部完成。

初始化mysql设置

安装好mysql之后,需要执行以下指令启动mysql,并查看mysql的状态。

1
2
3
4
5
6
# 开启mysql
service mysqld start
# Redirecting to /bin/systemctl start mysqld.service

# 查看状态
service mysqld status

然后运行以下指令进入mysql。mysql的root用户初始密码默认为空,所以第一次进入时,在输入密码处直接按回车即可。

1
mysql -u root -p

进入mysql之后,先设置一下root的密码。

1
2
3
4
5
# 设置密码,显示指定了使用mysql_native_password的加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

# 刷新权限
flush privileges;

完成设置之后通过以下指令退出mysql。

1
exit;

创建waline使用的数据库

按照官网文档的指引,需要在服务器的任意目录下,创建一个名为waline.sql的文件,然后将官网用于创建数据库表结构的文件复制粘贴到waline.sql中。

1
2
# 创建并打开waline.sql文件,具体编辑文件的方式可以查询vim的用法
vim waline.sql

完成编辑之后,输入pwd查看并复制waline.sql所在的目录。

1
2
3
# 这里我直接在root下创建waline.sql文件
pwd
# /root

接着用前面设置的密码进入mysql,并创建一个名为waline的数据库。

1
2
3
4
create database waline;

# 查看是否创建成功
show databases;

然后进入新创建的waline数据库,通过source指令创建表结构。

1
2
3
4
5
6
7
8
# 将当前数据库切换成waline
use waline;

# waline.sql文件所在的目录
source /root/waline.sql;

# 查看当前数据库下的表,可以看到wl_Comment,wl_Counter和wl_Users这三张表被创建了
show tables;

最后切换到mysql数据库,将waline数据库的所有权限全部开放给root用户。

1
2
3
4
5
# 这里指的是切换到一个名为mysql的数据库,这里保存着所有用户数据
use mysql;

# 将waline数据库的所有权限全部开放给root用户
GRANT ALL ON waline.* TO 'root'@'localhost' ;

操作完成之后先退出mysql,然后输入以下指令重启mysql服务。

1
2
# 重启mysql
service mysqld restart

此时可以选择删除前面创建waline.sql文件。

1
rm -rf waline.sql

部署waline

创建waline项目

首先,在服务器的任意位置创建一个目录waline-service

1
mkdir waline-service

紧接着在该目录下初始化项目。此步骤会创建package.json文件,该文件用于记录项目所依赖的module,并配置项目的相关属性。

1
2
3
cd waline-service

npm init -y

初始化完成之后,直接安装waline的服务器依赖包。

1
npm install @waline/vercel

配置环境变量

下载完成后,还需要进行环境变量的配置。直接修改全局环境变量配置文件并不是推荐的做法,使用dotenv不污染全局环境变量配置文件的前提下创建环境变量无疑是更好的做法。

1
2
# 安装dotenv的依赖包
npm install dotenv

然后创建环境变量.env文件,并根据官方文档的配置说明写入环境变量配置项。

1
2
3
4
5
6
7
8
9
10
11
12
13
# waline环境变量配置
# 使用的数据库是mysql,所以这里需要设置mysql的相关配置

# 数据库连接地址
MYSQL_HOST=127.0.0.1
# 数据库连接端口号
MYSQL_PORT=3306
# 数据库名
MYSQL_DB=waline
# 连接数据库用户名
MYSQL_USER=root
# 连接密码
MYSQL_PASSWORD=root的密码

编辑完成之后,新建main.js文件,指定环境变量配置的覆盖逻辑。

1
2
3
4
5
6
// 引入dotenv
const dotenv = require('dotenv')
// 调用config方法合并.env环境变量
dotenv.config()
// 引入并执行该文件
require('@waline/vercel/vanilla.js')

运行项目

配置完成之后,可以使用node进程管理工具pm2来运行项目。

1
2
# 这里需要先全局安装pm2,如果提示权限不足安装失败,需要切换到root用户再重新安装
npm install -g pm2

接着创建ecosystem.config.js文件,指定pm2的执行参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module.exports = {
apps: [
{
name: 'waline-service', // 项目名称
script: './main.js', // 执行入口
cwd: './', // 工作路径
watch: true, // 是否开启监听
ignore_watch: ['logs', '.git', 'node_modules'], // 监听器忽略文件目录
out_file: './logs/waline_info.log', // 日志输出路径
error_file: './logs/waline_err.log', // 报错日志输出路径
log_date_format: 'YYYY-MM-DD HH:mm', // 日志时间格式 会在每一行日志的前面加上该格式的时间戳
merge_logs: true, // 合并日志文件名称
restart_delay: 1000, // 崩溃重启服务时间间隔
max_restarts: 3 // 崩溃后重启次数
}
]
};

然后修改package.json里的scripts字段配置启动项,让pm2使用ecosystem.config.js文件的执行参数运行项目。

1
2
3
4
5
6
7
8
9
10
{
...
"scripts": {
"start": "pm2 start ./ecosystem.config.js",
"stop": "pm2 stop waline-service",
"log": "pm2 log waline-service",
"status": "pm2 status"
},
...
}

最后,执行以下指令运行项目。

1
2
3
4
5
6
7
# 运行项目
npm run start

# 其他常用的指令
npm run stop # 停止服务
npm run log # 查看服务日志
npm run status # 查看服务运行状态

除此之外,还可以使用pm2设置waline项目开机自启动,具体命令如下。

1
2
3
4
5
6
7
8
# 在项目运行期间执行,保存当前任务
pm2 save

# 将保存的任务生成开机自启动服务配置pm2-root.service
pm2 startup

# 允许任务开机自启动
systemctl enable pm2-root

使用waline

注册管理员并测试

waline默认使用8360端口,因此需要确保云服务器的8360端口处于开放的状态。以腾讯云的轻量应用服务器为例,需要手动添加一个开放8360端口的安全组

开放8360端口

然后可以在浏览器输入http://服务器公网IP:8360/进入waline的测试界面。此时点击login则会出现登录界面,点击注册或者使用关联账号登录之后,waline会默认将第一个用户注册为后台管理员。

waline测试界面

注册完成之后,可以输入http://服务器公网IP:8360/ui进入后台管理系统,并在里面管理评论数据。

waline后台管理界面

在hexo中接入waline

hexo并没有默认接入waline,但开发者可以在自主开发的主题中接入。

对于支持waline的hexo主题来说,接入waline最重要的参数是serverURL,也就是前边用于测试评论效果的http://服务器公网IP:8360/

以本博客使用的hexo-fluid-theme为例,只需要在_config.fluid.yml中开启评论功能之后,在填入上述链接即可。

_config.fluid.yml


参考链接

  1. 独立部署waline评论系统
  2. Waline 服务端独立部署解决方案
  3. Waline 服务端一键独立部署解决方案
  4. 在CentOS 7上安装 MySQL 保姆级教程

从零开始部署waline服务器
https://asancai.github.io/posts/17ed14e0/
作者
RainbowCyan
发布于
2023年6月3日
许可协议