artalkjs / artalk Goto Github PK
View Code? Open in Web Editor NEW🌌 自托管评论系统 | Your Self-hosted Comment System.
Home Page: https://artalk.js.org
License: MIT License
🌌 自托管评论系统 | Your Self-hosted Comment System.
Home Page: https://artalk.js.org
License: MIT License
这是一个很棒的项目,虽然 gzip 后只有 30KB 左右的大小,但还是有些庞大,我认为可以进一步优化大小
如果能够在初始化时增加主题的配置就再好不过了
博客程序:nuxt + vue
artalk后端已经部署完成
前端部署
<template>
<div class="wrapper">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.js"></script>
<div id="Comments"></div>
</div>
</template>
<script>
const el = '#Comments';
const pageKey = '';
const pageTitle = '';
const server = 'https://artalk.imhan.cn/api/';
const site = '博客';
export default {
name: 'Comments',
mounted () {
this.comments()
},
methods: {
comments () {
try {
new Artalk({
el,
pageKey,
pageTitle,
server,
site,
})
} catch (e) { }
},
}
}
</script>
<style lang="scss" scoped>
// ...
</style>
控制台报错
Access to fetch at 'https://artalk.imhan.cn/api/get' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Artalk.js:1 POST https://artalk.imhan.cn/api/get net::ERR_FAILED 404
Artalk.js:1 Uncaught (in promise) Error: 网络错误
at Artalk.js:1:51547
at Generator.throw (<anonymous>)
at a (Artalk.js:1:819)
如题,目前的回复框很不友好,如果评论过多,直接从底部跳到顶部了,稍微不注意也不知道回复的哪一条评论,建议改为嵌套的输入框
非常感谢 dalao 们对 Artalk 的关注与支持 😁
首先,我非常抱歉,目前很多问题还没来得及完善。由于高考临近,业务比较繁忙,看着各位 dalao 用着我这个半成品心中总觉得有些许不安,手痒恨不得拿起键盘干个通宵。哎,但是 🙃 我得克制住自己,刻意失踪,没有回复,希望能够谅解并且忍耐 Artalk 的许多槽点一段时间。
例如写 Golang 的后端 API,这样就能轻松解决跨平台异步发送邮件等问题,还打算做从各评论系统快速迁入、迁出的功能,另外包括规范化数据结构,审核和垃圾过滤等等。
相信 Artalk 在大家的陪伴下变得越来越好用,也请给 Artalk 留一段等待的时间,感谢正在使用 Artalk 的朋友们,有你们的陪伴与鼎力帮助是 Artalk 开发更新 无限前进 的动力,加油!😘
工具量太大了,转了两天,还有几千条目~
填写完整链接能够更准确的定位到页面
@inkss 可是站点本身有地址呀,如果需要访问,利用站点设置里的 url 和页面的 url 拼接呗,可以做个判断如果地址包含了站点 url 的内容就不处理,反之拼接下。(是不是现在就是这样处理的?
感谢来自 @inkss 的建议,#44 (comment)
多站点功能是后来加入的,怎么实现更易用目前还在探索中,感谢您提出的建议,并期待更为深入的探讨。
如果站点只有一个域名的情况下,PageKey 不用填写完整 URL,后端可以根据这一个域名拼接字符串。也就是说,PageKey 是可以填写 “相对路径” 的。
(因为用到 PageKey 的地方有点多,之前时间不太充裕,直接填写完整 URL 作为 PageKey 不用拼接就可以摸鱼了,省去了不少代码,哈哈。我觉得这个可以有,拼接字符串这种方式将在下一版中加入,已经安排上了)
【站点 (Site) “本身就有的地址”】目前作用是:
1. “Referer 合法性检测”:后端判断来自前端的请求 Header Referer 是否合法(阻止其他域名下进行非法提交)
2. 后端设计支持:一个站点(项目)能有多个域名(多个 Site URL)(判断多个 Referer)
3. 如果不设置 Site URL,则任何域名都可以请求,没有 “Referer 合法性检测”
3. 依赖 PageKey 来生成邮件中的“回复”链接。(如果仅仅依靠 Site URL 来拼接字符串,如果有多个 Site URL,根据第一个 Site URL 拼接的链接是不准确的,不知道具体是哪一个网站)
4. 依赖 PageKey 后端读取页面数据,爬取页面 <title>
后端显示页面标题
5. 主要是为了多站点支持多域名,如果 PageKey 填写完整 URL,能够更加准确。
后端可以对原来包含域名的 PageKey 进行批量替换,因此 PageKey 完整URL换域名是不太繁琐的。
后续更新后端程序:
PageKey 不再强制要求填写完整 URL,可“相对路径“也可”完整URL“
若一个站点有多个域名,PageKey 如果填 “相对路径”,会根据 第一个域名 拼接字符串。如果填 “完整链接”,会根据这个链接来,这样就能够更准确。(一个站点有多个域名,PageKey 推荐填写完整URL,但不强制要求)
若一个站点只有单个域名,PageKey 填写 “相对路径”,就能够根据这个域名 拼接生成 URL,这样拼接的很灵活,后端也能直接换域名。
站点不允许 没有域名。
添加单独的配置项:控制开启关闭 “Referer 合法性检测”。
Originally posted by @qwqcode in #44 (comment)
赞同数量多的评论排到前面,仅显示指定数量的几条最热评论
之前用Valine,Valine后台一键将评论标记为垃圾评论用的还是挺爽的,后来到Artalk发现没有这一功能很遗憾,希望能在管理员界面添加一个标记为垃圾评论按钮,标记后除管理员外其它人不可见。同时希望增加人工审核,即发出一条评论默认标记为垃圾评论,直到管理员手动审核标记后再显示,避免违规言论出现。
另:哪位好心人提供一个Valine转Artalk的脚本啊,py正则我要写疯了。。。
如题,文档中 “通过安装 WordPress 插件,导出 Artrans 格式的数据文件。”
应该用什么插件导出
配置文件:
# 邮件通知
email:
enabled: true # 总开关
send_type: "smtp" # 发送方式 [smtp, ali_dm, sendmail]
send_name: '{{reply_nick}}' # 发信人昵称
send_addr: "[email protected]" # 发信人地址
mail_subject: "[{{site_name}}] 您收到了来自 @{{reply_nick}} 的回复"
mail_subject_to_admin: '[{{site_name}}] 您的文章 "{{page_title}}" 有新回复'
mail_tpl: "default" # 邮件模板文件
smtp:
host: "smtpdm.aliyun.com"
port: 465
username: "[email protected]"
password: "xxxxx"
ali_dm: # https://help.aliyun.com/document_detail/29444.html
access_key_id: "" # 阿里云颁发给用户的访问服务所用的密钥 ID
access_key_secret: "" # 用于加密的密钥
account_name: "[email protected]" # 管理控制台中配置的发信地址
回复评论,且回复评论被审核后未收到邮件通知,已开启评论审核和 akismet 反垃圾
https://gravatar.loli.net/ 在部分地区无法访问,可以更换为v2ex:https://cdn.v2ex.com/gravatar/ 或者提供给用户自行选择服务器使用
msg: "Param id
is required"
DEBUG POST /api/get ip=172.17.0.1 latency=2.7617ms referer=http://localhost:4000/ status=200 user_agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
ERROR 响应: POST /api/admin/page-edit ==> "Param `id` is required" host=127.0.0.1:8080 id= ip=172.17.0.1 referer=http://localhost:4000/ status=200 user_agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
DEBUG POST /api/admin/page-edit ip=172.17.0.1 latency=535.1µs referer=http://localhost:4000/ status=200 user_agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
我也是刚刚在自己香港服务器搭建成功的,分享一下我用宝塔安装的过程吧!
我们按照官网教程 "https://artalk.js.org/guide/backend/docker.html" 一步步往下走就行!
站点目录
打开终端方便我后期管理编辑打开终端后先执行镜像拉取
docker pull artalk/artalk-go
在执行 下面 我圈起来的步骤
这时候我们在看站点目录
会多一个ArtalkGo
文件夹 在点击进去 有个conf.yml
我们 双击 编辑它
我们就先简单配置这两个基本就能运行了 至于其他邮件通知 等等 等搭建好了 在慢慢设置
然后我们继续 在之前的终端 进行下面的步骤
在上面步骤 都完成后 执行 $ docker restart artalk-go
因为前面我们修改了conf.yml
需要重启生效
在上面执行完毕后 在终端执行 docker update --restart=always artalk-go
好像就是不让这个服务关闭? 小白不懂 执行就对了。
在按照官网教程 https://artalk.js.org/guide/backend/reverse-proxy.html#%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF
往下走
新建一个站点 就绑定 域名 其他都不需要
在如下图
若需指定仅 /api/
路径转发到后端程序端口,点击 “配置文件” 按钮,添加如图位置红色标记的 /api/
到这里就搞定了!
<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.css" rel="stylesheet">
<!-- JS -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.js"></script>
<!-- Artalk -->
<div id="Comments"></div>
<script>
new Artalk({
el: '#Comments',
pageKey: '<页面链接>',
pageTitle: '<页面标题>',
server: '<后端地址>',
site: '<站点名称>',
})
</script>
我是在自己测试服务器搭建的,就简单引用了一下给你们 做个参考 哈~ site:
和 conf.yml
网站标题相呼应~
comments.php
原先的代码 ok !就能使<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/artalk@2.0.4/dist/Artalk.css" rel="stylesheet">
<!-- JS -->
<script src="https://cdn.jsdelivr.net/npm/artalk@2.0.4/dist/Artalk.js"></script>
<!-- Artalk -->
<div id="Comments"></div>
<script>
new Artalk({
el: '#Comments',
pageKey: '<?php $this->permalink() ?>',
pageTitle: '<?php $this->title() ?>',
server: '你绑定反向代理域名/api/',
site: '<?php $this->options->title() ?>',
})
</script>
写的很乱希望你们能看懂,见谅我也是第一次搭建这个...
测试地址:https://pl.9i3.cn/ 准备搭建typecho 测试
@qwqcode 邮件通知 带表情图片地址 会被转A链接 导致表情不显示,有办法在后端设置吗?
Originally posted by @xiamuguizhi in #70 (comment)
引入独立 artalk-latex.js
开启 Artalk 的 Latex 语法支持
是否提供 artalk.reload()
之类的函数,文档没找到
centos7.9
artalk-go_v2.0.5_linux_amd64
直接运行./artalk-go serve
命令出现如下提示
./artalk-go: /lib64/libc.so.6: version GLIBC_2.28 not found (required by ./artalk-go)
支持图片上传,并接入 https://github.com/pluveto/upgit 支持上传到 GitHub 仓库或各种图床
无法直视 webpack 复杂的配置文件和陈旧的没人维护的依赖
所以决定迁移到 Vite(跟踪分支 vite)https://github.com/ArtalkJS/Artalk/tree/vite
后端决定改用 Golang -> https://github.com/ArtalkJS/ArtalkGo
以后考虑前端抽象出一个类,就能制作各种后端并适配
参考:萌娘百科
对于邮箱发信导致评论超时的问题可以使用多进程的方式,将发信过程 fork 到另一个进程中处理,主进程就不会阻塞导致评论超时,不过该方法只能用于 Linux 环境,比较好的方案还是要使用其他支持多线程/异步的语言或者使用 Swoole 等支持多进程/异步的 PHP 框架。具体可以进行以下修改:
修改 Utils::sendEmailToCommenter
方法,将发信的部分代码改为以下的代码:
// 邮件发送
$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
if ($pid == -1) {
//错误处理:创建子进程失败时返回-1.
die('could not fork');
} else if ($pid) {
//父进程会得到子进程号,所以这里是父进程执行的逻辑
// pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
} else {
//子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
$adminAddr = _config()['email']['admin_addr'] ?? null;
if (!empty($rid) && $comment['email'] !== $replyComment['email']) {
$sendEmail($mailTitle, $mailContent, $comment['email']);
}
if (empty($rid) && !empty($adminAddr) && $replyComment['email'] !== $adminAddr) {
$sendEmail($mailTitleToAdmin, $mailContent, $adminAddr);
}
}
Originally posted by @syfxlin in #6 (comment)
现状
用户可以同时给某条评论点一个赞、点一个踩
预期
用户点赞应该消除曾经点过的踩,点踩应该消除曾经点过的赞
复现
进入 https://artalk.js.org ,任选一条评论,点赞并点踩,观察到赞和踩的数值最终同时 +1
评论页面的 UV,PV 等。
之前有人给我反馈过验证码的事情,我一直没碰到就没在意。
昨天登录管理账户 弹出一个验证码 把我搞不会了。
那个字实在是太小了,我还带眼镜 不然 估计都看不清。
在 4 次尝试后 我才正常...
和 Redis 并级应该是 Memcached,是不是单词写错了?
captcha:
enabled: true # 总开关
always: true # 总是需要验证码
将总是需要验证码打开后,即使验证输入正确也不会跳回评论界面,还继续要求输入验证码。log文件提示ERROR 响应: POST /api/add ==> "需要验证码"
使用 GPLv3 的模块会对程序本身造成污染1,这也包括了通过 <script>
进行引用,相较于其他不会因通过模块使用的评论程序而言,似乎降低了一定的竞争力。单从提供评论功能这一需求而言似乎没有必要使用 Artalk 并被 GPLv3 污染的必要性。
是否可以考虑切换到不因使用链接库而被污染的 LGPLv3 或其他许可?
Free Software Foundation. GNU GENERAL PUBLIC LICENSE (3rd). June 29 2007. Sect. 5C. "You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it". ↩
延迟执行导致 document.body.style.overflow
设置的问题
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.