群晖docker部署QQ机器人

本文详细介绍了如何在群晖的docker环境中部署和配置NoneBot和go-cqhttp,包括前期准备、安装步骤、配置文件调整和签名服务器的安装,以及注意事项如插件安装和风控问题的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前言

一、前期准备

二、安装NoneBot

1.1、使用群晖docker套件拉取镜像

1.2、使用SSH远程登录方式拉取镜像

​编辑

2、运行容器

3、新建nonebot项目

 4、配置文件

三、安装go-cqhttp

1、拉取镜像

2、修改配置文件

3、启动容器

四、安装签名服务器

五、其他 

1、安装插件

 2、关于风控

总结


前言

自己拼了一台黑群晖,性能过剩,于是打算在上面跑点其他服务。记录并分享部署的过程以及遇到的问题

本项目是依托于群晖中的docker环境来安装部署各项服务,也可直接在linux环境中使用。关于如何自建群晖服务器以及安装docker服务,网上已有很多教程,本文不再详细介绍。

本项目的前端为NoneBot2,后端为go-cqhttp,同时还介绍了go-cqhttp需要用到的签名服务器qsign的搭建。

NoneBot2 是一个可扩展的 Python 异步机器人框架,它会对机器人收到的事件进行解析和处理,并以插件化的形式,按优先级分发给事件所对应的事件响应器,来完成具体的功能。

go-cqhttp是使用 mirai 以及 MiraiGo 开发的 cqhttp golang 原生实现, 并在 cqhttp 原版open in new window 的基础上做了部分修改和拓展。作为CQHTTP(CoolQ HTTP API)项目的继任者和进化版,go-cqhttp继承了CQHTTP的核心理念,即通过HTTP接口提供与QQ服务器交互的能力,同时引入了诸多优化和增强功能,为开发者提供了一个更轻量、更高效、更稳定的QQ机器人开发平台。

一、前期准备

首先当然是需要一个QQ账号,建议申请一个小号,而不是用自己的大号,因为在当前环境下QQ机器人账号非常容易被风控以至封号,因此不要用自己的大号冒险

根据官方文档,部署在Docker的go-cqhttp不适宜用交互式界面生成配置文件,因此需要事先准备好你的配置文件,否则容器将无法运行。

需要准备的文件为config.yml和device.json。其中 config.yml 为运行配置;device.json 为虚拟设备信息。这里建议先在Windows系统中安装cqhttp并运行一次以生成这两个配置文件。

Windows版本下载以及安装教程请参考官方文档

go-cqhttp 帮助中心-基础教程

安装并运行一次后,将会在你的项目根目录下生成config.yml和device.json,可以将这两个文件备份出来。

提前下载软件:PuTTY或Xshell,建议下载notepad++以便编辑配置文件

二、安装NoneBot

1.1、使用群晖docker套件拉取镜像

打开群晖docker套件,选择注册表,搜索nonebot并拉到最下面,选择nonebot/nb-cli,右键-下载此映像。

70ae8e0dfdba4438ac94daf9672d0ab8.png

由于国内网络限制,可能出现无法下载的情况,此时可以尝试使用代理或者用下面的方法下载。

1.2、使用SSH远程登录方式拉取镜像

在同个局域网环境下的计算机安装PuTTY或Xshell,远程登录群晖系统,此时可以使用Linux一般命令进行拉取

依次执行以下命令

#获取root权限 需要输入管理员密码
sudo su

#查询可以拉取的docker镜像
docker search nonebot

#拉取镜像
docker pull nonebot/nb-cli

 下载成功后,可以在群晖docker套件的映像中看到刚刚下载的nonebot/nb-cli容器

163547b2c70645d1b04d3ffeddf0869f.png

2、运行容器

选择nonebot容器,点击启动

网络选择默认的bridge,如果不想在默认网络下后续也可以迁移

常规设置可以默认,也可以根据自己的情况设置资源限制

端口设置-新增,默认的端口为8080,后续可以在配置文件中修改,这里就将本地端口和容器端口都设置为默认的8080

5aabbec61aed4131ba32ce3676d886ea.png

存储空间设置-添加文件夹,选择群晖上的某个文件夹,建议先为docker单独新建一个文件夹方便管理。这里选择/docker/nonebot//workspaces,装载路径为/workspaces

最后检查以上配置是否有问题,如果没有问题,勾选“向导完成后运行此容器”并点击完成。

3、新建nonebot项目

双击刚刚新建的容器,选择终端机,此时可以看到出现选项,使用方向键上下选择“Create a NoneBot project.”,回车确认

fc83ec73317042f4aebeb8faf48239c2.png

然后选择“simple(for plugin developer)”,使用空格键确认,回车下一步

