Hexo定制之家宽部署artalk评论
![](https://www.evernote.com/shard/s122/sh/3e6145c0-e60c-4484-978d-77c4fc794bf0/xZsj26mfamXYoqTFCRfXyVIHPi2gNUfF_3UuDZAv0W-ilz5vBxltD0dzLQ/deep/0/image.png)
实现方法
hexo部署Artalk
用J4125里面的宝塔面板的Docker
宝塔在debian服务器上
debian服务器上镜像Docker对应目录/data/artalk
灵感来源
从源文档默认使用docker -d 方式运行;服务器几次重启后,发现每次都需要手动去运行,很麻烦(也导致服务中断)
改用下面的Docker Compose的方式部署
20231119 重启整个J4125,仍然无效; 一设置如下修改指令,等待未来再次测试
1 | #已启动容器通过 docker update 对设置 restart 选项 |
Docker Compose 部署
SSH里面:
cd 切换到想要安装artalk的数据目录
提供 docker-compose.yaml 文件可供参考:
1 | version: "3.5" |
在与配置文件相同的目录执行命令创建容器:
1 | docker-compose up -d |
转化 docker run 为 docker-compose
在线工具: Docker run to Docker compose converter
链接:https://it-tools.carlzeng.top:3/docker-run-to-docker-compose-converter
一些 Docker Compose 常用命令
1 | docker-compose restart # 重启容器 |
carlzeng@Debian11:/data/artalk$ ls
artalk.db artalk.yml
http://192.168.@@@:82/sidebar/#/login
carlzeng@Debian11:/$ docker exec -it artalk artalk admin
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/artalk/json”: dial unix /var/run/docker.sock: connect: permission denied
carlzeng@Debian11:/$ su
Password:
root@Debian11:/# docker exec -it artalk artalk admin
Error response from daemon: No such container: artalk
检测了BT面板里面的artalk容器配置,发现异常如下:
“Name” : “/q18qdroglehghc”,
用第二种方法:直接在ssh中输入docker命令
在root的根目录下执行
1 | docker run -d \ |
1 | docker exec -it artalk artalk admin |
可以在正常在本地提交评论http://localhost:4000/blog/202309222344.html#Next
下一步:
添加到NexT的页脚模版comment位置
done, added in comments.njk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{%- if page.comments %}
<!-- CSS -->
<link href="https://cdn.bootcdn.net/ajax/libs/artalk/2.6.4/Artalk.css" rel="stylesheet">
<!-- JS -->
<script src="https://cdn.bootcdn.net/ajax/libs/artalk/2.6.4/Artalk.js"></script>
<!-- Artalk -->
<div id="Comments"></div>
<script>
Artalk.init({
el: '#Comments', // 绑定元素的 Selector
pageKey: '', // 固定链接 (留空自动获取)
pageTitle: '', // 页面标题 (留空自动获取)
server: 'http://192.168.@@@:82', // 后端地址
site: '@@@@ Notes - Local', // 你的站点名
})
</script>
....
.post-nav { border-bottom: 20px solid $gainsboro;
目前的局限:打开页面以后需要二次刷新页面才会出现评论
修改NexT的电脑端背景色为白色,(同步于手机端样式)
1 | 修改配置文件 |
2023年12月,修改回auto,这样搭配hexo的插件,可以动态适应页面的darkmode状态
映射或反向代理,提供给外网使用:https://chuanzhuo.github.io/blog/
如何给docker中的服务配置二级域名?
https页面可否嵌入http服务?
需要升级到https
Nginx Proxy Manager也可以代劳
家宽如何使用Nginx Proxy Manager反向代理 - YouTube https://vt.wooomooo.com/?p=67689
材料清单
家宽+公网IP
一级域名?
反向代理步骤
1. 进入Nginx Proxy Manager官网,获取docker-compose.yml配置文件(需保存为这个文件名)
1. 到这个docker-compose.yml文件的目录下,执行:docker-compose up -d
/www/server/panel/data/compose/NginxPorxyManager/template
1. 进入Nginx Proxy Manager 后台
http://192.168.@@@:81/login
1. 端口转发
这里的880和4443就是刚才在配置服务器的端口
openwrt端口转发设置方法
依次找到:网络–> 防火墙–> 端口转发。
在新建端口转发设置栏中,输入你要转发的IP、端口和协议等内容。
点击保存&应用便可即时生效。
配置好以后,可以用外网IP访问转发的两个端口:
http://123.118.31.119:880/
http://123.118.31.119:4443/
1. 特定域名
A记录
1. 配置New Proxy Host 在 Nginx Proxy Manager 后台
新增一条a.goodday.cc指向http://192.168.@@@:82
访问http://a.goodday.cc:880/
http://a.goodday.cc:4443/
错误:
504 Gateway Time-out
openresty
很大可能现在面临的问题是letsencrypt.org无法成功申请证书
有没有其他的SSL免费证书可用?
https://a.goodday.cc:4443/
错误:
This site can’t be reachedThe webpage at https://a.goodday.cc:4443/ might be temporarily down or it may have moved permanently to a new web address.
ERR_SSL_UNRECOGNIZED_NAME_ALERT
转换思路,取得域名
成功切换至域名(CF控制的 carlzeng.top)
https://sharedblog.net/posts/2022-09-28-github-pages-custom-domain-name/
关闭DNS \*泛解析 A记录 的 ‘代理’,才能正常连接到NginxProxyManager的特点端口
等待生效后,方可正常
替换表情包
替换原来的https://cdn.jsdelivr.net/gh/ArtalkJS/Emoticons/grps/default.json
新的:https://cdn.klyang.com/json/emo.json
一有多几个人同时访问时,artalk就奔溃了,如何解决?
Artalk Error
Error: 请求超时或意外终止,无法获取评论列表数据
点击重新获取
ping artalk.carlzeng.top -c4
PING artalk.carlzeng.top (172.67.@@@): 56 data bytes
本机是这种情况,用联通4G网络就能正常访问artalk评论
解决办法:在4G环境下,用管理员登录控制中心,应用一下配置;
重新回到电脑,就正常了,匪夷所思
根据ping结果可知,域名对应的IP正确了;而一段时间后又会变成CF?
ping artalk.carlzeng.top -c4
PING artalk.carlzeng.top (123.119.@@@): 56 data bytes
Artalk置入博客
不要自己修改NexT,测试使用插件:Artalk comment plugin for Hexo NexT
https://github.com/leirock/hexo-next-artalk
npm install hexo-next-artalk
这个插件方案可能可以解决,首页也会冒出评论框的尴尬。
<script>
Artalk.init({
el: '#Comments',
pageKey: '{{page.permalink}}',
pageTitle: '{{page.title}}',
server: '{{theme.post_artalkserver}}',
site: '@@@@ Notes'
})
</script>
<!-- CSS.comments -->
<link href="https://cdn.bootcdn.net/ajax/libs/artalk/2.6.4/Artalk.css" rel="stylesheet">
<!-- JS.comments -->
<script src="https://cdn.bootcdn.net/ajax/libs/artalk/2.6.4/Artalk.js"></script>
<span class="post-meta-item">
<span class="post-meta-break"></span>
<span class="post-meta-item-text">评论数{{__('symbol.colon')}}</span>
<span id="ArtalkCount"></span>
</span>
DDNS自动更新域名的最新IP地址
UI访问路径: 打开OpenWrt的管理页面, 服务 》 动态 DNS(DDNS)
URL地址: 192.168.6.1:8080/cgi-bin/luci/admin/services/ddns
![](https://www.evernote.com/shard/s122/sh/62d9a792-bb54-473f-a1e2-34feebae3a57/Bp2GY1StVwk23AQvse06RpwOBSWdQnuBad01TqD2pNg8RwbZSdLpzyGC3w/deep/0/image.png)
新增一条:动态DNS 服务项 » CF_carlzeng_top
检查日志:
1 | 091427 : Registered IP '202.89.@@' detected |
update_cloudflare_com_v4.sh
这个设置有一个弊端, 当vwan3没有获取IP地址时(由于我使用了单线多播, 这样这种概率就出现了), 这个DDNS脚本是无法正常运作的.
20240818 这个问题还是不知如何在UI界面上攻克, 估计要写脚本来轮询一个个的虚拟接口, 从一个获得在线pppoe接口稳定的方案中, 来获取外网IP地址. 然后根据这个IP地址定时推送给DDNS服务端
Cloudflare DNS API
用户 API 令牌
编辑区域 DNS API 令牌已成功创建
复制此令牌以访问 Cloudflare API。为安全起见,将不再显示此令牌。了解更多
7u0Y_5-t_TTn1biQDfdtHgohbE3l@@@@@@。一下为Cloudflare给出的例子:
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer 7u0Y_5-t_TTn1biQDfd@@@@@@" \
-H "Content-Type:application/json"
DNS TOKEN: 7u0Y_5-t_TTn1biQDfdtHg@@@@@@
10:36am 回归源头错误:
code”:6103,”message”:”Invalid format for X-Auth-Key header
比对了Openwrt中的源文件:
‘/usr/lib/ddns/update_cloudflare_com_v4.sh’
https://github.com/msva/openwrt-packages/blob/master/net/ddns-scripts/files/update_cloudflare_com_v4.sh
发现我Openwrt中的.sh文件已经是最新版,看来还是配置出问题了。
检查.sh源文件,发现的解决问题的办法:
用户名需要使用: Bearer
密码使用:API Token,编辑区域 DNS API 令牌已成功创建
carlzeng.top
10:52am works great in log.
both ddns setup works
优化:查询主机名 最好是填写DDNS挂的解析域名,这样用于判断DDNS是否需要callAPI来更新IP最新的ADSL IP地址。
修改以后,需要点击“重新加载”来更新界面中的“已注册的IP地址“。发现这个LIST设计得很人性化,直观:上次更新,下次更新,查询主机名,已注册的IP地址,运行中的进程PID
优化脚本运行周期:
每小时检查自己DDNS域名的特定记录,检查IP地址和DDNS域名是否一致。
每天强制推送更新,即便IP没有变动
Artalk头像
替换
FROM
https://www.gravatar.com/avatar/
TO
https://dn-qiniu-avatar.qbox.me/avatar/ #https://cdn.lete114.top/img/avatar.png # 头像CDN地址
artalk的头像配置
参考:Hexo-添加Artalk评论教程
优化配置文件CDN
20231215 Frontend resources CDN, you can set this to your preferred CDN
切换:从 cdn.bootcdn.net 到 cdn.staticfile.org;
更新hexo 的_config.yml 如下
1 | jsUrl: https://cdn.staticfile.org/artalk/2.6.4/Artalk.min.js |
Email 邮件通知功能
配置的SMTP,一直无法正常发送邮件;不清楚原因是什么?证书?日志呢?如何忽略验证?
1 | Artalk (v2.6.4/8867eb2) |
https://github.com/ArtalkJS/Artalk/issues/748
决定需要升级artalk到目前最新版!
1 | docker-compose pull |
这两条命令就升级到当前最新版本:Artalk (v2.8.3/8af7136)
错误:请求响应 404
Artalk Error Error: 请求响应 404,无法获取评论列表数据
点击重新获取 | 打开控制台
解决办法:
1 | 404 (未找到) 服务器找不到请求的网页。 |
反复检查,测试。docker绝对启动都正常了,
严重怀疑是hexo版本滞后导致的请求页面错误?
1 | NexT.utils.loadComments(CONFIG.artalk.el) |
问题变成 :hexo怎么升级?
第二天复盘,server端的artalk是重装的最新版(保留原始数据),应该问题不大,那么就是如何integrate集成hexo的问题了;无非是node端的安装,hexo相关的配置 和 JS client,一一检查过去:
尝试更新hexo的artalk插件:
1 | npm install hexo-next-artalk |
无意间注意到_config.yml中引入的artalk是有版本的(是旧的版本)
1 | jsUrl: https://cdnjs.cloudflare.com/ajax/libs/artalk/2.6.4/Artalk.min.js |
我必须把它升级到我目前docker-compose pull出来的最新版v2.8.3
果然修改了hexo的配置文件_config.yml中的关于JS和CSS的引用后,成功解除