工具部署|大肥鱼 · AstrBot + NapCat QQ 机器人全家桶

想要一只住在 QQ 里、会接话会吐槽、有固定人设、7×24 在线的小鲸鱼?这篇把「大肥鱼」整套方案在 Linux + Docker 上实机跑了一遍:NapCat 负责登录 QQ(协议端),AstrBot 负责思考(插件、人格、记忆),对话模型接 DeepSeek。看图、听语音、发语音条可以再接阿里云百炼,本文先把最核心的「文字私聊」跑通。

本站实测环境:Debian 13 + Docker 27.5,AstrBot v4.29.0(自建镜像 dafeiyu-astrbot),NapCat mlikiowa/napcat-docker:v4.18.37。

大肥鱼头像示意

图:社区二创 / AI 生成素材,非官方

一、架构一图看懂

QQ 用户 ⇄ 腾讯服务器 ⇄ NapCat(Docker) ⇄ WebSocket :6199 ⇄ AstrBot(Docker) ⇄ DeepSeek API
组件 端口 作用
AstrBot 面板 6185 配模型、人格、插件、白名单
NapCat WebUI 6099 扫码登录、OneBot11 网络配置
aiocqhttp 反向 WS 6199 NapCat 主动连 AstrBot:ws://…:6199/ws

二、准备

  • 一台 Linux 服务器(2C4G 够用),装好 Docker 与 compose 插件;
  • 一个 QQ 小号(强烈建议,不要用主号);
  • 一个 DeepSeek API Key(对话主力,按量计费);
  • 可选:阿里云百炼 Key(图片理解 / 语音识别 / 语音合成)。

三、Docker 部署步骤

1. 目录约定

/opt/dafeiyu/
├── compose.yaml
├── Dockerfile          # 官方镜像 + edge-tts / imageio-ffmpeg
├── patches/            # 核心补丁(bind-mount,升级不丢)
├── astrbot/data/       # AstrBot 数据(插件放 data/plugins/)
├── napcat/config|qq/   # NapCat 配置与登录态
└── heal_ws.py          # WS 自愈脚本

2. Dockerfile

FROM soulter/astrbot:v4.29.0
RUN pip install --no-cache-dir edge-tts imageio-ffmpeg

3. compose.yaml 关键部分

services:
  astrbot:
    build: .
    image: dafeiyu-astrbot:latest
    container_name: astrbot
    restart: unless-stopped
    ports:
      - "127.0.0.1:6185:6185"
    volumes:
      - ./astrbot/data:/AstrBot/data
    environment:
      - TZ=Asia/Shanghai

  napcat:
    image: mlikiowa/napcat-docker:v4.18.37
    container_name: napcat
    restart: unless-stopped
    hostname: dafeiyu-napcat        # 固定主机名,减少「新设备」风控
    ports:
      - "127.0.0.1:6099:6099"
    volumes:
      - ./napcat/config:/app/napcat/config
      - ./napcat/qq:/app/.config/QQ
    environment:
      - TZ=Asia/Shanghai
      - ACCOUNT=你的QQ小号
      - NAPCAT_QUICK_ACCOUNT=你的QQ小号

⚠️ 变量名是 ACCOUNT(入口脚本执行 qq -q $ACCOUNT 快速登录)和 NAPCAT_QUICK_ACCOUNT(Worker 重启后自动尝试快速登录),不是 NAPCAT_ACCOUNT,写错了等于没写。

4. 构建并启动

cd /opt/dafeiyu
sudo docker compose build
sudo docker compose up -d
sudo docker ps

容器与端口

5. SSH 隧道访问面板

面板和 WebUI 默认只绑 127.0.0.1,不要直接暴露公网,在自己电脑上开隧道:

ssh -L 6185:127.0.0.1:6185 -L 6099:127.0.0.1:6099 root@你的服务器

然后浏览器打开 http://127.0.0.1:6185(AstrBot)和 http://127.0.0.1:6099(NapCat)。

  • AstrBot 初始账号密码:docker logs astrbot | grep -A2 "Initial username",登录后立刻改密码;
  • NapCat WebUI 带 token 的地址:docker logs napcat | grep "WebUi User Panel Url"。

6. 扫码登录小号

首次快速登录会失败(没有历史登录记录),NapCat 自动退回二维码登录。二维码在 WebUI 里,或:

sudo docker cp napcat:/app/napcat/cache/qrcode.png ./qrcode.png

用小号手机 QQ 扫码确认即可。

四、接线:DeepSeek + aiocqhttp + 人格

1. DeepSeek 提供商

AstrBot 面板 → 模型提供商 → 新增 DeepSeek:

  • API Base:https://api.deepseek.com/v1
  • Key:填你的 DeepSeek Key
  • 模型:deepseek-chat,并设为默认聊天模型

2. QQ 适配器(aiocqhttp)

面板 → 平台适配器 → 新增 OneBot v11(aiocqhttp):

  • 反向 WS 监听:0.0.0.0,端口 6199(路径 /ws)

