自建评论系统 Artalk 部署实操(2026):Docker 起服务,数据留在自己服务器

WordPress 自带的评论用了几年,垃圾评论靠插件拦,数据躺在站点的数据库里,换主题换模板的时候评论区样式总得跟着改一遍。真正让我想换掉它的是一个更朴素的原因:我想让评论数据是一个能随手打包带走的文件,而不是混在 wp_comments 表里跟文章、用户、选项挤在一起。

Artalk 就是这个路子,一个 Go 写的自托管评论系统,后端一个容器,数据默认写成本地的 SQLite 文件,前端引一段 JS 就挂上了。我这边用 Docker 部署到自己的服务器,整个过程不到十分钟,下面按顺序说。

一、前置条件

一台能跑 Docker 的服务器,1 核 1G 就够,Artalk 后端本身很轻;一个准备给评论用的二级域名,比如 comments.example.com;站点这边如果是宝塔面板,反代和证书都是点点鼠标的事。另外记住自己是 WordPress 站,接入那步在第五节。

二、起容器

找个目录放数据,官方镜像叫 artalk/artalk-go,容器内监听 23366 端口:

mkdir -p /www/wwwroot/artalk && cd /www/wwwroot/artalk

docker run -d \
  --name artalk \
  --restart unless-stopped \
  -p 127.0.0.1:8080:23366 \
  -v $(pwd)/data:/data \
  -e "TZ=Asia/Shanghai" \
  -e "ATK_LOCALE=zh-CN" \
  -e "ATK_SITE_DEFAULT=你的站点名" \
  -e "ATK_SITE_URL=https://www.example.com" \
  artalk/artalk-go

端口那行写成 127.0.0.1:8080:23366,只在本地监听,外面交给 Nginx 反代。直接写 -p 8080:23366 等于把后台挂到公网上裸奔,等会儿配了 HTTPS 再回头看这个明文端口会很别扭。镜像不写版本号拉的是 latest,写这篇的时候最新是 v2.10.0,不想哪天被更新的版本搞坏就写成 artalk/artalk-go:2.10.0。

-v $(pwd)/data:/data 是重点,SQLite 数据库和上传的图片都在这个目录里。容器可以删了重建,这个目录别删。

三、建管理员账号

刚起好的 Artalk 没有任何用户,后台登不进去,账号要用命令行建:

docker exec -it artalk artalk admin

跟着提示输用户名、邮箱、密码。建完浏览器打开 http://服务器IP:8080,用刚才的账号登录。

四、Nginx 反代加 HTTPS

评论服务单独用一个子域名最省心,证书可以让宝塔直接给这个子域签一张,也可以复用站点那张通配符证书。反代配置大致这样:

server {
    listen 443 ssl;
    server_name comments.example.com;

    ssl_certificate     /www/server/panel/vhost/cert/comments.example.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/comments.example.com/privkey.pem;

    location / {
        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;
    }
}

证书路径按自己的来,宝塔签的证书目录就是上面那种结构。X-Forwarded-For 这行别省,Artalk 靠它记录评论来源 IP,做限流和封禁的时候要用;不带这行,所有评论在后台显示的 IP 都是 127.0.0.1,有人刷评论你连源头都看不到。

改完先测再 reload:

nginx -t && nginx -s reload

五、验证有没有真的起来

三层都要看。容器还在跑:

docker ps --filter name=artalk
docker logs --tail 20 artalk

域名通不通:

curl -s -o /dev/null -w "%{http_code}\n" https://comments.example.com

返回 200 或者 302 都算正常。最后进后台控制台,把站点 URL 和站点名确认一遍,顺手改掉默认密码。

六、挂到 WordPress 上

Artalk 官方给的是 Typecho、Hexo、VuePress 那些平台的接入和导出工具,没有 WordPress 插件,所以要自己挂。最省事的方式是往 wp-content/mu-plugins/ 丢一个文件,不用动主题模板,换主题也不会丢:

<?php
// wp-content/mu-plugins/artalk-comments.php
add_filter('comments_open', '__return_false', 20);
add_filter('comments_number', '__return_empty_string', 20);

add_filter('the_content', function ($content) {
    if (!is_singular('post') || is_admin()) {
        return $content;
    }
    $server = 'https://comments.example.com';
    $block = '<link rel="stylesheet" href="' . $server . '/dist/Artalk.css">'
        . '<div id="Comments"></div>'
        . '<script src="' . $server . '/dist/Artalk.js"></script>'
        . '<script>Artalk.init({'
        . 'el: "#Comments",'
        . 'pageKey: ' . wp_json_encode(get_permalink()) . ','
        . 'pageTitle: ' . wp_json_encode(get_the_title()) . ','
        . 'server: "' . $server . '",'
        . 'site: "你的站点名"'
        . '});</script>';
    return $content . $block;
});

前面两个过滤器把 WordPress 原生的评论表单关掉,后面那段把 Artalk 的容器和初始化脚本接到正文末尾。pageKey 用的是文章固定链接,这一条后面会变成一个坑。

主题自己那套历史评论列表可能还会显示,多数主题后台有「显示评论」的开关,关掉就行,不行就加一条自定义 CSS。

七、常见坑与回滚

换域名之后评论全不见了。 pageKey 存的是固定链接,域名一换,新页面对不上旧评论。搬家之前先按之前那篇 WordPress 搬家加换域名 的思路理清替换范围,搬完记得去后台把旧 pageKey 一起改掉,或者在 Artalk 控制台里做数据迁移。

发评论报错、控制台刷不出来。 九成是地址不一致:ATK_SITE_URL、前端 server 参数、浏览器地址栏这三个地方的协议和域名必须完全对得上,http 和 https 混用会被浏览器按跨域拦掉。

端口被占。 启动时报 address already in use,换个宿主端口,比如 -p 127.0.0.1:8090:23366,Nginx 里的 proxy_pass 跟着改。

备份和更新。 数据全在 data 目录,tar -czf artalk-$(date +%F).tar.gz data 打一份,直接接进已有的 全站自动备份任务 一起传走。更新就三条命令:docker pull artalk/artalk-go、docker rm -f artalk、把第二节的 run 再执行一遍,卷挂回去数据还在。

回滚。 docker rm -f artalk 删容器,再删掉 mu-plugins 里那个文件,WordPress 立刻退回原生评论,数据库里的老评论一条没少。等确认不要了,./data 目录再删。

自建评论最舒服的地方不是省事,是数据终于是个自己的文件。后台的迁移工具支持 Artrans 格式的导入导出,哪天想换平台,导出一个 json 就走。服务本身还可以接进 Uptime Kuma 那套监控,加一条 https 监测,证书和可用性一起盯着。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容