花了两天时间,终于把 Artalk 部署好了,一款数据自托管带后端的评论程序,非常适合我。这篇文章就介绍一下我部署的流程,以及我在部署过程中遇到的一些问题,将它记录一下,以便之后研究,顺便对使用 Nuxt.js 搭建博客的伙伴提供一些参考价值。
Artalk 地址:https://artalk.js.org/
这篇文章我将分为三个部分,后端部署、前端部署、问题研究。
1.后端部署
官方有两个版本,注意分辨,php 和 go,对应的是不同的仓库,目前官方文档写的默认都是 go 语言开发的。
ArtalkGo 仓库:https://github.com/ArtalkJS/ArtalkGo
我使用的也是 go 版本,功能和优化都比较好。
docker 构建 + 宝塔
我的服务器是 Ubuntu 20.04,其他版本类似,没有很大不同。
首先,使用 ssh 连接服务器。
sudo su
# 启用sudo模式
cd /www/wwwroot/
# 进入站点目录
mkdir ArtalkGo
cd ArtalkGo
# 为 ArtalkGo 创建一个目录
curl -L https://raw.githubusercontent.com/ArtalkJS/ArtalkGo/master/artalk-go.example.yml > conf.yml
# 下载配置文件模版
到这里之后,官方说的是用 vim conf.yml
进入配置文件,修改参数然后配置。我不是很建议,因为用着并不是那么顺手(因为我菜),我建议直接到达 /www/wwwroot/ArtalkGo
目录下修改 conf.yml
文件,文本模式操作起来更顺手。
里面的配置基本都是站点名称,管理员,邮箱等设置,没什么大问题。除此之外,端口等参数都不用碰,不然会报错。
配置完文件之后直接保存就行了。
在宝塔插件里面下载 Docker 管理器,点击镜像管理。
然后在镜像名称输入 artalk/artalk-go
点击获取镜像即可,大概两分钟就下载结束了。
然后回到 ssh 连接,新建 docker 容器。
docker run -d \
--name artalk-go \
-p 0.0.0.0:8080:23366 \
-v $(pwd)/conf.yml:/conf.yml \
-v $(pwd)/data:/data \
artalk/artalk-go
将上面的命令行在命令行,直接回车就行了。
这个时候需要去你的服务器厂商那里放行端口 8080
,如果之前放行过不用管,没有放行的话需要去设置一下。
然后在浏览器输入 http://ip地址:8080
。
如果出现现在这个页面,说明你部署成功了,如果打不开或者是其他情况,请检查是否成功执行上面的步骤。
如果之后修改配置文件了,一定要注意在修改之后执行命令,需要重启服务才能生效。
docker restart artalk-go
反向代理
这个如果使用宝塔太简单,就不细说了。
https://artalk.js.org/guide/backend/reverse-proxy.html#%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF
文档已经说得很详细,如果出现操作失败的情况可以在下面评论。
2.前端部署
博客使用 vue + nuxt 开发。
我使用的是通过 cdn 引入的,npm 我目前发现和我博客有些冲突,暂时不使用该方式。
先在 /components
目录下新建一个组件名为 Comments.vue
<!-- Comments.vue -->
<template>
<div class="wrapper">
<link href="https://cdn.jsdelivr.net/npm/artalk@2.1.4/dist/Artalk.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/artalk@2.1.4/dist/Artalk.js"></script>
<div id="Comments"></div>
</div>
</template>
<script>
export default {
name: 'Comments',
}
</script>
<style lang="scss" scoped>
<!-- css代码 -->
</style>
配置代码我单独放在 /static/main.js
,然后在 nuxt.config.js
引入。
// nuxt.config.js
head: {
title: '子舒的博客 | imhan.cn',
meta: [
// ...
]
script: [
{ src: '/js/main.js' },
]
},
在 main.js
中配置 Artick。
new Artalk({
el: "#Comments",
server: 'https://域名/api',
site: "子舒的博客",
placeholder: '说点什么...',
gravatar: {
mirror: 'https://sdn.geekzu.org/avatar/',
default: 'mp',
},
pagination: {
pageSize: 15, // 每页评论数
readMore: true, // 加载更多 or 分页条
autoLoad: true, // 自动加载 (加载更多)
},
heightLimit: {
content: 200, // 评论内容限高
children: 300, // 子评论区域限高
},
versionCheck: true, // 前端版本检测
});
还有一个方案就是将文件放在服务器或者 github,将它引入,不过有些舍本逐末了,不是很建议。
3.问题研究
1. 关于评论路径问题
提交评论之后会在管理后台生成一个列表,表示哪个路径产生了评论,
如果想把某个页面评论转到其他页面,可以直接修改页面的 url,点击KEY变更
。
Artalk 的路径判断很严格,包括 https://example.com/1
和 https://example.com/1/
的评论就属于两个页面。
问过作者,觉得他的说法很有道理
qwqcode: https://example.com/1 和 https://example.com/1/ 本来就不属于相同路径,后者等价于 https://example.com/1/index.html (和 web 服务器配置有关)
所以我直接在我博客里把路径然后默认加一个 /
符号,不管打开哪个页面都会跳转到带有 /
的 url,也是非常简单粗暴的解决了这个问题。
path: `/posts/${key.replace('.md', '').replace('./', '')}/`
2. localhost:3000 和域名
由此引发的另一个问题就是我在本地构建 localhost:3000
是不会显示域名后的评论,这个问题也不是大问题,我研究过 Artalk 文档,因为他是一个后端,可以多个前端使用,如果仅仅判断二级目录会造成一个很大的问题。
https://a.com/1 和 https://b.com/1 这两个页面使用了同一套评论数据,所以为了避免这个情况,在判断路径时直接加上域名,这样的话,域名下的评论自然不会同步到 localhost:3000
。
这对我开发博客来说没有什么影响,所以就不打算解决了。
这是我目前遇到的问题,我会在后续的使用中持续更新本文,以作留存。