Skip to content

Commit 4ef881b

Browse files
author
global_name
committed
Day 102: macOS 通过 Docker 部署 QQ 聊天记录导出工具 qq-chat-exporter
1 parent a7e69c0 commit 4ef881b

5 files changed

Lines changed: 226 additions & 0 deletions

File tree

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
---
2+
layout: post
3+
title: "Day 102: macOS 通过 Docker 部署 QQ 聊天记录导出工具 qq-chat-exporter"
4+
author: iosdevlog
5+
date: 2026-04-22 22:30:00 +0800
6+
category: [AI, DevOps]
7+
tags: [Docker, QQ, NapCat, qq-chat-exporter, macOS, ChatGPT]
8+
---
9+
10+
# Day 102: macOS 通过 Docker 部署 QQ 聊天记录导出工具 qq-chat-exporter 🎮
11+
12+
QQ 聊天记录导出工具 [qq-chat-exporter](https://github.com/shuakami/qq-chat-exporter) 只提供 Windows 原生包,macOS 用户想用就得折腾一番。本文记录我在 MacBook Pro M4 (Apple Silicon) 上通过 Docker 成功部署的完整过程。
13+
14+
![QQ_Export](/assets/images/AI/Day102/QQ_Export.png)
15+
16+
## 问题背景
17+
18+
- **qq-chat-exporter** 官方只有 Windows Release
19+
- macOS 不在官方支持列表
20+
- NapCat Docker 方案可以曲线救国
21+
- 导出文件默认按 `friend_{uid}_{时间戳}.html` 命名,看不出是谁
22+
23+
## 解决方案
24+
25+
使用 `mlikiowa/napcat-docker` 镜像 + qq-chat-exporter 插件,通过 Docker 跑起一个 Linux QQ 实例。
26+
27+
## 详细步骤
28+
29+
### 环境确认
30+
31+
```bash
32+
docker --version
33+
# Docker Desktop 4.x / 28.x 均可用
34+
35+
docker --version
36+
# Docker version 28.5.2
37+
38+
# Apple Silicon (ARM64) 需要额外安装 esbuild Linux 版
39+
npm install @esbuild/linux-arm64@0.25.10
40+
```
41+
42+
### 目录结构
43+
44+
```
45+
~/qq-chat-exporter/
46+
├── config/
47+
│ └── plugins.json
48+
├── plugins/
49+
│ └── qq-chat-exporter/ # 插件本体
50+
└── qce-v4-tool/ # Web UI 前端
51+
└── (静态文件)
52+
```
53+
54+
### 插件目录创建
55+
56+
```bash
57+
mkdir -p ~/qq-chat-exporter/{config,plugins,qce-v4-tool}
58+
59+
# 从 Release 包解压:
60+
# 1. qq-chat-exporter 插件 -> plugins/qq-chat-exporter/
61+
# 2. qce-v4-tool 静态文件 -> qce-v4-tool/
62+
63+
# Apple Silicon 需要额外步骤
64+
cd plugins/qq-chat-exporter
65+
npm install @esbuild/linux-arm64@0.25.10
66+
```
67+
68+
### 配置文件
69+
70+
**config/plugins.json**
71+
```json
72+
{
73+
"napcat-plugin-builtin": true,
74+
"qq-chat-exporter": true
75+
}
76+
```
77+
78+
### docker-compose.yml
79+
80+
```yaml
81+
version: "3.8"
82+
services:
83+
napcat:
84+
image: mlikiowa/napcat-docker:latest
85+
container_name: napcat
86+
ports:
87+
- "3000:3000" # Web UI
88+
- "40653:40653" # WebSocket
89+
volumes:
90+
- ./config:/app/napcat/config
91+
- ./plugins:/app/napcat/plugins
92+
- ./qce-v4-tool:/app/.qq-chat-exporter/qce-v4-tool
93+
restart: unless-stopped
94+
```
95+
96+
### 启动容器
97+
98+
```bash
99+
docker compose up -d
100+
docker logs -f napcat
101+
```
102+
103+
### QQ 登录
104+
105+
1. 访问 http://localhost:3000
106+
2. 扫码登录 QQ
107+
3. 登录成功后插件自动加载
108+
109+
### 获取访问令牌
110+
111+
```bash
112+
docker exec napcat cat /app/.qq-chat-exporter/security.json
113+
# 返回类似:#P4!tq8%^%KGColZJ84d!PoIo8Wg3q0I
114+
```
115+
116+
### 导出聊天记录
117+
118+
用令牌访问 Web UI,选择好友/群聊,点击导出。
119+
120+
**导出结果**(88个文件):
121+
- 18 个好友聊天记录
122+
- 70 个群聊记录
123+
- HTML 格式,方便浏览
124+
125+
### 文件名处理(重要)
126+
127+
导出的文件名默认是 `friend_u_xxx_timestamp.html`,看不出是谁。需要从 HTML 内容中提取昵称再重命名:
128+
129+
```bash
130+
cd /app/.qq-chat-exporter/exports
131+
132+
# 从 <title>聊天记录 - 昵称</title> 提取并重命名
133+
for f in friend_u_*.html; do
134+
nick=$(grep -oP "(?<=聊天记录 - ).+(?=</title>)" "$f" | head -1)
135+
if [[ -n "$nick" ]]; then
136+
nick_safe=$(echo "$nick" | sed "s/[\/\\&|]/_/g")
137+
base=$(echo "$f" | sed -E "s/_[^_]+\.html$//")
138+
mv "$f" "${base}_${nick_safe}.html"
139+
fi
140+
done
141+
```
142+
143+
**重命名后效果**
144+
145+
| 原文件名 | 重命名后 |
146+
|---------|---------|
147+
| `friend_u_xxx_20260422.html` | `friend_u_xxx_20260422_小武.html` |
148+
| `group_1001220381_20260422.html` | `group_1001220381_20260422_GTOC.html` |
149+
| `group_460952208_20260422.html` | `group_460952208_20260422_C_C++学习交流群.html` |
150+
151+
### 复制到本地
152+
153+
```bash
154+
mkdir -p ~/qq-exports
155+
docker cp napcat:/app/.qq-chat-exporter/exports/. ~/qq-exports/
156+
```
157+
158+
## 技术细节
159+
160+
### 为什么选 NapCat?
161+
162+
[NapCat](https://github.com/NapNeko/NapCatQQ) 是一个轻量级 QQ 协议实现,支持 Docker 部署。相比其他方案:
163+
- 配置简单
164+
- 插件生态丰富
165+
- Web UI 易用
166+
167+
### Apple Silicon 特殊处理
168+
169+
ARM64 架构需要额外的 esbuild 二进制:
170+
```bash
171+
cd plugins/qq-chat-exporter
172+
npm install @esbuild/linux-arm64@0.25.10
173+
```
174+
175+
否则会出现 `esbuild: Wrong architecture` 错误。
176+
177+
### 文件名加昵称
178+
179+
这是 **qq-chat-exporter** 的待实现功能。当前导出会话名只用于目录,不用于文件名。可以向作者提 Issue 或等后续版本支持。
180+
181+
## 截图预览
182+
183+
### 好友列表导出
184+
185+
| 好友 | 导出文件 |
186+
|------|---------|
187+
| 小武 | `friend_u_7OYKOZ2ZQsFEXP6Cg1y5Kg_20260422_小武.html` |
188+
189+
### 群聊导出
190+
191+
| 群名 | 导出文件 |
192+
|------|---------|
193+
| GTOC 格维开源社区 | `group_1001220381_20260422_GTOC.html` |
194+
| AI墨水屏交流群 | `group_1026120682_20260422_AI墨水屏交流群.html` |
195+
| TuyaOpen Framework技术交流 | `group_796221529_20260422_TuyaOpen Framework技术交流.html` |
196+
197+
![QQ_Chat](/assets/images/AI/Day102/QQ_Chat.png)
198+
199+
## 踩坑记录
200+
201+
1. **Apple Silicon 需要额外安装 esbuild**:不装的话插件加载会失败
202+
2. **容器名冲突**:旧容器没删干净会导致启动失败,先 `docker rm -f napcat`
203+
3. **特殊字符处理**:昵称含 `/` `|` `\` 时需要替换为 `_`,否则重命名失败
204+
205+
## 相关链接
206+
207+
- [qq-chat-exporter](https://github.com/shuakami/qq-chat-exporter)
208+
- [NapCat](https://github.com/NapNeko/NapCatQQ)
209+
- [napcat-docker](https://hub.docker.com/r/mlikiowa/napcat-docker)
210+
211+
## 总结
212+
213+
通过 Docker + NapCat,成功在 macOS 上运行了 QQ 聊天记录导出工具。虽然 qq-chat-exporter 官方不支持 macOS,但借助开源社区的插件生态,曲线完成了需求。
214+
215+
导出的 HTML 文件可以直接在浏览器打开,也可以用其他工具进一步处理(如转换为 PDF、导入数据库等)。
216+
217+
后续可以尝试:
218+
- 批量导出所有聊天记录
219+
- 定时自动备份
220+
- 导出为 JSON 格式方便程序处理
221+
222+
![QClaw_Docker](/assets/images/AI/Day102/QClaw_Docker.png)
223+
224+
![QClaw](/assets/images/AI/Day102/QClaw.png)
225+
226+
---

assets/images/AI/Day102/QClaw.png

174 KB
Loading
191 KB
Loading
460 KB
Loading
24.7 KB
Loading

0 commit comments

Comments
 (0)