静态博客最尴尬的地方是没有人说话。文章写得再细,读者想接一句「我这里也踩了这个坑」,也只能去群里喊。动态站点自带评论,静态站没有——想补上,就得另找一个能自己托管的东西。
第三方评论插件大多寄人篱下:数据在别人服务器上,服务一停评论就没了,广告和跳转还甩不掉。想在文章下面安安静静放一个评论区,最稳的办法还是自己跑一个后端。
Artalk 就是干这个的。一个二进制文件,后端、后台、接口全在里面,数据落在 SQLite,前端挂两行脚本就有评论区。MIT 协议,2021 年写到现在,v2.10.1 是这次的版本。Windows 版 54.2MB,Linux 版 52.8MB,启动到端口可连 0.4 秒左右。我把两个平台都跑了一遍,还顺手把后台、前台、深色模式全截了图。不适合哪几类人,后面单独写。
评论系统怎么选,和 Waline 差在哪
同类里最常被拿来比的是 Waline。两者的定位差不多,差别主要在运行时:
- Waline 要 Node。部署得先装 Node 环境,用 Vercel 的话数据在云数据库里;自托管就得自己维护 Node 进程。
- Artalk 是个二进制。下载、解压、
./artalk server,没有运行时依赖,也没有node_modules。 - 数据都在自己手里。SQLite 模式下所有内容就是
data/artalk.db一个文件,备份等于拷文件。
功能上两边其实差不多:都有后台审核、验证码、邮件通知、导入导出、多站点。区别是 Artalk 的二进制里有内置界面,装完直接开 /sidebar/ 就能管,不用再配一份前端。
代价也直接:它不帮你托管。域名、反代、证书、开机自启,都得自己弄。
我的测试环境
- Windows:Windows 11,解压到本地目录直接跑,没装服务、没写注册表
- Linux:CentOS Stream 9,x86_64,香港节点,走面板 Web 终端
- 数据库:两边都用默认的 SQLite,不额外装 MySQL
- 验证方式:建管理员 → 起服务 → 用接口发评论 → 从列表接口读回 → 打开后台页确认数据在
两个平台的包都核对过官方 checksums.txt,sha256 完全一致。
部署:Windows 三步
解压 artalk_v2.10.1_windows_amd64.zip,里面是一个 artalk.exe 加一份配置模板 artalk.yml。
第一步,建 data 目录。 在 exe 旁边新建一个叫 data 的文件夹。这一步别跳过,原因写在后面的「坑」里。
第二步,建管理员账号。
artalk.exe admin --name admin --email 你的邮箱 --password 你的密码第三步,启动。
artalk.exe server浏览器打开 http://127.0.0.1:23366/sidebar/,用刚建的账号登录,后台就出来了。实测从执行命令到端口可连 0.37 秒。
部署:Linux 一样
tar xzf artalk_v2.10.1_linux_amd64.tar.gz
cd artalk_v2.10.1_linux_amd64
chmod +x artalk && mkdir -p data
./artalk admin --name admin --email 你的邮箱 --password 你的密码
./artalk servertar.gz 里的二进制本来就带执行位,chmod 是保险。Linux 侧实测启动 141 毫秒,比 Windows 快一半,这个差距主要来自启动时的动态链接开销。
前端接入:两行脚本
页面里放一个容器,引两个文件,初始化一次:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/artalk@2.10.1/dist/Artalk.css">
<script src="https://cdn.jsdelivr.net/npm/artalk@2.10.1/dist/Artalk.js"></script>
<div id="Comments"></div>
<script>
const Artalk = window.Artalk.default || window.Artalk;
new Artalk({
el: "#Comments",
site: "Default Site",
server: "http://你的服务器:23366",
pageKey: location.pathname,
});
</script>pageKey 是评论分组依据,同一篇文章要稳定,用 URL 路径最省事。site 要和后台里配的站点名一致,对不上会一条评论都读不到。
实测数据
同一套配置,两个平台分别跑:
- 主程序体积:Windows
artalk.exe54.2MB;Linuxartalk52.8MB - 启动:Windows 首次(含建库)1.92 秒,之后 0.37 秒;Linux 141 毫秒
- 接口:
/api/v2/version200;/api/v2/conf200;后台/sidebar/200,返回text/html - 发评论:Windows 7 条、Linux 1 条,全部 200,读回条数一致
- 数据库:初始
artalk.db160KB,只有一个文件 - 整合包:36.4MB(双平台主程序 + 官方配置 + 中文示例配置 + 中文说明)
解压即用也验了一遍:解到全新目录、按说明先建 data、建号、直接起服务,1.92 秒可连,发一条评论读回 1 条,后台 200。
界面长什么样
后台是内置的,不用另配前端:

