介绍

  Remark42是一个轻量级,自托管,简单的强大的评论系统,使用Golang编程语言开发的。 因为是部署在自己服务器上的,所以不会搜集信息到第三方。完全脱离第三方的。 它可以嵌套大家的博客,文章页面或者是你想有评论功能的网页中都可以。 详细的介绍和源代码访问:GitHub

功能介绍

  • 通过Google,Facebook,GitHub和Yandex进行社交登录
  • 通过电子邮件登录
  • 支持匿名访问
  • 带有树和普通演示文稿的多层嵌套评论
  • 可以导入Disqus和WordPress的评论数据
  • 支持Markdown的格式
  • 管理员可以删除评论和用户禁言
  • 支持投票,个人标示和验证
  • 支持多种评论排序
  • 图片可以可视化导入
  • 支持最近的评论
  • 支持RSS
  • 支持通知
  • 支持自动备份用JSON的格式
  • 没有数据库,存储使用单一文件
  • 支持Docker的部署
  • 可以在Linux, Windows和MacOS,直接运行可执行文件
  • 简单,轻量,可以选择两个主题,如果是还有需求的,可以自己拉源码编译
  • 部署一套评论系统可以支撑多个网站
  • 支持HTTPS的访问
  • 注重隐私

技术细节

  • 数据存储在boltdb(嵌入式键/值数据库)文件中
  • 每个站点都单独的boltbd文件
  • 为了将remark42迁移/移动到另一个主机,可以直接拷贝boltdb文件
  • 自动备份过程每24小时运行一次,并将所有内容以json-like格式导出到backup-remark-YYYYMMDD.gz。
  • 通过存储在cookie中的go-pkgz / auth来实现身份验证。它使用HttpOnly,安全cookie。
  • 在LRU缓存内部缓存所有重型REST调用受限于CACHE_MAX_ITEMS并CACHE_MAX_SIZE与细末pkgz /休息
  • 用户的活动在全球范围内受到限制(最多1000个同时请求),而在本地受到限制(每个用户通常最多10 req / sec)
  • 请求超时设置为60秒
  • 管理员身份验证(–admin-password设置)允许在没有社交登录和管理员权限的情况下访问remark42 API。为username:admin,password:添加basic-auth ${ADMIN_PASSWD}。
  • 用户可以多次投票给评论,但只能更改投票。不允许进行两次投票。
  • 创建后,用户可以在5分钟(可配置)窗口中编辑评论。
  • 使用oauth提供者名称对用户ID进行哈希处理和添加前缀,以避免冲突和潜在的滥用。
  • 所有化身都会调整大小并在本地缓存,以防止来自oauth提供商的限速器,这是go-pkgz / auth功能的一部分。
  • 可以使用图像(IMG_PROXY=true)进行代理,以防止HTTP / https混合。
  • Docker构建使用公开可用的基础映像。

注重隐私

  • Remark42试图对任何私有或半私有信息非常敏感。
  • 身份验证从身份验证提供程序请求最小可能的范围。他们返回的所有额外信息将立即丢弃,并且不会以任何形式存储。
  • 通常,remark42仅保留用户ID,用户名和头像链接。这些字段均不直接公开-标识和名称进行了哈希处理,并附加了头像。
  • 没有任何形式的跟踪。
  • 登录技工使用存储在cookie(httpOnly,安全)中的JWT。第二个cookie(XSRF_TOKEN)是防止CSRF的随机ID。
  • 没有跨站点登录,即无法在运行remark42的独立站点之间分析用户的行为。
  • 不涉及第三方分析服务。
  • 用户可以要求remark42知道的所有信息并导出到gz文件。
  • 支持彻底清除与用户活动有关的所有信息。
  • Cookie的寿命可以限制为仅会话。
  • 由remark42存储的所有潜在敏感数据都经过哈希处理和加密。

集成Hugo

  这次主要是分享在使用了hugo静态博客中建设自托管的评论系统remark42,如果大家想用第三方的 评论系统,只需要在前端页面嵌入一段js和html就可以直接使用,那么可以直接跳过本章内容。
  喜欢静态网站的并且喜欢自己服务器上提供的评论系统的,那么remark42绝对是不错的选择。

安装

服务

  安装这里只介绍最小资源使用的方式,有钱的可以看官网的docker的方式

  • 下载稳定版本或开发版本,地址
  • 因为是资源最小,建议使用linux的系统,创建一个文件夹来解压的文件 tar -xvf 稳定版
  • 然后在解压的目录中执行命令:
1
2
3
4
5
6
7
8
/data/remark42/remark42.linux-amd64 server \
--secret=xxxxxx \   
--url=xxxxxxx \
--auth.github.cid=xxxxxxx \
--auth.github.csec=xxxxxxxxxx \
--admin.shared.email=0511-tf@163.com \
--admin.shared.id=xxxxxxxxxxxxxx \
--site=xxxxxx

这里介绍一些必须的和常用的参数,其他更多和更详细的参数请看地址官方的介绍

  • –secret 必填项,加密的字符串
  • –url 评论系统的服务器地址
  • –auth.github.cid 使用github登陆验证的Client ID
  • –auth.github.csec 使用github登陆验证的Client Secret
  • –admin.shared.id 评论系统管理员ID
  • –site 评论系统的一个网站的标示,因为一个评论系统可以支持多个网站

如果你的静态网站和remark42是部署在一台机器的话,需要让remark42跑在后台运行。

  • 这里使用的screen的命令实现的后台运行
  • screen -S 名称,随便定义
  • 然后执行上面的remark42的启动命令
  • 然后control+A+D 临时退出screen的一个会话
  • 通过端口查看ss -tnl 看看是否有8080端口启动,前提是你没有修改过默认端口
  • screen -ls 查看正在运行中的后台会话

前端

  • 前端页面的配置
    在前端页面需要评论的页面最下面加入下面的脚本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<script>
  var remark_config = {
    host: "REMARK_URL", //评论系统的服务器地址 例如:https://www.7benshu.com/
    site_id: 'YOUR_SITE_ID',//一个网站的标示,用来区别和其他的网站
    components: ['embed'], // 选择基础的模块
    max_shown_comments: 10, //评论默认显示的数量,默认是15条
    theme: 'dark', //默认是dark主题,也可以选择light主题
  };

  (function(c) {
    for(var i = 0; i < c.length; i++){
      var d = document, s = d.createElement('script');
      s.src = remark_config.host + '/web/' +c[i] +'.js';
      s.defer = true;
      (d.head || d.body).appendChild(s);
    }
  })(remark_config.components || ['embed']);
</script>

  • 下面是输入评论的展示位置的代码,放入需要的位置
1
2
3

<div id="remark42"></div>

  • 如果需要展示最近的评论信息,在需要最近评论的页面最下面输入代码
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<script>
  var remark_config = {
    host: "REMARK_URL",//评论系统的地址
    site_id: 'YOUR_SITE_ID',//网站的标示
    components: ['last-comments']
  };

  (function(c) {
    for(var i = 0; i < c.length; i++){
      var d = document, s = d.createElement('script');
      s.src = remark_config.host + '/web/' +c[i] +'.js';
      s.defer = true;
      (d.head || d.body).appendChild(s);
    }
  })(remark_config.components || ['embed']);
</script>
  • 输入需要展示最近评论的展示代码
1
<div class="remark42__last-comments" data-max="50"></div>
  • 统计指定页面的评论数据,在需要统计页面的最下面输入代码

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <script>
      var remark_config = {
        host: "REMARK_URL", // hostname of remark server, same as REMARK_URL in backend config, e.g. "https://demo.remark42.com"
        site_id: 'YOUR_SITE_ID',
        components: ['counter']
      };
      
      (function(c) {
        for(var i = 0; i < c.length; i++){
          var d = document, s = d.createElement('script');
          s.src = remark_config.host + '/web/' +c[i] +'.js';
          s.defer = true;
          (d.head || d.body).appendChild(s);
        }
      })(remark_config.components || ['embed']);
    </script>
      
    
  • 输入需要展示的位置代码

1
2
3
4

<span class="remark42__counter" data-url="https://domain.com/path/to/article/"></span>


如果还有配置疑问可以看文章最后的FAQ,或者在下面留言
如果只需要看搭建遇到问题和寻找答案的,可以直接看FAQ

测试和总结

测试

如果运行没有问题,可以输入地址部署的机器地址+/web ,就可以看到一个demo的页面
avatar

总结

使用自托管的评论系统,不用担心后期的第三方的不支持,例如某某说。 我也是刚使用不久,后面如果遇到问题,希望大家一起去提交issue。

FAQ

  • 需要怎么申请GitHub的application
      创建新的OAuth App
  • 怎么知道自己主机CPU是什么型号:amd64,arm64,386…
      CentOS的命令
1
2
3
4
5
6
[root@sy ~]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.4.1708 (Core) 
Release:	7.4.1708
Codename:	Core