nas:第一集

可爱的站长 发布于 2026-07-11 401 次阅读 2072 字 web


绿联NAS部署MaiBot QQ机器人全记录:从Docker到SnowLuma的踩坑与填坑

绿联NAS部署MaiBot QQ机器人全记录
从Docker到SnowLuma的踩坑与填坑

📅 2025-07-10  ·  🏷️ NAS折腾  ·  ⏱️ 阅读约 10 分钟

前言

最近想在绿联DX4600 Pro上部署一个MaiBot QQ机器人,让它陪群友聊天。原以为拉个镜像、改个配置就完事,结果踩了一堆坑:NapCat被封、Docker Hub下载龟速、SnowLuma频繁断连、连发消息超时……断断续续搞了几天终于稳定运行了。写这篇文章记录一下过程,希望能帮到同样在折腾的朋友。

环境

NAS绿联 DX4600 Pro(UGOS Pro 系统)
Docker绿联云内置 Docker(自带「项目」功能,支持 docker-compose)
机器人框架MaiBot
QQ 协议端SnowLuma
AI 模型DeepSeek API

一、部署方式选择:绿联Docker「项目」功能是神器

绿联云客户端的 Docker 自带「项目」功能,可以直接粘贴 docker-compose.yml 一键部署。全程不用开SSH,编辑配置文件用绿联自带的「文件管理」就能搞定,对不想碰命令行的用户非常友好。

操作路径:绿联云 → Docker → 项目 → 创建 → 粘贴 compose → 立即部署。

二、镜像下载:国内Docker Hub太慢怎么办

MaiBot + SnowLuma 一共需要拉三个镜像,其中 SnowLuma 的镜像最大(压缩后约 900MB)。国内 Docker Hub 速度感人,1MB/s 是常态,有时候干脆卡住不动。

试了一圈免费加速器(中科大、DaoCloud 等)都不太稳定后,最后买了轩辕镜像,900MB 秒拉完。虽然花了一点小钱,但省下的时间和血压绝对值回票价。

💡 提示
如果你有稳定的免费加速器,也欢迎在评论区分享。

三、SnowLuma配置:官方文档才是最终真理

SnowLuma 的 compose 配置有不少坑。我一开始在网上找的模板少了几个关键参数,导致:

  • QQ 登录态没法持久化(重启就掉线)
  • Hook 注入失败(收不到消息)
  • 共享内存不够(QQ 客户端崩溃)

后来老老实实去 SnowLuma 官方文档 对着抄,才把下面这些关键项补上:

配置项作用
shm_size: 1gbQQ 是 Chromium 套壳,共享内存不够会崩
cap_add: SYS_PTRACESnowLuma 注入 QQ 进程的权限
security_opt: seccomp=unconfined同上,Hook 必须
/app/.config 卷QQ 配置持久化
/app/.local/share 卷QQ 数据持久化
SNOWLUMA_SCREEN: 1920x1080x24确保 QQ 界面正常渲染
⚠️ 教训
官方文档永远是第一参考源。网上的二手资料可能过时或遗漏关键参数。

四、适配器连接:127.0.0.1 是Docker里最大的坑

MaiBot 通过 OneBot 适配器连接 SnowLuma。日志疯狂刷:

NapCat 适配器连接失败: Cannot connect to host 127.0.0.1:3001

问题出在哪?Docker 里 core 和 snowluma 是两个独立容器,127.0.0.1 指的是各自容器内部,互相不通。

解决:配置文件里把 host 从 127.0.0.1 改成 Docker 服务名 snowluma:

[luma_client]
server = "snowluma"    # Docker服务名,不是127.0.0.1
port = 3001

改完重启,日志变成 SnowLuma WebSocket 已连接: ws://snowluma:3001,世界清静。

五、连续发送超时:SnowLuma的已知问题

连接成功后,又发现一个新问题:麦麦长回复会被分割成多条消息连发,第二条有概率触发:

send_msg failed: send group message failed:
send reply 179 timed out after 15000 ms

诡异的是——消息其实已经发出去了,群友能看到,但 SnowLuma 还是报错。排查发现 SnowLuma 内部的发送超时是硬编码 15 秒,短时间内 QQ 协议层响应慢就直接报 timeout,但实际上消息已经送达了。