保存后确认端口在监听:ss -lntp | grep 6199。

3. NapCat 侧 websocket 客户端

NapCat WebUI → 网络配置 → 新增 WebSocket 客户端,URL:

  • 同一 compose 网络:ws://astrbot:6199/ws
  • host 网络模式:ws://127.0.0.1:6199/ws

AstrBot 日志出现 aiocqhttp(OneBot v11) 适配器已连接。 就通了。

4. 人格「大肥鱼」

面板 → 人格 → 新建,把人格文件里 --- 分隔线之后的整段正文粘进系统提示词,命名「大肥鱼」,在配置里设为默认人格。表情转换插件 astrbot_plugin_face_convert 整个文件夹丢进 data/plugins/,重启即加载(会把 [旺柴] 这类文字表情转成真 QQ 表情)。

5. 只回私聊(强烈建议)

面板 → 配置 → 访问控制:

  • 开启「会话白名单」;
  • 白名单只填自己的私聊会话:default:FriendMessage:<你的QQ>(私聊发 /sid 可查);
  • 关闭「群聊中管理员豁免白名单」。

这样机器人被拉进任何群都不会说话,只回你本人的私聊。另外加好友需你手动通过,第一道门永远在自己手里。

五、实测效果

私聊发「在吗」,约 1.6 秒后回复:

AstrBot 私聊日志

QQ 私聊实测(已打码)

图:私聊实测(含「在吗」与中世纪要点问答);头像与昵称已打码

六、实测踩坑

  1. 构建卡在 pip:清华源找不到包
    原 Dockerfile 用 -i https://pypi.tuna.tsinghua.edu.cn/simple,在我们的构建环境里报 Could not find a version that satisfies the requirement edge-tts (from versions: none)。去掉 -i 改走官方 PyPI 后 3 秒装完。国内服务器若官方源慢,换别的可用镜像,别死磕一个。

  2. Docker 默认网桥不可用 → 改 host 网络
    宿主机 daemon 配置为 "bridge":"none"、iptables:false 时,compose 默认网络起不来、端口映射也无效。解决:两个服务都加 network_mode: host,构建也加 build.network: host。此时 NapCat 连 AstrBot 要写 ws://127.0.0.1:6199/ws,不能用 astrbot 主机名;端口也不再受 127.0.0.1: 绑定保护,务必用防火墙/安全组拦住 6185/6099/6199。

  3. NapCat 网络配置是按 QQ 号分文件的
    配置文件是 napcat/config/onebot11_<QQ号>.json。登录前可以先把 onebot11.json 和 onebot11_<号>.json 都写好 websocket 客户端,登录后自动生效;换号记得复制一份新号的文件。

  4. WS 断了不会自己回来
    AstrBot 重启后,NapCat 的反向 WS 有时 1~10 分钟才重连,甚至不回来,表现为「机器人死了」。别重启 NapCat(可能要重新扫码),用 heal_ws.py:它通过 NapCat WebUI API 把 websocket 客户端关一下再开,2 秒重连、免扫码:

    python3 /opt/dafeiyu/heal_ws.py
    

    可以挂成计划任务每 3 分钟巡检一次。

  5. 少用 up -d 重建 NapCat
    容器重建会变设备指纹、丢快速登录记录。改配置优先 docker restart 或 WebUI。

七、风险提示(请务必看完)

  • QQ 风控 / 封号:NapCat 是非官方协议端,存在风控甚至封号可能。强烈建议使用小号;手机端偶尔挂着保持活跃;固定 hostname(可选再固定 machine-id),减少「新设备」判定;容器重建可能丢快速登录。
  • API 费用:DeepSeek 对话以及百炼视觉 / 语音识别 / 语音合成均按量计费,注意额度与账单;记忆嵌入可走本地 Ollama 降本。
  • 密钥与隐私:截图务必打码 QQ 号、API Key、面板密码与登录二维码;二维码用完即删,别久留。面板改强密码,不要裸露公网。
  • 二创形象:「大肥鱼」是 DeepSeek 蓝鲸的社区二创形象,非官方角色,与 DeepSeek 官方无关;文中头像为 AI 生成素材。
  • 法律与平台规则:请自行遵守 QQ / 腾讯服务条款与当地法律法规,本文仅为技术部署说明,不鼓励任何滥用。
  • 补丁易丢:百炼 TTS、分泡语音依赖对 AstrBot 核心文件的 bind-mount 补丁;升级 AstrBot 镜像后需重新核对补丁是否适用。

八、小结

一份 Dockerfile + compose,十几分钟就能把一只有人设的 QQ 鲸鱼娘养起来。先跑通「私聊文字 + DeepSeek」,再按需加看图、语音、记忆和主动聊天。记住三件事:小号、只回私聊、WS 挂了跑 heal_ws.py。

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

请登录后发表评论

    暂无评论内容