目 录CONTENT

文章目录

博客常用评论系统自部署

简中仙
2024-02-01 / 1 评论 / 0 点赞 / 694 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文如有错误或者侵权的地方,欢迎您批评指正!

一、前言

目前主流的博客框架主要有wordpressvuepresshugoHexoTypechohalo,有的博客自带后端也有自己原生的评论系统,如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

访问网址,出现这个说明部署成功:

评论的设置可以直接在博客这边设置

e7ffea50bdd337b17066bad211357bb3.png

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

在评论框输入管理员的用户名和邮箱,控制台入口按钮将出现在评论框右下角位置。

0

评论区