docs: 更新 Artalk 部署文档 — Caddy 替代 Nginx
- 架构图更新为 Caddy - 反代配置更新为 handle_path /artalk* 模式 - 更新实际部署路径和数据备份命令 - 修正 docker-compose.yml 网络配置
This commit is contained in:
+103
-78
@@ -1,6 +1,6 @@
|
|||||||
# Artalk 评论系统部署
|
# Artalk 评论系统部署
|
||||||
|
|
||||||
> 为 kb 接入自托管评论系统。Artalk:Go 后端 + SQLite,Docker 一键部署,前端 ~40KB,完全自托管无外部依赖。
|
> 为 kb 接入自托管评论系统。Artalk v2.9.1:Go 后端 + SQLite,Docker 一键部署,前端 ~40KB,完全自托管无外部依赖。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -9,33 +9,37 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
graph LR
|
graph LR
|
||||||
Browser["浏览器"]
|
Browser["浏览器"]
|
||||||
Nginx["Nginx"]
|
Caddy["Caddy"]
|
||||||
MkDocs["MkDocs 静态文件"]
|
MkDocs["MkDocs 静态文件"]
|
||||||
Artalk["Artalk Docker<br/>:23366"]
|
Artalk["Artalk Docker<br/>:23366"]
|
||||||
SQLite[("SQLite<br/>/data")]
|
SQLite[("SQLite<br/>/data")]
|
||||||
|
|
||||||
Browser --> Nginx
|
Browser --> Caddy
|
||||||
Nginx -->|"/"| MkDocs
|
Caddy -->|"/"| MkDocs
|
||||||
Nginx -->|"/artalk/"| Artalk
|
Caddy -->|"/artalk* → strip prefix"| Artalk
|
||||||
Artalk --> SQLite
|
Artalk --> SQLite
|
||||||
```
|
```
|
||||||
|
|
||||||
- Artalk 后端和 kb 站点部署在同一台服务器
|
- Artalk 后端和 kb 站点部署在同一台服务器
|
||||||
- Nginx 将 `/artalk/` 路径反代到 Artalk 容器
|
- Caddy 将 `/artalk*` 路径反代到 Artalk 容器(自动去除 `/artalk` 前缀)
|
||||||
- 前端 JS/CSS 也从同域 `/artalk/dist/` 加载,完全自托管
|
- 前端 JS/CSS 同域加载 `/artalk/dist/`,完全自托管无跨域问题
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 一、Docker 部署
|
## 一、Docker 部署
|
||||||
|
|
||||||
### 1.1 创建目录和 compose 文件
|
### 1.1 实际部署位置
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 在服务器上执行
|
~/docker/artalk/
|
||||||
mkdir -p /opt/artalk && cd /opt/artalk
|
├── docker-compose.yml
|
||||||
|
└── data/
|
||||||
|
├── artalk.db # SQLite 数据库
|
||||||
|
├── artalk.yml # 配置文件
|
||||||
|
└── artalk.log # 日志
|
||||||
```
|
```
|
||||||
|
|
||||||
`docker-compose.yml`:
|
### 1.2 docker-compose.yml
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
@@ -43,55 +47,50 @@ services:
|
|||||||
image: artalk/artalk-go
|
image: artalk/artalk-go
|
||||||
container_name: artalk
|
container_name: artalk
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
|
||||||
- "127.0.0.1:23366:23366" # 仅本地监听,由 Nginx 反代对外
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/data # SQLite 数据持久化
|
- ./data:/data
|
||||||
environment:
|
environment:
|
||||||
- TZ=Asia/Shanghai
|
- TZ=Asia/Shanghai
|
||||||
- ATK_LOCALE=zh-CN
|
- ATK_LOCALE=zh-CN
|
||||||
- ATK_SITE_DEFAULT=我的知识库
|
networks:
|
||||||
- ATK_SITE_URL=https://<你的域名>
|
- nginx
|
||||||
- ATK_TRUSTED_DOMAINS=https://<你的域名>
|
|
||||||
|
networks:
|
||||||
|
nginx:
|
||||||
|
external: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.2 启动
|
> 注意:需要加入 `nginx` 网络以便 Caddy 能通过容器名 `artalk` 访问。
|
||||||
|
|
||||||
|
### 1.3 启动
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d
|
cd ~/docker/artalk && docker compose up -d
|
||||||
docker compose logs -f # 查看日志确认启动成功
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 二、Nginx 反向代理
|
## 二、Caddy 反向代理
|
||||||
|
|
||||||
### 方式 A:Nginx Proxy Manager
|
Caddyfile 配置(`~/docker/caddy/Caddyfile`):
|
||||||
|
|
||||||
在 Proxy Manager 面板中添加一条 **Custom Location**(在你的 kb 站点 Proxy Host 里):
|
```caddy
|
||||||
|
note.kurihada.com {
|
||||||
| 字段 | 值 |
|
handle_path /artalk* {
|
||||||
|------|-----|
|
reverse_proxy artalk:23366
|
||||||
| Location | `/artalk/` |
|
}
|
||||||
| Scheme | `http` |
|
handle {
|
||||||
| Forward Hostname | `127.0.0.1` |
|
root * /srv/mkdocs
|
||||||
| Forward Port | `23366` |
|
file_server
|
||||||
|
}
|
||||||
### 方式 B:手动 Nginx 配置
|
|
||||||
|
|
||||||
在 kb 站点的 `server` 块中添加:
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
location /artalk/ {
|
|
||||||
proxy_pass http://127.0.0.1:23366/;
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
然后 `nginx -t && nginx -s reload`。
|
- `handle_path /artalk*`:匹配 `/artalk` 开头的路径,**自动去除 `/artalk` 前缀**后转发
|
||||||
|
- 例如 `/artalk/dist/Artalk.js` → Artalk 收到 `/dist/Artalk.js`
|
||||||
|
- `handle { ... }` 包裹 `file_server`,保证与 `handle_path` 互斥不冲突
|
||||||
|
|
||||||
|
修改后重载:`docker restart caddy`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -99,41 +98,51 @@ location /artalk/ {
|
|||||||
|
|
||||||
### 3.1 创建管理员
|
### 3.1 创建管理员
|
||||||
|
|
||||||
部署完成后,访问 `https://<你的域名>/artalk/`,会看到 Artalk 的登录界面。
|
```bash
|
||||||
|
docker exec -it artalk ./artalk admin \
|
||||||
|
--name <用户名> \
|
||||||
|
--email <邮箱> \
|
||||||
|
--password <密码>
|
||||||
|
```
|
||||||
|
|
||||||
1. 在服务器上执行命令创建管理员:
|
或交互式:`docker exec -it artalk artalk admin`
|
||||||
```bash
|
|
||||||
docker exec -it artalk artalk admin
|
|
||||||
```
|
|
||||||
2. 按提示输入用户名、邮箱和密码
|
|
||||||
3. 在网页端使用刚创建的账号登录
|
|
||||||
|
|
||||||
### 3.2 验证评论功能
|
### 3.2 关键配置文件
|
||||||
|
|
||||||
1. 打开 kb 任意文章页面(如技术笔记)
|
Artalk 配置文件位于 `~/docker/artalk/data/artalk.yml`,需确保以下两项正确:
|
||||||
2. 滑到页面底部,应该看到 Artalk 评论区
|
|
||||||
3. 发一条测试评论
|
```yaml
|
||||||
4. 确认评论正常显示
|
site_default: 我的知识库
|
||||||
|
site_url: "https://note.kurihada.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
修改后 `docker restart artalk` 生效。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 四、可选配置
|
## 四、MkDocs 端运作方式
|
||||||
|
|
||||||
### 4.1 邮件通知
|
kb 已通过 Material 主题的 `custom_dir` 机制集成了 Artalk 前端。
|
||||||
|
|
||||||
在 Artalk 管理面板(设置 → 邮件)配置 SMTP,用户回复时会收到邮件通知。
|
### 关键文件
|
||||||
|
|
||||||
### 4.2 验证码
|
- **覆盖模板**:`docs/overrides/partials/comments.html` — Artalk JS/CSS 引入 + 初始化
|
||||||
|
- **CSS/JS 路径**:`/artalk/dist/Artalk.css` 和 `/artalk/dist/Artalk.js`(同域加载)
|
||||||
|
- **API 地址**:`window.location.origin + '/artalk'`(自动适配当前域名)
|
||||||
|
|
||||||
管理面板 → 验证码,可开启 reCAPTCHA 或图片验证码,防止垃圾评论。
|
### 关闭特定页面评论
|
||||||
|
|
||||||
### 4.3 Gravatar 头像
|
在 `.md` 文件头部添加 frontmatter:
|
||||||
|
|
||||||
默认启用,用户评论时根据邮箱自动显示 Gravatar 头像。
|
```yaml
|
||||||
|
---
|
||||||
|
comments: false
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
### 4.4 图片上传
|
### 深色模式
|
||||||
|
|
||||||
可配置本地存储或 S3/OSS 图床,用户在评论中上传图片。
|
Artalk 通过 MutationObserver 监听 Material 主题的 `data-md-color-scheme` 属性变化,自动跟随切换。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -147,27 +156,43 @@ docker logs artalk -f
|
|||||||
docker restart artalk
|
docker restart artalk
|
||||||
|
|
||||||
# 升级
|
# 升级
|
||||||
docker compose pull
|
cd ~/docker/artalk && docker compose pull && docker compose up -d
|
||||||
docker compose up -d
|
|
||||||
|
|
||||||
# 备份数据(SQLite 文件)
|
# 备份数据
|
||||||
cp /opt/artalk/data/artalk-go.db /backup/artalk-$(date +%Y%m%d).db
|
cp ~/docker/artalk/data/artalk.db ~/backup/artalk-$(date +%Y%m%d).db
|
||||||
```
|
```
|
||||||
|
|
||||||
### 数据迁移
|
### 查看 Artalk 配置
|
||||||
|
|
||||||
Artalk 数据存储在 `/opt/artalk/data/` 目录下的 SQLite 文件中。备份只需复制这个文件。
|
访问 `https://note.kurihada.com/artalk/api/v2/conf` 查看当前前端配置。
|
||||||
|
|
||||||
如需迁移到其他服务器,将整个 `/opt/artalk/` 目录复制过去,重新 `docker compose up -d` 即可。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 六、MkDocs 端运作方式
|
## 六、可选配置
|
||||||
|
|
||||||
kb 已通过 Material 主题的 `custom_dir` 机制集成了 Artalk 前端,无需手动在每个页面添加代码。
|
### 邮件通知
|
||||||
|
|
||||||
- **覆盖文件**:`docs/overrides/partials/comments.html`
|
编辑 `~/docker/artalk/data/artalk.yml`,配置 SMTP:
|
||||||
- **关闭特定页面评论**:在 `.md` 文件头部添加 `comments: false`
|
|
||||||
- **自定义配置**:修改 `docs/overrides/partials/comments.html` 中的 `Artalk.init({...})` 参数
|
|
||||||
|
|
||||||
详细参数说明见 [Artalk 前端配置文档](https://artalk.js.org/guide/frontend/config.html)。
|
```yaml
|
||||||
|
email:
|
||||||
|
enabled: true
|
||||||
|
send_type: smtp
|
||||||
|
send_name: "{{reply_nick}}"
|
||||||
|
send_addr: noreply@example.com
|
||||||
|
smtp:
|
||||||
|
host: smtp.qq.com
|
||||||
|
port: 587
|
||||||
|
username: example@qq.com
|
||||||
|
password: ""
|
||||||
|
```
|
||||||
|
|
||||||
|
然后 `docker restart artalk`。
|
||||||
|
|
||||||
|
### 验证码
|
||||||
|
|
||||||
|
默认已启用图片验证码(`captcha.captcha_type: image`),评论 3 次后触发。
|
||||||
|
|
||||||
|
### 社交登录
|
||||||
|
|
||||||
|
配置 `auth` 段可启用 GitHub/Gitea/Google 等社交账号登录,参见 [Artalk 文档](https://artalk.js.org/guide/backend/auth.html)。
|
||||||
|
|||||||
Reference in New Issue
Block a user