e4fb85cd67d94f21a9432d643342da32.png

输入项目名称,接着选择默认的“FastAPI(Fast驱动器)”,直接回车下一步

e1a549960e534b67a508c051385b011a.png

最后选择“OneBot V11(OneBot V11协议)”,同样使用空格键确认,回车下一步,任意选择一个文件夹,弹出的提示全部输入Y,回车

68ede49d9f834098bffd3caa3b48194e.png

然后就可以等待项目自动安装了

安装完成后提示是否预装插件,这里可以选择echo,同样空格键选中,回车确认 

此时容器将自动停止。手动重启容器,并在终端机选择新增,创建新的命令界面,依次运行以下命令

#进入刚刚创建的项目路径
cd BOT_QQ

#运行机器人
nb run --reload

看到如下图所示则说明容器启动成功了

575d93460a96446796dfbee1373770ee.png

 4、配置文件

 接下来需要设置下项目自动生成的配置文件

NoneBot 在启动时将会从系统环境变量或者 .env 文件中寻找变量 ENVIRONMENT (大小写不敏感),默认值为 prod。
这将引导 NoneBot 从系统环境变量或者 .env.{ENVIRONMENT} 文件中进一步加载具体配置。

.env 文件是基础环境配置文件,该文件中的配置项在不同环境下都会被加载,但会被 .env.{ENVIRONMENT} 文件中的配置所覆盖。

将容器映射目录下的.env、.env.dev文件下载到本地

首先右键.env选择用notepad++打开,添加下面几项

ENVIRONMENT=dev
COMMON_CONFIG=common config  # 这个配置项在任何环境中都会被加载
NICKNAME=["BOT_NAME","bot"]  # 这个配置项设定了机器人的称呼,有些插件中会调用该参数

接着设置env.dev文件配置

LOG_LEVEL=DEBUG # NoneBot 日志输出等级。
HOST=172.18.0.2 # 当 NoneBot 作为服务端时,监听的 IP / 主机名。注意这里需要填写真实容器IP而不是127.0.0.1。
PORT=8080 # 当 NoneBot 作为服务端时,监听的端口,默认为8080。

env.pord配置信息较多,这里可以暂时先不配置,有兴趣可以参考官网文档 配置|nonebot

配置好后上传这两个文件,nonebot就可以使用了

三、安装go-cqhttp

1、拉取镜像

由于在群晖docker默认的镜像站中没有找到官方版本,或者说不确定哪个才是官方纯净版本,因此这里只使用官网提供的命令进行拉取

通过SSH远程登录群晖系统,执行命令

docker pull ghcr.io/mrs4s/go-cqhttp:master

下载完成后就可以看到映像选项中多出名为mrs4s/go-cqhttp:master的镜像了

453b8fe9467b4b9ea29af61972f1c3ea.png

2、修改配置文件

在运行容器之前还需要修改下前期准备中生成的config.yml和device.json配置文件

在Windows系统中右键config.yml,选择notepad++打开(也可以使用VS Code等其他编译软件)

修改账号相关配置,此处密码留空则以扫码方式登录

8534b99a92964c6a80197280a446a4a8.png

然后修改连接服务列表,这里选择以反向WS的方式连接nonebot,则只需要在universal:项中设置第二章安装的容器地址即可,格式为 ws://docker_ip:port/onebot/v11/ws,如下图所示

0e12b58fc91c42ccb3c131073fe70c1e.png

如何确定容器的IP是多少呢?可以在SSH中运行以下命令

docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker名称

另外还有签名服务器地址需要修改,在第四章安装签名服务器再详细介绍

接下来配置device.json,同样以notepad++打开,找到"protocol",将值改为2,意思为使用Android Watch协议进行登录

6ea0eeea11cd4610a4650206366e08ab.png

02597598ec0146519405e11451c21133.png

配置完以上两项,在群晖共享文件夹中新建一个项目文件夹,这里选择/docker/目录下创建 cqhttp/data/,将config.yml和device.json放进去,就可以准备启动容器了。

3、启动容器

官方文档中有使用纯命令行启动的教程,详见go-cqhttp帮助中心-使用docker,这里只介绍通过可视化界面启动

首先选择下载好的容器,点击启动,来到网络配置界面,这里选择与nonebot容器放在同一个网络下。

常规设置全部默认,本项目没有需要反向访问容器的端口,因此端口设置可以跳过,也可以将容器8080端口映射到本地任意未使用端口

在存储空间设置中,添加上一步中创建的/docker/cqhttp/data/,装载路径为/data

e1d9d7ffc59148ef8688db7c30fd55ab.png

最后检查确认无误,勾选“向导完成后运行此容器”并点击完成即可运行。

