一、前言
目前主流的博客框架主要有wordpress、vuepress、hugo、Hexo、Typecho和halo,有的博客自带后端也有自己原生的评论系统,如wordpress、halo等,但也有如hexo、vuepress这种纯静态页面生成的博客,需要借助第三方服务,但不管是从服务稳定性还是以后的迁移来说,自部署一个私有的评论系统还是很有必要的。
二、主流第三方评论系统
1、Valine
Valine是一款快速、简洁且高效的无后端评论系统,支持多种博客程序,如Hexo、Jekyll、Typecho、Hugo和Ghost等。它基于LeanCloud,用户可以通过邮箱注册并创建Valine应用,获取App ID和App Key来进行使用。配置简单,仅需加入一些JavaScript代码。支持邮件通知和安全验证码。支持Markdown语法和多级回复。缺点是无后端可能导致安全问题,需要结合其他系统使用。
2、Waline
Waline是Valine的衍生物,带后端评论系统,具有强大的自由度。可以设置黑名单和访客记录等功能,保证评论系统更加安全。
3、Twikoo
Twikoo是一个简洁、安全、免费的评论系统,提供即时的邮件提醒和消息推送服务,具有个性化和便捷管理的特点。
4、Giscus
Giscus是一个轻量级的开源评论系统,可以轻松地添加到静态站点、博客、项目文档和许多其他类型的网站中。它使用GitHub帐户进行身份验证,并与GitHub Issues API进行集成,具有卓越的可维护性和可扩展性。支持跨平台,提供丰富的内置功能,如侧边栏快速管理、邮件通知、多元推送等。支持图片上传和内容检测。
5、Artalk
Artalk采用Golang编写,支持跨平台,提供丰富的内置功能,如侧边栏快速管理、邮件通知、多元推送等。它还支持图片上传和内容检测。
6、Cusdis
Cusdis是一个注重数据隐私的开源评论系统,轻量级且支持Disqus历史数据导入。它提供了电子邮件通知以及通过Webhook联动Telegram等方式进行推送。缺点是基于GitHub API进行评论管理可能不稳定,读者需要授权GitHub登录,非技术人员或使用移动端阅读的读者使用起来不方便,会将GitHub仓库弄得较乱,也不方便后续迁移到其他系统。还有一个非常明显的问题,当访客评论可以获取邮件通知,但当回复访客时,访客就无法获取到通知,非常不利于进行交流。
7、Gitalk
Gitalk 是一个基于 GitHub Issue 和 Preact 开发的评论插件。它基于 GitHub,可以利用已有的 GitHub 账号,无需额外注册和验证身份。支持多语言,包括英文和中文。支持快捷键提交评论(如 cmd|ctrl + enter)。无干扰模式可以设置为 true 开启,提供更好的阅读体验。易于集成,支持 Hexo、Hugo、Java、php 等语言开发的博客。方便、简单,适合新手使用。缺点是由于是基于 GitHub Issue 的,所以需要使用 GitHub 访问和管理评论,对于非开发者或没有 GitHub 账号的用户来说可能不太方便。对于没有使用 Hexo、Hugo、Java、php 等语言开发的博客,可能需要额外配置和调整。对于需要高度定制的评论系统,可能无法满足所有的需求。
三、部署评论系统
说明:这里所说的评论系统是可以自部署的评论系统,部署前请查看你的博客是否支持该评论。
1、Waline
1、部署后端
这里使用了 SQLite 数据库作为例子。关于 SQLite 和支持的数据库服务,请参考多数据库服务支持。
version: '3'
services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: 'Asia/Shanghai' # 时区,可以改
SQLITE_PATH: '/app/data' # SQLite数据库路径,不包含文件,可以改,尽量和上面的路径保持统一
JWT_TOKEN: '11111111111111111111111111' # 用户登录密钥,随机字符串即可
# 以下是邮件通知的变量,参考官方邮件通知一节,可以删改
SMTP_SERVICE: 'QQ' # 邮件SMTP 邮件发送服务提供商
SMTP_USER: '123465789@qq.com' # SMTP 邮件发送服务的用户名,一般为登录邮箱
SMTP_PASS: '1111111111111111' # SMTP 邮件发送服务的密码,一般为邮箱登录密码,部分邮箱(例如 163)是单独的 SMTP 密码
SMTP_SECURE: 'true' # 是否使用 SSL 连接 SMTP,不使用则填写‘false’
SITE_NAME: '博客' # 站点名称
SITE_URL: 'https://www.example.com' # 站点网址,无论是否启用邮件通知,都建议添加该变量
SECURE_DOMAINS: 'www.example.com' # 与站点网址保持一致即可,无需https://
AUTHOR_EMAIL: '123465789@qq.com' # 博主邮箱,用来接收通知邮件
注意:使用SQLite时先下载好sqlite数据库初始化文件至合适的位置,如data目录下,否则会启动失败,同样使用其他数据库时先导入官方的sql文件以完成表和表结构的创建。
2、使用NGINX进行反向代理访问
配置前置代理实现 HTTPS 访问
server
{
listen 80;
listen 443 ssl http2;
server_name 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;
}
}
3、访问控制台
地址后面跟上/ui进入管理页面,首次需要注册个账号默认为管理员
http://your.domain.server.name/ui/
2、Twikoo
1、部署后端
version: "3.5"
services:
twikoo:
container_name: twikoo
image: imaegoo/twikoo
environment:
- TWIKOO_THROTTLE=1000 # IP 请求限流,当同一 IP 短时间内请求次数超过阈值将对该 IP 返回错误,默认 250,可以自己修改
ports:
- 4000:8080 # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/app/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
restart: unless-stopped
2、使用NGINX进行反向代理访问
配置前置代理实现 HTTPS 访问
server {
{
listen 80;
listen 443 ssl http2;
server_name 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";
location / {
proxy_pass http://127.0.0.1:4000/; # 注意改成你实际使用的端口
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
}
3、访问控制台
到博客配置文件中配置 envId 为 https://
加域名(例如 https://twikoo.yourdomain.com
)
访问网址,出现这个说明部署成功:
评论的设置可以直接在博客这边设置
3、Cusdis
1、部署后端
Cusdis 支持连接多种数据库,支持 SQLite、MySQL、PostgreSQL ,这里默认使用SQLite
version: "3.9"
services:
cusdis:
image: "djyde/cusdis"
ports:
- "3000:3000"
environment:
- USERNAME=admin
- PASSWORD=password
- JWT_SECRET=ofcourseistillloveyou # 为 JWT 令牌
- NEXTAUTH_URL=http://IP_ADDRESS_OR_DOMAIN # 需要填写评论系统所用的域名/IP
- DB_URL=file:/data/db.sqlite
- 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
2、使用NGINX进行反向代理访问
配置前置代理实现 HTTPS 访问
server
{
listen 80;
listen 443 ssl http2;
server_name 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";
location / {
proxy_pass http://127.0.0.1:3000;
proxy_pass_header Authorization;
proxy_pass_header WWW-Authenticate;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3、配置站点
进入页面登陆,然后创建一个默认的网站,选择 Embed Code ,复制代码到网站的合适位置即可。
4、Artalk
1、部署后端
Artalk 支持连接多种数据库,支持 SQLite、MySQL、PostgreSQL、SQL Server ,这里默认使用SQLite,其他一些特性请查看官方文档。
version: "3.5"
services:
artalk:
container_name: artalk
image: artalk/artalk-go
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- ATK_LOCALE=zh-CN
- ATK_SITE_DEFAULT=Artalk 的博客
- ATK_TRUSTED_DOMAINS=https://your_domain
ports:
- 23366:23366
volumes:
- ./data:/data
2、使用NGINX进行反向代理访问
配置前置代理实现 HTTPS 访问
server
{
listen 80;
listen 443 ssl http2;
server_name 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";
location / {
proxy_redirect off;
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_pass http://localhost:23366/;
}
}
3、访问控制台
浏览器打开 https://your_domain
将出现 Artalk 后台登录界面。
执行命令创建管理员账户
docker exec -it artalk artalk admin
在评论框输入管理员的用户名和邮箱,控制台入口按钮将出现在评论框右下角位置。
评论区