服务器独立部署 Waline

警告
本文最后更新于 2023-04-23,文中内容可能已过时。

Waline 从 Valine 衍生而来,是一款简洁、安全的评论系统。Waline 功能丰富,作为博客评论系统是一个非常不错的选择。Waline 有多种部署方式可选,在拥有服务器的情况下,当然更希望将 Waline 部署到自己的服务器上。本文主要分享在服务器上使用本地数据库部署 Waline 的经验。

以下为 Waline 支持的所有部署方式,在个人服务器上可以选择在 Docker 容器中安装,也可以选择直接安装。Waline 数据库的支持十分多样,本地数据库有 MongoDB、MySQL/MariaDB、TiDB、PostgreSQL 四种选择。本文主要介绍的是以 MySQL/MariaDB 为后端数据库的部署流程,其他数据库的部署方式也完全类似。

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

准备数据库

打开 MySQL 命令提示符为 Waline 新建一个用户用于数据库访问(也可以使用现有用户),以及一个数据库为 Waline 提供后端数据存储支持,并为用户授予该数据库的所有访问权限。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 新建用户
CREATE USER <用户名> IDENTIFIED BY mysql_native_password BY '<密码>';

# 新建数据库
CREATE DATABASE <数据库名> DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;

# 授予用户数据库访问权限
GRANT ALL PRIVILEGES ON <数据库名>.* TO <用户>;

# 刷新用户数据
FLUSH PRIVILEGES;

:如果 Database 名称包含 “.”、“-” 等特殊字符时,需要用 ` 号括起来.

警告

一些版本的 PHP 与 MySQL 的身份认证插件 caching_sha2_password 不兼容,从 MySQL 8.0.4 开始 MySQL 默认身份验证插件从 mysql_native_password 改为 caching_sha2_password. 目前 Waline 并不默认支持这样的验证方式,如果提供给 Waline 的账户使用的是 caching_sha2_password 身份认证插件则将无法正确启动 Waline,可以使用修改用户密码的方式将身份认证插件更改为 mysql_native_password

1
ALTER USER <用户> IDENTIFIED WITH mysql_native_password BY '<密码>';

:出于安全性考量,建议为 Waline 单独建立使用 mysql_native_password 认证的账户,而非更改现有账户的认证方式。

使用提供给 Waline 的 账户启动 MySQL 提示符,导入 waline.sql 以完成 Waline 存储数据的三张表的构建。

1
2
USE <数据库名称>
SOURCE <waline.sql 文件路径>

下载安装 Waline

技巧
安装 Waline 之前请确保服务器上已经安装了 Node.js (>=14) 以及对应的 npm. 一些 Linux 发行版的官方 Repository 中也许只包含较早版本的 Node.js,可以根据 通过包管理器安装 Node.js的操作说明安装合适Node.js。

直接使用 npm 安装 Waline

1
npm install --prefix <Waline 安装路径> @waline/vercel

:不使用 --prefix <Waline 安装路径> 指定安装路径时,默认安装的到当前工作路径。

配置启动 Waline

目前几乎所有的 Linux 发行版都使用 systemd,这里也使用 systemd 来创建和管理 Waline 服务。首先创建 systemd 单元,在 /etc/systemd/system/multi-user.target.wants/waline.service 路径下创建 waline.service 文件,编辑文件填入相关配置,此处以 MySQL 举例:

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

[Service]
User=<运行服务用户>
Group=<运行服务用户组>
Restart=always
Type=simple
WorkingDirectory=<waline 工作路径>
ExecStart=/usr/bin/node <waline 安装路径>/node_modules/@waline/vercel/vanilla.js
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
Environment=MYSQL_HOST=127.0.0.1
Environment=MYSQL_PORT=3306
Environment=MYSQL_PREFIX=wl_
Environment=MYSQL_CHARSET=utf8mb4
Environment=MYSQL_SSL=false
Environment=MYSQL_DB=<waline 数据库名>
Environment=MYSQL_USER=<waline 数据库用户名>
Environment=MYSQL_PASSWORD=<waline 数据库用户密码>

[Install]
WantedBy=multi-user.target

systemd 支持 Environment=<环境变量1>=<值1> "<环境变量2>=<值2> <值3>" 的语法添加环境变量。systemd 也支持使用 EnvironmentFile=<文件路径> 的方式指定文件路径,然后在相应文件中进行环境变量的配置。在“<文件路径>”前添加前缀“-”可以忽略文件不存在的读取错误。 其他数据库的环境变量配置请参见官方文档

完成单元文件配置后,使用 sudo systemctl daemon-reload 重新载入 systemd 单元便可以启动 Waline 了。

1
2
sudo systemctl start waline  # 启动 Waline
sudo systemctl enable waline # 配置 Waline 开机自启

使用 sudo systemctl status waline 可以查看当前 Waline 的运行状态,Active 即表示成功运行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
sudo systemctl status waline
● waline.service - A simple comment system with backend support fork from Valine.
     Loaded: loaded (/etc/systemd/system/multi-user.target.wants/waline.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-04-21 15:25:49 BST; 1h 58min ago
   Main PID: 43772 (node)
      Tasks: 18 (limit: 882)
     Memory: 150.8M
     CGroup: /system.slice/waline.service
             ├─43772 /usr/bin/node /path_to_waline/node_modules/@waline/vercel/vanilla.js
             └─43788 /usr/bin/node /path_to_waline/node_modules/@waline/vercel/vanilla.js

Apr 21 15:25:50 my_server node[43772]: [2023-04-21T15:25:50.976] [43772] [INFO] - ThinkJS version: 3.2.14
Apr 21 15:25:50 my_server node[43772]: [2023-04-21T15:25:50.977] [43772] [INFO] - Environment: production

如果运行出现问题,可以使用 sudo journalctl -u waline 查看 Waline 完整运行日志进行问题排查。

Waline 成功运行后,就可以通过浏览器访问 http://<服务器IP或域名>:8360/ui/register 进行用户注册。第一个注册的用户将会自动成为管理员。

进行网页访问时请确保端口 8360 已开启,否则无法进行访问;如果你的服务器部署在中国大陆境内且未完成备案,那么你可能无法通过域名进行访问。 如果你不想使用端口进行访问,可以参考官方文档中的 Nginx 反向代理 配置文件进行配置。

Buy me a coffee
支付宝支付宝
贝宝贝宝
微信微信
0%