Table of Contents
本指南旨在提供一个清晰、高效的流程,在 Debian 12 服务器上部署一套 QQ 机器人架构,其中 Napcat 作为核心协议端,同时为 Astrbot 和 Overflow 两个独立的应用后端提供支持
前置准备
- 一台 Debian 12 服务器(位于国内)
- 一个 QQ 账号
第一步:部署 Napcat
Napcat 是连接 QQ 网络的协议端,它将作为事件中心,将消息和事件分发给后端的 Astrbot 和 Overflow
-
创建工作目录与
compose.ymlTerminal window mkdir -p ~/napcat && cd ~/napcatnano compose.yml -
粘贴以下 Docker Compose 配置
version: '3.8'services:napcat:image: mlikiowa/napcat-docker:latestcontainer_name: napcatrestart: alwaysnetwork_mode: 'host'volumes:- ./napcat-data:/app/data -
启动并扫码登录
- 前台启动获取二维码
Terminal window sudo docker compose up- 扫描日志中的二维码或链接,使用手机 QQ 确认登录
- 复制终端中 Napcat WebUI 链接到浏览器打开,进行后续配置
- 点击左侧
其它配置->登录配置-> 填入快速登录 QQ 账号 - 登录成功后,按 Ctrl+C 停止容器
- 后台启动服务
Terminal window sudo docker compose up -d请务必记下终端输出中 WebUI 的访问地址和 Token,后续配置连接时需要用到
第二步:部署应用后端 1 (Astrbot)
Astrbot 是我们的第一个应用后端,使用 Docker Compose 进行部署
-
创建工作目录与克隆 Astrbot 仓库
Terminal window mkdir -p ~/astrbot && cd ~/astrbotgit clone https://github.com/AstrBotDevs/AstrBot.git .# 克隆到当前目录 -
编辑
compose.yml文件根据是否在第一步中配置了代理,对 Astrbot 的
compose.yml文件进行相应修改version: '3.8'services:astrbot:image: soulter/astrbot:latestcontainer_name: astrbotrestart: always# [核心修改1] 添加 network_mode: "host" 以共享主机网络# 这样容器就能直接访问 v2rayA 的代理端口,并且方便与 Napcat 通信network_mode: 'host'environment:- TZ=Asia/Shanghai# [核心修改2 - 可选] 如果配置了 v2rayA,请添加以下代理环境变量- HTTP_PROXY=socks5://127.0.0.1:20170- HTTPS_PROXY=socks5://127.0.0.1:20170volumes:- ./data:/AstrBot/data- /etc/localtime:/etc/localtime:ro -
启动 Astrbot
Terminal window sudo docker compose up -dAstrbot WebUI 现已运行在
http://<服务器IP>:6185上
第三步:部署应用后端 2 (Overflow)
Overflow 是我们的第二个应用后端,基于 Mirai 生态,我们使用 Systemd 来管理其服务
-
准备环境 使用 SFTP 等工具上传
overflow.zip到服务器的~/overflow目录并解压Terminal window mkdir -p ~/overflow && cd ~/overflowsudo apt install unzip openjdk-17-jre -yunzip overflow.zip -
创建 Systemd 服务
执行
Terminal window sudo nano /etc/systemd/system/overflow.service并粘贴以下内容:
[Unit]Description=Overflow QQ Bot ServiceAfter=network.target[Service]Type=simpleUser=rootWorkingDirectory=/root/overflowExecStart=/bin/bash /root/overflow/start.shRestart=on-failureRestartSec=10s[Install]WantedBy=multi-user.target -
启动服务
Terminal window sudo systemctl daemon-reloadsudo systemctl start overflowsudo systemctl enable overflow
第四步:建立连接 (Napcat -> Astrbot & Overflow)
我们采用两种不同的 WebSocket 模式来连接两个后端:
- Astrbot (反向 WS):Astrbot 作为服务端,Napcat 作为客户端连接它
- Overflow (正向 WS):Napcat 作为服务端,Overflow 作为客户端连接它
4.1 连接 Astrbot (反向模式)
-
配置 Astrbot (服务端)
- 访问 Astrbot WebUI (
http://<服务器IP>:6185) - 进入 消息平台 ->
+ 新增适配器-> 选择aiocqhttp(OneBotv11) - 配置项:
- ID(id):
astrbot-reverse-server(或自定义) - 启用(enable): 勾选
- 反向 WebSocket 主机地址:
0.0.0.0 - 反向 WebSocket 端口:
6199(确保此端口未被占用)
- ID(id):
- 点击
保存 - 进入
配置->其他配置,在管理员 ID中填写你的 QQ 号,保存
- 访问 Astrbot WebUI (
-
配置 Napcat (客户端)
- 进入 Napcat WebUI
- 点击
网络配置->新建->Websockets客户端 - 配置项:
- 勾选
启用 - URL:
ws://127.0.0.1:6199/ws - 点击
保存
- 勾选
4.2 连接 Overflow (正向模式)
-
配置 Napcat (服务端)
-
进入 Napcat WebUI
-
点击
网络配置->新建->Websocket服务器 -
配置项:
- 勾选
启用 - 主机:
127.0.0.1 - 端口:
3001(确保此端口未被占用) - 点击
保存
输入一个足够复杂的 Token,如
mirai_overflow108 - 勾选
Overflow 强制要求 Token 足够复杂以保证安全,否则无法启动
-
-
配置 Overflow (客户端)
- 确保 Overflow 已启动过一次且成功生成了配置文件
overflow.json - 进入 Overflow 的配置文件 (通常在 Overflow 根目录下),找到
ws_host的相关设置 - 修改/新增一个正向 WebSocket 客户端配置,指向 Napcat 监听的地址:
Terminal window "ws_host": "ws://127.0.0.1:3001",- 填写之前在 Napcat 配置的 Token,配置完成后的
overflow.json文件大致如下所示:
Terminal window {no_log___DO_NOT_REPORT_IF_YOU_SWITCH_THIS_ON___开启此选项时不接受漏洞反馈: false,ws_host: 'ws://127.0.0.1:3001',reversed_ws_port: -1,token: 'mirai_overflow108',no_platform: false,use_cq_code: false,retry_times: 5,retry_wait_mills: 5000,retry_rest_mills: 60000,heartbeat_check_seconds: 60,use_group_upload_event_for_file_message: false,resource_cache: {enabled: false,keep_duration_hours: 168,},drop_events_before_connected: true,}- 保存配置并重启 Overflow 服务 (
sudo systemctl restart overflow)
- 确保 Overflow 已启动过一次且成功生成了配置文件
4.3 验证连接
- 在 Astrbot WebUI 的
控制台,应出现aiocqhttp(OneBot v11) 适配器已连接的日志 - 通过
sudo journalctl -u overflow -f查看 Overflow 日志,应能看到成功连接到ws://127.0.0.1:3001的日志
至此,您已成功搭建了 Napcat 同时为 Astrbot 和 Overflow 两个后端服务的 QQ 机器人
附录:Mirai 权限问题处理
- Mirai 权限问题处理
当使用 Overflow/Mirai 时,如果终端提示权限不足,这是 Mirai 的安全机制所致
-
错误示例:
权限不足. /bili 需要权限 top.colter.bili-dynamic-mirai-plugin:command.bili -
解决方法: 在 Overflow 的控制台中,使用
/perm指令进行授权,语法为被授权对象在前Terminal window # 示例:允许所有用户执行任意 Console 内置指令/perm permit u* console:*
- 配置代理环境 (v2rayA/可选)
此步骤为可选操作,主要为 Astrbot 访问外部服务提供网络支持,如果您不需要访问如 Google API 等服务,可以跳过此步
-
安装 v2rayA
Terminal window # 添加 GPG 公钥与软件源wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/keyrings/v2raya.ascecho "deb [signed-by=/etc/apt/keyrings/v2raya.asc] https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list# 安装sudo apt update && sudo apt install v2raya xray -y -
启动并配置
Terminal window sudo systemctl start v2rayasudo systemctl enable v2raya -
访问
http://<服务器IP>:2017,创建管理员 -
导入您的订阅链接,选择一个节点并启动
-
在 设置 -> 地址与端口 中,确认 SOCKS5 端口为
20170