本文最后更新于 2024-03-26,文章内容可能已经过时。

折腾博客的过程中,评论系统可供选择的有很多,最开始我是使用waline/twikoo,但是最近换到Artalk,简单写记录一下使用感受以及部分教程。

Waline

优点:

  • 自由评论 —— 完全的 Markdown 支持,同时包含表情、数学公式、HTML 嵌入
  • 轻量 —— 53kb gzip 的完整客户端大小
  • 强大的安全性 —— 内容校验、防灌水、保护敏感数据等
  • 登录支持 —— 在允许匿名评论的基础上,支持账号注册,保持身份
  • 完全免费部署 —— 可免费部署在 Vercel 上
    缺点:
  • Vercel评论邮件发送较慢:

目前提交评论基本需要3-4s的响应时间,处理post请求时,需要await发送通知的任务。

if (comment.status !== 'spam') {
      const notify = this.service('notify', this);
      await notify.run(
        { ...cmtReturn, mail: resp.mail, rawComment: comment },
        parentReturn ? { ...parentReturn, mail: parentComment.mail } : undefined
      );
    }
  • 后台无法控制前端
    Waline后台界面十分简洁,只提供基本的评论、用户管理和导入导出功能,大部分配置都需要配置相关环境变量(这也算是优点,但是个人不太习惯)

搭建webhook服务提高waline评论相应速度

wanline评论系统在配置邮件提醒服务后,发送评论会有7s左右的等待时间,但使用管理员账号登陆后发送相应速度非常快,参考:
walinejs/waline: 💬 A Simple, Safe Comment System (github.com)

Waline 邮件异步推送 - 星辰日记

部署Nginx Proxy Manager

  1. 安装docker以及docker compose
  2. 部署 Nginx Proxy Manager(或 Nginx)
  3. 防火墙放行443,80,81端口
  4. 访问ip:81,初始化
    默认密码为:
Email:    admin@example.com
Password: changeme

注意:可能出现问题
image.png
解决方法:
docker-compose down

rm -rf data/ letsencrypt/

修改 docker-compose.ymal:

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "(PASSWORD)"
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: '(PASSWORD)'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: '(PASSWORD)'
    volumes:
      #- ./data/mysql:/var/lib/mysql
      - ./mysql:/var/lib/mysql

重启:
docker-compose up -d

安装waline-async-mail

  1. 下载源码 git clone https://github.com/soxft/waline-async-mail && cd waline-async-mail
  2. 编译文件 go build -o waline_mailer main.go
  3. 修改并重命名配置文件: 编辑 config.example.yaml 并重命名为 config.yaml
  4. 赋权 chmod +x waline_mailer
  5. 运行 ./waline_mailer
    不出意外,你会看到提示,告知你服务运行的端口,也可以修改config.yml进入debug模式。
  6. A记录解析域名到服务器IP,使用Nginx Proxy Manager反代端口,申请SSL证书(Nginx Proxy Manager提供图形化界面,配置方式十分简单)

或使用 【复刻】在 Fly.io 上搭建 Alist - Limour's Blog的docker部署方式:

mkdir -p ~/app/mailpush && cd ~/app/mailpush && nano docker-compose.ymlgit clone --depth=1 
https://github.com/soxft/waline-async-mail.gitcd waline-async-mailnano config.example.yaml # 修改成自己的邮件服务
nano templates/guest.html && nano templates/owner.html # 修改成自己的邮件模板
docker build -t xsot/waline-async-mail . && docker image prunecd ~/app/mailpushsudo 
docker-compose up -d

docker-compose.yml

version: "3"
	services:  
	waline-async-mail:    
		image: xsot/waline-async-mail:latest    
		volumes: ./waline-async-mail/config.example.yaml:/app/config.yaml    
		restart: always 
	networks:  
		default:    
			external: true    
			name: ngpm
  • 反代
    注意 "waline-async-mail/" 后面有 "/"

配置环境变量

根据waline部署方式配置环境变量WEBHOOK的值。

Artalk

Artalk 是一款简洁的自托管评论系统,你可以在服务器上轻松部署并置入前端页面中。

来到你的博客,或是任意位置,放置 Artalk 评论框,让页面具备丰富的社会化功能。

功能亮点

  • 轻量设计

    前端采用 TypeScript (Vanilla JS),轻量级,无冗余依赖,仅 ~30KB (gzipped)。

    后端采用 Golang 重制 (Artalk v2),跨平台,体积小巧,五脏俱全,快速部署。

  • “麻雀虽小,五脏俱全”

    • Markdown 语法 + 代码高亮
    • 通知中心 - 站内:侧边栏 + 红点标记
    • 多形式推送 - 站外:邮件、TG、钉钉、飞书 + 异步执行
    • 评论审核:折叠 / 反垃圾 / 频率限制 / 滑动验证
    • 多站点:共用同一个后端程序,多站点集中化管理
    • 表情包:支持 OwO 格式 + 动态加载
    • Artrans:评论数据快速迁移 (导入 / 导出) 工具
    • 评论投票 / 身份徽章 / 密码验证 / 说说模式
    • 评论盖楼 / 评论分页 / 滚动加载 / 实时预览
    • 评论排序 / 评论置顶 / 评论防丢 / 自动填充
    • 图片上传 / 页面管理 / 站点隔离 / 夜间模式

    穷举不是我们的特长,更多有趣的功能期待你来探索!

  • “Unlimited Blade Works”

    Artalk 正在持续成长,创意由你发挥,价值由你赋予!

    不论是 Vue、React、Svelte 的前端项目,还是 WordPress、Typecho、Hexo 等博客系统,都可以快速引入 Artalk,结合诸位的聪明才智,我们相信 Artalk 能够自如应对各种业务场景。

我为什么要使用Artalk

  1. 独立控制面板,后台可以控制前端大部分功能。
  2. 邮件通知异步执行。

部署

  1. 安装Docker
  2. 部署
docker run -d \
    --name artalk \
    -p 8080:23366 \
    -v $(pwd)/data:/data \
    --restart=always \
    artalk/artalk-go
  1. 创建管理员账户
docker exec -it artalk artalk admin
  1. 配置
    • 修改artalk.yml配置文件
    • 控制中心
  2. 配置反向代理、CDN

本文部分内容可能引用自网络,如有侵权,请与我联系删除!