由于之前将博客全静态化了导致评论无法使用,原本是不打算做的,但是还是又挺多朋友通过各种各样的渠道联系我交流问题,故打算解决一下这个问题,方便后续交流。
我的解决方案是能自建就自建,无法自建的基本上就不考虑了。Disqus 不能自建,加之实际使用起来效果并不理想,隐私问题,还有界面不太喜欢就直接被我 Pass 掉了。
相交于 Disqus,Commento++也是不错的解决方案,但是界面不太喜欢,以及不够轻量,故没有选择,综合来考虑来看,Cusdis是非常不错的解决方案,足够轻量、支持自建、UI简洁,致使我最终选择了 Cusdis。
此处介绍两种方式 Docker、手工部署 Cusdis,均基于宝塔面板。
项目介绍
项目地址:Cusdis
Cusdis是Disqus的开源、轻量级(约5kb gzip)、隐私友好的绝佳替代品,主要用于纯静态化网站。
Cusdis 并非旨在成为 Disqus 的完整替代品。它的目的是为小型网站(例如您的静态博客)实现一个极简主义和可嵌入的评论系统。
官方文档:Cusdis Docs
特性
- Cusdis 是开源的并且可以自我托管。因此,您拥有自己的数据。
- SDK 是轻量级的(~5kb gzipped)。
- Cusdis 不需要您的用户登录即可发表评论。
- Cusdis 根本不使用 cookie。
缺点:
- Cusdis 正处于其开发的早期阶段。
- 没有垃圾邮件过滤器,因此,您必须手动审核您的评论部分,并且在您批准之前不会显示评论。
其UI简洁、支持自托管、支持邮件推送,在邮件内即可进行批准以及回复是我比较看重的功能。
环境配置
由于 Cusdis 基于Node.js 开发,采用 SQLite 或 MySQL 或 Postgresql 数据库存储数据,所以配置要求如下:
- 系统上需要安装 Node.js 和 yarn
- 服务器上安装了 MySQL 或 Postgresql
本文基于宝塔面板,使用 SQLite 进行安装
安装配置 Node.js
如您已安装 Node.js 和yarn 并且配置成功,则此步可以跳过。
安装 Node.js 命令如下
cd /www/server/nodejs
#国外服务器选择
wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.gz
#国内服务器选择
wget https://registry.npmmirror.com/-/binary/node/v14.15.0/node-v14.15.0-linux-x64.tar.gz
tar -zvxf node-v14.15.0-linux-x64.tar.gz
设置 Node.js 全局变量:
在宝塔面板打开 /etc/profile 文件,将以下配置输入文件最后面,并保存
export NODE_HOME=/www/server/nodejs/node-v14.15.0-linux-x64
export PATH=$NODE_HOME/bin:$PATH
输入以下命令用于重载全局配置。
source /etc/profile
输入 node -v 和 npm -v 返回以下信息即配置完成
配置成功
安装 yarn
npm install -g yarn
查看版本信息,如遇 yarn:未找到命令,请看:《NodeJS 和 npm 配置全局变量》
国内服务器此步骤由于 Node.js 没有大陆节点,速度较慢。请耐心等待
千万不要使用淘宝的 registry 镜像源!!!!!!!!
否则安装依赖会出错!!!!!!!!
部署 Cusdis
此处介绍两种方式部署,手动部署与使用Dokcer
手动部署
一、克隆仓库
cd /www/wwwroot
git clone https://github.com/djyde/cusdis.git
二、安装 Cusdis 所需依赖
国内服务器此步骤由于 Node.js 没有大陆节点,速度较慢。请耐心等待
千万不要使用淘宝的 registry 镜像源!!!!!!!!
否则安装依赖会出错!!!!!!!!
cd cusdis
yarn install
三、配置 .env 文件
在 cusdis 文件夹中新建一个名为 .env 的文件
文件具体配置如下:
USERNAME=admin
PASSWORD=password
JWT_SECRET=ofcourseistillloveyou
NEXTAUTH_URL=http://IP_ADDRESS_OR_DOMAIN
HOST=http://IP_ADDRESS_OR_DOMAIN
DB_TYPE=sqlite
DB_URL=file:./data.db
#以下配置为 EMAIL 配置 可选
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=your gmail email
SMTP_PASSWORD=<app password>
SMTP_SENDER=your gmail email
其中
PASSWORD 为密码
JWT_SECRET 为 JWT 令牌
NEXTAUTH_URL 与 HOST 需要填写项目所用的域名/IP
DB_TYPE、DB_URL 为 数据库类型、数据地址
SMTP_HOST 为 SMTP 主机
SMTP_USER 为 SMTP 用户名
SMTP_PASSWORD 为 SMTP 密码
SMTP_SENDER 为发件人电子邮件地址
SMTP_PORT 为 SMTP 端口 默认为 587
SMTP_SECURE 为是否启用 SMTP 安全,默认值为true
四、构建 Cusdis
yarn run build:without-migrate
这一步可能会出现错误,错误代码如下:
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! cusdis@ db:generate: `prisma generate --schema ./prisma/$DB_TYPE/schema.prisma`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the cusdis@ db:generate script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
这一步需要到 ./cusdis/prisma 选择需要设置的数据库类型,然后将该文件夹内的 schema.prisma 文件 复制到 ./cusdis/prisma 构建即可解决。
五、运行 Cusdis
yarn run start:with-migrate
设置程序守护,此处以systemd为例
打开目录 /usr/lib/systemd/system/
新建文件:cusdis.service
文件配置如下(以下配置仅供参考):
[Unit]
Description=CusdisServer
[Unit]
Description=CusdisServer
[Service]
ExecStart=/www/server/nodejs/node-v14.15.0-linux-x64/bin/npm start
Restart=always
Environment=PATH=/usr/bin:/usr/local/bin:/www/server/nodejs/node-v14.15.0-linux-x64/bin
Environment=NODE_ENV=production
WorkingDirectory=/www/wwwroot/cusdis/
[Install]
WantedBy=multi-user.target
此时保存即可,运行:
# 更新配置
systemctl daemon-reload
# 启动服务
systemctl start cusdis
# 设置开机启动
systemctl enable cusdis
详细的管理命令如下:
# 启动服务
systemctl start cusdis
# 设置开机启动
systemctl enable cusdis
# 停止服务
systemctl stop cusdis
# 重启服务
systemctl restart cusdis
# 查看状态
systemctl status cusdis
# 更新配置
systemctl daemon-reload
Docker部署
一、获取镜像
镜像名如下:
djyde/cusdis
国内服务器获取镜像会极慢,请耐心等待。
二、创建容器
配置如下:
容器端口:3000
容器目录:/data
环境变量:
-e USERNAME=admin \
-e PASSWORD=password \
-e JWT_SECRET=ofcourseistillloveyou \
-e DB_URL=file:/data/db.sqlite \
-e NEXTAUTH_URL=http://IP_ADDRESS_OR_DOMAIN \
其中
USERNAME 为用户名
PASSWORD 为密码
JWT_SECRET 为 JWT 令牌
NEXTAUTH_URL 需要填写项目所用的域名/IP
DB_TYPE、DB_URL 为 数据库类型、数据地址
#以下配置为 EMAIL 配置 可选
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=your gmail email
SMTP_PASSWORD=<app password>
SMTP_SENDER=your gmail email
启动完成。
后语
设置反向代理
宝塔新建站点 -> 打开SSL - > 反向代理 ->添加反向代理
目标 URL 填写:http://127.0.0.1:3000
配置站点
进入页面登陆,然后创建一个默认的网站,选择 Embed Code ,复制代码到网站的合适位置即可。
WordPress 配置
以下配置仅供参考,主要包括 data-page-id、data-page-url、data-page-title
data-page-id="<?php the_ID(); ?>"
data-page-url="<?php $id =get_the_ID();echo get_permalink($id); ?>"
data-page-title="<?php the_title(); ?>"
跨域问题
最开始使用的时候可能会出现跨域问题。
在反向代理的配置文件中添加:
add_header 'Access-Control-Allow-Origin' 'yousitedomain';
两种方法,更推荐 DOCKER 如选择手工安装,可能会遇到各种各样的问题。