最近把本博客的评论系统从 Waline 迁移到了 Artalk。主要原因就是 Waline 是纯 js 实现, NodeJS 运行时有点太重了;最近正在把服务整合到新小鸡上,遂迁移。
Artalk 够轻够简单,完全单文件化,连静态资源都被嵌入了可执行文件;不过总比臃肿的 nodejs 要好。 Artalk 另一个优势是可配置项更多,文档更详细,看着就更像个正经项目(然而是高三大佬写的
安装依赖
我们使用 PostgreSQL。首先安装依赖,下载可执行文件
LATEST=v2.8.7
apt install postgresql
wget https://github.com/ArtalkJS/Artalk/releases/download/${LATEST}/artalk_${LATEST}_linux_amd64.tar.gz
tar xf artalk_${LATEST}_linux_amd64.tar.gz
mv artalk_${LATEST}_linux_amd64/artalk /usr/local/bin
rm -r artalk_${LATEST}_linux_amd64.tar.gz artalk_${LATEST}_linux_amd64
配置数据库
-- sudo -u postgres psql
CREATE USER artalk WITH PASSWORD '<CUSTOM PASSWORD>';
CREATE DATABASE artalk_db OWNER artalk;
GRANT ALL PRIVILEGES ON DATABASE artalk_db TO artalk;
配置文件
尽管示例有很多配置项,实际上都可以网页上 ui 配置。配置文件只需要写最基本的暴露端口和数据库配置就行。(不过文件权限是个问题)
/etc/artalk.yml
host: "127.0.0.1"
port: 23333
app_key: <CUSTOM KEY>
locale: zh-CN
timezone: Asia/Shanghai
log:
enabled: true
filename: /var/log/artalk/access.log
db:
type: pgsql
name: artalk_db
host: localhost
port: 5432
user: artalk
password: <CUSTOM PASSWORD>
守护进程
我们用 systemd。我个人比较喜欢 DynamicUser
/lib/systemd/system/artalk.service
[Unit]
Description=Artalk
Documentation=https://artalk.js.org/guide/
[Service]
DynamicUser=yes
StateDirectory=artalk
LogsDirectory=artalk
WorkingDirectory=/var/lib/artalk
ExecStart=/usr/local/bin/artalk -c /etc/artalk.yml server
Restart=on-abnormal
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
然后 systemctl daemon-reload && systemctl start artalk && systemctl status artalk
启动。
设置管理员
现在这个 artalk 能 localhost 访问了,但是没有管理员账户。
运行 artalk -c /etc/artalk.yml admin
命令,按照提示填用户密码,artalk 会写到数据库里的。
反向代理
我个人比较喜欢只暴露 nginx 的 80 和 443,其他的全放在防火墙后面。这样最大的好处是——可以通过 /etc/nginx/sites-enabled
方便地管理单机网站。
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name <COMMENT DOMAIN>;
ssl_certificate <CERT PATH>;
ssl_certificate_key <KEY PATH>;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:23333;
client_max_body_size 100m; # 与 artalk 配置项保持相同
}
}
其他配置
- ip 属地
- Turnstile 人机检验 (实测不太好用)
- 文件上传
- 日志