登录页只有一个邮箱、一个密码和一颗按钮,没有任何多余的东西。注意界面语言默认是英文,在 artalk.yml 里把 locale: en 改成 zh-CN 才是中文。

评论列表按「全部 / 待审 / 个人」分组,每条下面直接给赞同、回复、折叠、已审、置顶、编辑、删除。审核不用跳页,一行操作完。

设置页把站点、迁移、应用、数据库、服务器、日志、缓存、SSL、评论审核、验证码、IP 属地、图片上传、邮件通知全部摊在一页里,改完即时生效,不用重启。

这是把组件挂到文章页之后的样子:昵称、邮箱、网址一行,多行编辑框带表情和图片按钮,下面是评论列表。整个块是浅色主题,跟页面背景一致。

深色模式开关在初始化参数里,切过去之后编辑框、正文、按钮配色全套跟着换。

手机端不用单独做,组件本身是响应式的,编辑框和列表都会自动变单列。
三个真实的坑
第一个,data 目录不会自动创建。 配置里写的是 db.file: ./data/artalk.db,但这个目录程序不给你建。我删掉 data 再启动,结果是:服务正常起来、端口能连、发评论接口还返回 200,但目录始终没被创建,artalk.db 也没出现。等你重启一次,评论就没了。所以部署第一步永远是 mkdir data。
第二个,artalk.yml 里的 port 会盖掉命令行参数。 我想换个端口,敲的是 ./artalk server --port 23369,结果它照旧去绑 23366,日志里报 failed to listen ... 23366。改端口必须改配置文件,--port 在这里不起作用。
第三个,列表接口不带分页参数会返回空数组。 请求 /api/v2/comments?page_key=xxx&site_name=xxx,返回里 count 是 3,comments 却是 []——看着像数据丢了。加上 limit 和 offset 立刻就正常:
/api/v2/comments?page_key=post-1&site_name=Default%20Site&limit=10&offset=0另外还有两个小地方容易卡住:默认 captcha.action_limit 是 3,连发 3 条之后第 4 条直接 403,要过验证码;前端如果和后端不同源,必须在 trusted_domains 里把前端地址加进去,否则组件只显示一句 Failed to fetch。
上线:常驻与安全
命令行跑着关窗口就断,正式用挂成服务。
Linux 用 systemd,ExecStart 指向 artalk server,WorkingDirectory 一定要指到程序目录——不然它去别处找 artalk.yml 和 data。
Windows 用 nssm 或任务计划程序,同样注意「起始于」要填程序目录。
三件收尾的事:
- 别把 23366 裸奔在公网。前面套一层 Nginx 走 443,后台路径单独加访问限制。
app_key要设。不设的话启动时会打一行警告,然后每次重启随机生成,等于所有登录态失效。- 备份就是拷
data/artalk.db。SQLite 单文件,定时cp一份出去即可。
这几类人适合,这几类不适合
适合:
- 用 Hexo / Hugo / Astro 这类静态站,想补一个能自己控的评论区
- 不想为了评论再维护一套 Node 环境的人
- 数据要放自己机器上、要求能一键备份的人
- 想同时管几个站点的评论区,一个后台看全部
不适合:
- 完全没有服务器的人。它有二进制但没有托管,得有个能跑东西的地方
- 期待「装完就有访客」的人。它只负责评论,不负责带流量
- 需要多节点高可用的人。单二进制 + SQLite 适合个人站和中小站,撑不住集群
- 只想用第三方 SaaS 评论、不想碰运维的人,直接用现成服务更省事
常见问题
{collapse-item label="能跑在宝塔面板上吗?"}A:能。建一个站点,把二进制和 data 目录放进去,用宝塔的「进程守护」或 systemd 拉起,再反代到 23366 就行。{/collapse-item}
{collapse-item label="数据库能不能换成 MySQL?"}A:可以,artalk.yml 里 db.type 改成 mysql 并填好连接信息即可。个人站没必要,SQLite 足够。{/collapse-item}
{collapse-item label="评论数据怎么迁移?"}A:后台有「迁移」页,支持从 Artalk 旧实例或其他评论系统导入,也可以直接拷 artalk.db。{/collapse-item}
{collapse-item label="前端挂上去一片空白怎么办?"}A:先看控制台。多半是三条之一:site 名字和后台不一致、server 地址写错、跨源没配 trusted_domains。{/collapse-item}
{collapse-item label="怎么改端口?"}A:改 artalk.yml 里的 port。命令行 --port 会被配置覆盖,这点上面坑二写过。{/collapse-item}
源码获取
建议先转存到自己网盘再下载。手机上打开链接点右下角「保存到网盘」,回头在夸克 App 的「我的网盘」里下载。