打开cqhttp容器的终端机界面,此时会弹出二维码,可以用手机QQ进行扫码登录(注意,手机和群晖需要在同一网络下,通常只要连上家里的WIFI操作即可)

3c28c5bb875949f38368615969c52ef5.png

这里二维码显示不全,可以在启动前将容器界面放大到全屏,或者使用SSH远程登录的方式,运行命令输出容器内的日志(cqhttp为启动容器时设置的名字,根据实际情况替换)

docker container logs cqhttp

通过手机扫码登录后,终端输出结果如下则说明机器人已经成功运行起来,并且成功连接到nonebot服务器了

7bf9ab0433554379bbfcab99760f0c8c.png

此时对机器人发送命令“echo hello world”,机器人会自动打印回复“hello world”。到这里QQ机器人的基础服务就搭建完成了。

不过此时终端机可能会输出警告:签名服务器不可用

ada9c659101e436d92c7fd4ba34cd7f3.png

如果不配置签名服务器,则有可能导致机器人账号被封。因此接下来我们继续来搭建签名服务器

四、安装签名服务器

参考这篇文章docker安装、调试qsign签名服务器,这里直接用命令拉取

docker run -d --restart=always --name qsign -p 8080:8080 -e ANDROID_ID=xxxxxxx xzhouqd/qsign:8.9.63

 可以使用文章的方式一键运行,也可以使用可视化界面启动,这里只介绍可视化界面方式启动

网络设置依旧选择和前面两个容器一样的网络

在常规设置点击高级设置-环境,可以看到预置的ANDROID_ID为空,这里需要从保存虚拟设备信息的配置文件device.json中获取

c5a9c0cf92f64cd5a4d97e3b5b4f7e78.png

 a0725176a51440fea28534260abce63d.png

来到端口设置,如果你将三个容器都放在了同个网络下,那么这一步可以跳过,同网络下的容器间可以直接互相访问。

假设你希望容器处于不同网络下,或者你的cqhttp运行在其他环境里,需要外部访问,则需要将容器的8080端口映射出来,注意不要和前面nonebot映射的端口冲突了

接下来就全部默认,完成自动启动即可。

启动后,可以在SSH远程命令行中执行

curl http://sgin_docker_ip:8080

看到返回结果为IAA则签名服务器在正常运行

确认你的qsign容器IP地址,打开config.yml,在sign-servers:url处填写http://IP+端口

103cb866c98f40c69c89dbc6c779f68d.png


然后就可以重新上传config.yml,重新启动cqhttp,这时候你的机器人就可以正常使用了。

五、其他 

1、安装插件

现在你的机器人还只有最基础的echo输出能力,如何给机器人添加丰富多彩的功能呢?可以访问插件商店|nonebot 添加你想要的功能

这里以 网易云无损音乐下载 插件举例

2066933c45c64708afada049a4309a96.png

 在nonebot容器的终端机新建一个bash,按CTRL+A 进入前缀模式以进行复制和粘贴,复制nb 开头的这条命令到命令行中运行,等待下载完成。

注意,这里可能会出现报错,提示容器的httpx组件版本过高,需要使用低于0.24.0,又高于等于0.23.3的版本

cb3123bdc28c4729b8a72066eb3a8d9d.png

这里我们就直接降级,执行下面命令

pip install 'httpx>=0.23.3,<0.24.1' 

执行完成后,再重新执行nb安装命令,就可以顺利安装成功了

然后根据官方文档,还需要设置配置文件

c5979c34ecfb4490998f737b9747f9d1.png

打开.env文件,将配置项全部复制上去并填好参数,重启nonebot容器,此时插件就可以使用了

6309de109e8e448dbd0bed86db7fda3b.jpeg

 2、关于风控

当你将机器人拉进一个群,有时候会突然出现机器人不再响应命令的情况,此时查看cqhttp容器的日志,会出现一个警告:发送消息失败:账号可能被风控。

目前尝试过网上许多方法,如删除session.token、修改登录协议、去除device.json中mirai字样等,都没有什么效果,最终只能等待风控自动解除。

f506c7e6ecbf48ed99fb6772a6b0f879.png

 目前由于官方不再更新协议库,只能使用protocol=2,即Android watch 登录,使用其他协议登录都会提示当前版本太低无法登录,所以需要做好准备随时迁移机器人。

ffb9d4a97a5244cab9649c6723c76c3f.png

总结

以上就是如何在群晖docker中搭建QQ机器人的详细教程。虽然现在机器人使用起来并不稳定,群聊容易被风控,但私聊不受影响,还是值得搭建一个来玩玩的,也算是有效利用多余的设备性能。希望这篇教程对你有所帮助

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值