临时解决方案

在 MaiBot 的 bot_config.toml 里限制回复不拆分,避免连发:

[response_splitter]
enable = true
max_split_num = 1          # 禁止分割,一条消息只发一次

[chat]
typing_speed = 2.0         # 发消息间隔拉长,给协议层喘息时间

这样麦麦回复慢一丢丢,但不再触发 timeout 了。

长期解决

去 SnowLuma 的 GitHub 提了 issue,希望开发者能把超时阈值改为可配置,或者加个重试机制。等官方修复。

六、稳定运行后的最终 compose

附上经过多轮踩坑调试后的完整 docker-compose.yml:

services:
  core:
    container_name: maim-bot-core
    image: sengokucola/maibot:latest
    environment:
      - TZ=Asia/Shanghai
      - EULA_AGREE=8e6e7d647f7f82d6ea98456b73908656
      - PRIVACY_AGREE=91e5db7659c560bc3545e63859b6ebc0
      - MAIBOT_LEGACY_0X_UPGRADE_CONFIRMED=1
      - WEBUI_HOST=0.0.0.0
    ports:
      - "18001:8001"
    volumes:
      - ./docker-config/mmc:/MaiMBot/config
      - ./data/MaiMBot:/MaiMBot/data
      - ./data/MaiMBot/emoji:/data/emoji
      - ./data/MaiMBot/plugins:/MaiMBot/plugins
      - ./data/MaiMBot/logs:/MaiMBot/logs
      - ./depends-data:/MaiMBot/depends-data
    restart: always
    networks:
      - maim_bot

  snowluma:
    container_name: maim-bot-snowluma
    image: motricseven7/snowluma:latest
    restart: unless-stopped
    shm_size: 1gb
    cap_add:
      - SYS_PTRACE
    security_opt:
      - seccomp=unconfined
    environment:
      - VNC_PASSWD=vncpasswd
      - SNOWLUMA_UID=1000
      - SNOWLUMA_GID=1000
      - SNOWLUMA_WEBUI_PORT=5099
      - SNOWLUMA_LOG_LEVEL=info
      - SNOWLUMA_SCREEN=1920x1080x24
      - SNOWLUMA_HOOK_AUTOLOAD=1
      - SNOWLUMA_QQ_FLAGS=--disable-gpu --disable-software-rasterizer --disable-gpu-compositing
      - TZ=Asia/Shanghai
    ports:
      - "5900:5900"
      - "6081:6081"
      - "5099:5099"
      - "3000:3000"
      - "3001:3001"
    volumes:
      - ./data/snowluma:/app/snowluma-data
      - ./data/snowluma-qq-config:/app/.config
      - ./data/snowluma-qq-data:/app/.local/share
    networks:
      - maim_bot

  sqlite-web:
    image: coleifer/sqlite-web
    container_name: sqlite-web
    restart: always
    ports:
      - "8120:8080"
    volumes:
      - ./data/MaiMBot:/data/MaiMBot
    environment:
      - SQLITE_DATABASE=MaiMBot/MaiBot.db
    networks:
      - maim_bot

networks:
  maim_bot:
    driver: bridge

七、总结

从零到稳定运行,踩过的坑按时间顺序:

  1. 部署方式 → 绿联「项目」功能香,不用 SSH
  2. 镜像下载 → 国内 Docker Hub 慢,氪金解决
  3. SnowLuma 配置 → 官方文档 vs 网上二手的落差
  4. 适配器 host → Docker 里 127.0.0.1 不是你以为的那个 127.0.0.1
  5. 连发 timeout → SnowLuma 已知问题,限制消息拆分先顶着

整个过程断断续续搞了几天,中间 NapCat 被 QQ 风控、SnowLuma 频繁断连的时候确实有点想放弃。好在最后都解决了,现在麦麦在群里稳定运行,群友表示这机器人「挺像个人的」——这应该是对 MaiBot 最高的评价了。


希望这篇文章能帮你少走些弯路。有问题欢迎在评论区交流。

本文由ds代笔