|
| 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 | + |
| 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 | + |
| 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 | + |
| 223 | + |
| 224 | + |
| 225 | + |
| 226 | +--- |
0 commit comments