文章

应用artalk评论区

应用artalk评论区

文档目标

本文档旨在完整阐述如何在基于 Jekyll 构建的个人博客(域名:klizzz.com)中集成 Artalk 评论系统。

包括:Artalk 服务端的 Docker 部署、MySQL 适配、Nginx 反向代理配置、博客前端集成,以及后期的维护与故障排查方法。

通过本文档,可实现每篇博文的评论功能落地,并掌握 Artalk 系统的基本运维能力。

一、背景介绍

1. Artalk 是什么

Artalk 是一款开源的自托管评论系统,基于 Go 语言开发(服务端)+ JavaScript(前端)构建,具备轻量、无第三方依赖(可完全私有化部署)、支持 Markdown、多站点管理、数据存储适配 SQLite/MySQL 等特性。相比Disqus、Gitalk 等评论工具,Artalk 无需依赖第三方平台账号(如 GitHub),且部署和运维成本低,适合个人博客、小型站点使用。

官方仓库:https://github.com/ArtalkJS/Artalk

官方文档:[📦 程序部署 Artalk](https://artalk.js.org/zh/guide/deploy.html)

2. 博客现状与需求

本文适配的博客基于 Jekyll 框架构建,部署在blog.klizzz.com子域名下,主域名klizzz.com通过 Nginx 反向代理嵌入博客内容。

博客的详细信息和搭建过程见文档:部署个人博客

Jekyll-Chirpy 原有架构无评论功能,需通过部署 Artalk 服务端、配置 Nginx 反向代理、修改博客模板(post.html)实现评论区功能。

二、Artalk 实现

1. 环境

  • 服务器配置:Ubuntu 2c2g
  • 服务器环境:Docker、MySQL、Nginx
  • 端口开放:8080(Artalk 所需的正式端口)、23366(Artalk 默认端口);

2. Artalk 服务端部署(Docker方式)

2.1 目录准备

创建 Artalk 专属目录,用于存放配置文件和数据(后续挂载到 Docker 容器):

1
mkdir -p /var/artalk && cd /var/artalk

切换到为 ArTalk 创建的目录中:

1
cd /var/artalk

2.2 启动 Artalk 容器

先启动容器,验证基础服务可用性:(默认是 SQLite 的数据库)

1
2
3
4
5
6
7
docker run -d \
  --name artalk \
  --restart always \
  --network host \
  -v $(pwd)/artalk.yml:/app/artalk.yml \
  -v $(pwd)/data:/data \
  artalk/artalk-go
  • 参数说明:
    • --network host:使用主机网络,容器直接监听服务器8080端口;
    • -v $(pwd)/artalk.yml:/app/artalk.yml:挂载配置文件到容器内;
    • -v $(pwd)/data:/data:挂载数据目录(SQLite数据库/日志等)。

上面的命令合并为一行:

1
docker run -d  --name artalk  --restart always  --network host  -v $(pwd)/artalk.yml:/app/artalk.yml  -v $(pwd)/data:/data  artalk/artalk-go

2.3 验证服务启动

检查 8080/23366 端口是否被 Artalk 监听:(我在实操过程中发现默认端口号是 23366)

1
2
netstat -tulnp | grep 8080
netstat -tulnp | grep 23366

若输出包含 artalk-go 进程,说明启动成功;若失败,查看容器日志:

1
docker logs artalk

3. Artalk 配置修改(适配MySQL)

默认 Artalk 使用 SQLite 存储数据,为提升数据可靠性和可维护性,按照如下步骤修改为 MySQL 存储。

3.1 编辑配置文件

修改/var/artalk/artalk.yml(无则新建),重点配置数据库部分:(配置文件以服务器实际运行为准)

1
2
3
4
5
6
7
8
9
10
11
12
13
# Database 配置段
db:
  type: mysql               # 数据库类型改为mysql(默认sqlite)
  file: ./data/artalk.db    # SQLite路径保留(不影响MySQL使用)
  table_prefix: ""          # 表前缀(可选,如atk_)
  name: artalk              # MySQL数据库名(需提前手动创建)
  host: localhost           # MySQL地址(本地/远程IP)
  port: 3306                # MySQL端口(默认3306)
  user: root                # MySQL用户名(需提前创建好)
  password: "你的MySQL密码"  # 密码(特殊字符需转义,保留引号)
  charset: utf8mb4          # 字符集(兼容emoji)
  ssl: false                # 无需SSL则关闭
  prepare_stmt: true        # 开启预编译语句(性能优化)

3.2 重启容器使配置生效

1
docker restart artalk

其它可能会用到的命令:

1
2
3
4
# 停止容器:
docker stop artalk
# 删除容器:
docker rm artalk  

4. 创建 Artalk 管理员账号

通过容器命令行创建 Artalk 管理员账号(用于登录 Artalk 后台管理评论):

1
docker exec -it artalk artalk admin

按提示输入:

  • Username:管理员用户名(如 admin);
  • Email:登录邮箱(用于后台登录);
  • Password:登录密码;
  • Retype Password:确认密码。

5. Nginx 反向代理配置(对外暴露Artalk)

按照上述操作后,Artalk 服务端现已在监听 8080 端口,需通过 Nginx 反向代理将https://klizzz.com/artalk/ 映射到内网 8080 端口,实现 HTTPS 访问,以保证服务正常。

5.1 修改 Nginx 配置文件

修改主域名的 Nginx 的配置文件:/etc/nginx/conf.d/klizzz.com.conf

在主域名 klizzz.com 的 server 块中新增 Artalk 代理配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ......其它配置......

# ============ 主门户域名配置(klizzz.com核心配置)============
server {
    server_name www.klizzz.com klizzz.com;
    listen 443 ssl;

    # 网站根目录:
    root /var/www/klizzz.com;
    index portal/index.html index.html index.htm;
    
    # ......其它原配置......
    # 2026年4月28日 增加 Artalk 代理
    location /artalk/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    # ......其它原配置......
}

# ......其它配置......

5.2 验证Nginx配置并重启

1
2
nginx -t                    # 验证配置语法
systemctl restart nginx     # 重启Nginx

6. 博客前端集成 Artalk(修改Jekyll模板)

修改博客的模板配置文件:/var/myblog/blog/_layouts/post.html

div.content 标签内、文章内容后添加以下代码:(实际代码以服务器线上版本为准)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- Artalk评论区(2026年4月28日新增) -->
<link href="https://www.klizzz.com/artalk/dist/Artalk.css" rel="stylesheet" />
<script src="https://www.klizzz.com/artalk/dist/Artalk.js"></script>
<div id="Comments"></div>
<script>
// 初始化Artalk评论区
Artalk.init({
  el:        '#Comments',                // 绑定评论区DOM元素
  pageKey:   window.location.pathname,   // 页面唯一标识(URL路径)
  pageTitle: document.title,             // 页面标题(自动获取)
  server:    'https://www.klizzz.com/artalk',  // Artalk服务端地址(Nginx代理后)
  site:      'blog4klizzz',              // Artalk站点名(与服务端配置一致)
})
</script>

修改模板后,重新构建 Jekyll 博客使配置生效:

1
2
cd /var/myblog/blog
jekyll build             # 生成静态文件到_site目录

三、后期维护指南

1. 日常运维命令

1.1 Artalk 容器管理

1
2
3
4
5
6
7
8
# 重启Artalk
docker restart artalk

# 停止并删除Artalk容器(如需重装)
docker stop artalk && docker rm artalk

# 查看Artalk日志(排查故障)
docker logs -f artalk  # -f 实时查看日志

1.2 数据备份

  • MySQL 数据:定期备份artalk数据库(如使用mysqldump);
  • Artalk 配置:备份/var/artalk/artalk.yml
  • Docker 数据卷:备份/var/artalk/data目录(含日志/临时文件)。

2. 常见问题排查

2.1 评论区无法加载

  • 检查 Nginx 代理配置:确认/artalk/路径反向代理到 8080 端口,且 Nginx 已重启;
  • 检查 Artalk 容器状态:docker ps确认artalk容器运行中;
  • 检查浏览器控制台:F12 查看是否有 JS/CSS 加载失败(如跨域、404);
  • 检查 Artalk 服务端日志:docker logs artalk 查看是否有数据库连接错误。

2.2 评论提交失败

  • 确认 Artalk 站点名:前端site配置需与服务端管理员创建的站点名一致;
  • 检查 MySQL 权限:确认 Artalk 配置的 MySQL 账号有artalk数据库的读写权限;
  • 检查端口放行:服务器防火墙/安全组未屏蔽 8080 端口(内网)、443 端口(外网)。

2.3 管理员无法登录

  • 重新创建管理员账号:docker exec -it artalk artalk admin重置密码;
  • 检查 Artalk 配置:确认server地址正确(需带/artalk后缀)。

3. 版本升级

Artalk 版本更新时,按以下步骤升级:

  1. 停止旧容器:docker stop artalk && docker rm artalk
  2. 拉取最新镜像:docker pull artalk/artalk-go
  3. 重新启动容器(与部署的命令一致):
    1
    2
    3
    4
    5
    6
    7
    
    docker run -d \
      --name artalk \
      --restart always \
      --network host \
      -v $(pwd)/artalk.yml:/app/artalk.yml \
      -v $(pwd)/data:/data \
      artalk/artalk-go
    

4. 头像

所有登录用户的头像现在都只显示一个默认 “拉取不到” 的头像,太丑了。

后续看看有没有办法改成一个随机或是默认的什么头像。

四、相关理论知识

1. 反向代理的作用

本文中 Nginx 反向代理/artalk/路径的核心价值:

  • 协议转换:将外网 HTTPS 请求转换为内网 HTTP 请求(Artalk 服务端仅监听 8080 端口,无 HTTPS);
  • 端口隐藏:对外仅暴露 443 端口,避免 8080 端口直接暴露在公网,提升安全性;
  • 域名统一:评论系统与博客使用同一域名(klizzz.com),避免跨域问题。

2. Docker 部署的优势

  • 环境隔离:Artalk 的运行环境(Go、依赖库)与服务器系统隔离,避免版本冲突;
  • 快速部署/回滚:无需手动编译 Go 代码,通过镜像一键部署,回滚仅需重启旧版本容器;
  • 自启动:--restart always确保服务器重启后 Artalk 自动恢复运行。

3. 数据存储选型(SQLite vs MySQL)

  • SQLite:轻量、无需额外部署,适合小流量博客,但并发性能低、数据备份较繁琐;
  • MySQL:适合中高流量场景,支持远程访问、数据备份/恢复更成熟,本文选择 MySQL 以提升可维护性。

4. Jekyll 模板集成原理

Jekyll 是静态站点生成器,post.html作为文章模板,所有文章都会继承该模板的结构。在模板中嵌入 Artalk 前端代码后,每篇文章生成静态 HTML 时都会包含评论区 DOM 和初始化脚本,从而实现所有文章的评论功能统一落地。

5. Artalk 中的 “站点”

用于区分不同业务维度的核心标识,一个 Artalk 服务端可同时为多个独立网站/博客提供评论服务,通过“ 站点名” 隔离不同站点的评论数据。例如本文中配置的blog4klizzz(前端)/klizzz's blog(测试用)即为 Artalk 为当前博客分配的唯一站点标识,所有该博客的评论数据都会关联到这个站点名下,避免与其他站点数据混淆。

本文由作者按照 CC BY 4.0 进行授权