简介

Remark42 是一个开源、轻量化、自托管的评论服务,支持使用Google, Twitter, Facebook, Microsoft, GitHub, Yandex, Patreon, Telegram, Email 以及匿名方式进行评论。

特性:

  • 使用 Go 语言实现

  • 使用基于文件的数据库。我最喜欢的数据库是 SQLite,单文件无任何依赖,Remark42 使用的 boltdb 也是基于文件,对我来说和 SQLite 一样美好。

  • 有较为现代化的前端技术栈,使用 TypeScript, Preact, Postcss 开发。

  • 是一个成熟的开源项目,文档全面、开发时间长,基本上我的任何问题都可以在文档和 Issues 中找到解答。

  • API 非常完善,比如导入导出都可以用一行 curl 来完成。在其他方面作者也显示出很高的技术品味。

对我来说,最重要的还是支持 self-hosted ,虽然它建议的部署方式为 Docker ,但是特地去使用Docker对我来说又有点多余,只能自行爬文部署。

下载

通过 Github Release 界面下载对应系统的文件。

解压至任意目录,我这边以 /var/www/remark42 目录为例。

1
2
3
wget https://github.com/umputun/remark42/releases/download/v1.11.3/remark42.linux-amd64.tar.gz    #下载对应的文件
tar -zxvf remark42.linux-amd64.tar.gz #解压
chmod +x remark42.linux-amd64 #提权

运行

官方给的运行的命令为:

1
2
remark42.linux-amd64 server --secret=12345 --url=http://127.0.0.1:8080
# <文件名> server --secret=<任意字符> --url=http://127.0.0.1:8080

由于我的 8080 端口是被占用的,需要更改相应的端口,比如:

1
./remark42.linux-amd64 server --secret=12345 --url=http://127.0.0.1:8082 --dbg --site=luxiyue --port=8082 --admin-passwd=123456

--dbg 是表示显示更多信息用于调试。

--site yydnas 表示网站ID,否则为默认remark。在嵌入代码中随之修改。

--admin-passwd=123456 管理员密码

重要提醒:

这个 parameters页面 的参数,需要逐个细看,很多配置细节后面都会用到!

部署

1. 配置Nginx反向代理

根据我的测试,单纯引入 url 是无法加载评论框的,这一步是必须的。

官方的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
server {
listen 443;
server_name remark42.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/remark42.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/remark42.example.com.key;

gzip on;
gzip_types text/plain application/json text/css application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
gzip_min_length 1000;
gzip_proxied any;


location ~ /\.git {
deny all;
}

location /index.html {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://remark42:8080/web/index.html;
}

location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://remark42:8080/;
}

access_log /var/log/nginx/remark42.log;

}

server {
listen 80;
server_name remark42.example.com;
return 301 https://remark42.example.com$request_uri;
}

2. 测试

这边可以测试一下,如果你前面配置都正确了。

这边通过访问你的 域名/web/ 是可以显示出来的。

3. 前端引入

在页面中引入:

1
2
3
4
5
6
7
8
9
<script>
var remark_config = {
host: 'https://comments.luxiyue.com', //域名
site_id: 'remark', //网站ID
theme: 'dark', //黑暗主题
locale: 'zh', //中文
}
</script>
<script>!function(e,n){for(var o=0;o<e.length;o++){var r=n.createElement("script"),c=".js",d=n.head||n.body;"noModule"in r?(r.type="module",c=".mjs"):r.async=!0,r.defer=!0,r.src=remark_config.host+"/web/"+e[o]+c,d.appendChild(r)}}(remark_config.components||["embed"],document);</script>

然后在需要的地方添加容器:

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

其他

如果你只是引入了,目前它还无法正常运行,需要配置登录项。结合上面的 parameters页面 以及 Authorization页面 ,添加对应的授权。

这边以 Microsoft账号登录演示:(刚刚我把Github的已经创建好了。。。)

  1. 访问 Azure portal 完成注册并登录

    参考链接:Azure portal

  2. 在控制台搜索 App registrations 点击进入

  3. 点击 New registration

  4. 照着下图填写就行

    地址是 域名 + /auth/microsoft/callback

  5. 完成后自动跳转到 Overview 界面,记住上面的 Application (client) ID

  6. 选择左侧栏的 Certificates & secrets ,点击 + New Client Secret 按钮,右边弹出边框选择有效期最长24个月,添加后保存你的 Value

  7. 将得到的两个值按照如下配置添加在你的启动命令后面

    对应关系
    Application (client) ID auth.microsoft.cid
    Client Secret Value auth.microsoft.csec

    在运行命令后面添加:

    1
    ./remark42.linux-amd64 server <省略> --auth.microsoft.cid=<填写ID> --auth.microsoft.csec=<填写value>

匿名回复的话,可以在后面再添加 --auth.anon

然后来看一下运行的结果:

后台运行

官网这边没有说明,只能我们自行配置,根据我的知识,配置如下:

1. 添加后台服务进程

1
vim /usr/lib/systemd/system/remark42.service

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=remark42
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/www/remark42 #程序目录
ExecStart=/var/www/remark42/remark42.linux-amd64 server <...省略...> #启动程序运行的那一长串命令
Restart=on-failure

[Install]
WantedBy=multi-user.target

保存后执行下面命令载入配置:

1
systemctl daemon-reload

然后通过系统命令进行执行:

启动: systemctl start remark42

配置开机自启: systemctl enable remark42

最后查看一下状态:

1
systemctl status remark42

成功运行!

最后

花了大约半天时间研究这个东西,有点费脑子。

像现在主流的 Twikoo, Artalk, Valine ,三者都是面向国内用户所开发的评论系统,他们有很多相似之处,但是Remark42更多的用于国外环境,国内使用也是没有问题。

经过我测试下来,强烈建议还是推荐使用Docker方式来部署。