使用qsign解决gocq启动code45报错

2024-08-20 18:47:58 浏览数 (2)

本文发布于377天前,最后更新于360天前,其中的信息可能有所发展或是发生改变。

主体

现在启动gocq需要签名服务器,夜梦查阅了许多资料,终于发现了 自己不会搞 一个使用docker在Linux服务器上面部署签名服务器的方法。

夜梦翻过的所有文档(夜梦自己基本看不懂嗷:

  • Docker容器:xzhouqd/qsign – Docker Image | Docker Hub
  • gocqGitHub地址:Mrs4s/go-cqhttp at dev (github.com)
  • qsignGitHub地址:fuqiuluo/unidbg-fetch-qsign: 获取QQSign通过Unidbg (github.com)
  • qsign部署方法:Home · fuqiuluo/unidbg-fetch-qsign Wiki (github.com)
  • ⭐签名服务器相关问题 · Issue #2242 · Mrs4s/go-cqhttp (github.com)
  • ⭐签名服务器相关问题 · Mrs4s/go-cqhttp · Discussion #2245 (github.com)

由于夜梦水平有限,既不会在本地部署签名服务器,也不会在Linux使用常规方法部署签名服务器。所以这篇文章仅讲述如何使用docker部署签名服务器,别的方法小伙伴自己研究吧,或者找夜梦讨论讨论也可以(不用指望夜梦能够帮你解决了

我们先准备一台配置还行的服务器(1C1G吧),然后安装docker:

代码语言:javascript复制
apt-get update
代码语言:javascript复制
wget -qO- get.docker.com | bash
代码语言:javascript复制
docker -v  #查看 docker 版本
代码语言:javascript复制
systemctl enable docker  # 设置开机自动启动

在运行过gocq后,应该会有device.json文件生成。我们找到其中的

代码语言:javascript复制
"android_id":"yemengtaicaile"

然后运行docker(修改ANDROID_ID参数)

代码语言:javascript复制
docker run -d --restart=always --name qsign -p 8080:8080 -e ANDROID_ID=yemengtaicaile xzhouqd/qsign:8.9.63

接着我们在gocq的config.yml中,把

代码语言:javascript复制
  # 数据包的签名服务器
  # 兼容 https://github.com/fuqiuluo/unidbg-fetch-qsign
  # 如果遇到 登录 45 错误, 或者发送信息风控的话需要填入一个服务器
  # 示例:
  # sign-server: 'http://127.0.0.1:8080' # 本地签名服务器
  # sign-server: 'https://signserver.example.com' # 线上签名服务器
  # 服务器可使用docker在本地搭建或者使用他人开放的服务
  sign-server: '-'

修改为如下,sign-server改为自己服务器的IP地址!

代码语言:javascript复制
  # 数据包的签名服务器
  # 兼容 https://github.com/fuqiuluo/unidbg-fetch-qsign
  # 如果遇到 登录 45 错误, 或者发送信息风控的话需要填入一个服务器
  # 示例:
  # sign-server: 'http://127.0.0.1:8080' # 本地签名服务器
  # sign-server: 'https://signserver.example.com' # 线上签名服务器
  # 服务器可使用docker在本地搭建或者使用他人开放的服务
  sign-server: 'http://yourIP:8080' 

然后我们重启gocq即可!

代码语言:javascript复制
./go-cqhttp.exe

不出所料的话(反正夜梦成功了,你自己看着办吧!振声)

提示会从令人头疼的code45

代码语言:javascript复制
[2023-08-08 19:39:39] [WARNING]: 登录失败: 登录失败,请前往QQ官网im.qq.com下载最新版QQ后重试,或通过问题反馈与我们联系。 Code: 45
[2023-08-08 19:39:39] [WARNING]: 你的账号被限制登录, 请配置 SignServer 后重试

变为

代码语言:javascript复制
[2023-08-08 20:10:07] [WARNING]: 1. 向手机 666*6 发送短信验证码
[2023-08-08 20:10:07] [WARNING]: 2. 使用手机QQ扫码验证.
[2023-08-08 20:10:07] [WARNING]: 请输入(1 - 2):

到这里输入1填入验证码就可以登录啦!

这时候看到

代码语言:javascript复制
[2023-08-08 20:11:59] [INFO]: 开始尝试连接到反向WebSocket Universal服务器: ws://127.0.0.1:8080/onebot/v11/ws/
[2023-08-08 20:12:01] [WARNING]: 连接到反向WebSocket Universal服务器 ws://127.0.0.1:8080/onebot/v11/ws/ 时出现错误: dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it.

也觉得情切了捏!

其他

适配

xzhouqd/qsign:8.9.63 (amd64, arm64)

适配版本 release v1.1.0 ,带适配1.1.0及以前的txlib/8.9.63

如果你的arm64版本跑不起来,请先试试指定count为1!

docker直接跑(host侧8080端口)

必须加ANDROID_ID了!这东西在你的device.json里!找出来替换掉{android_id}

不然直接退出的!跑了白跑!

运行命令之后,用docker container ls -a查看一下你的容器是否跑起来,没跑起来的(状态是Exited (1))用docker container logs qsign看一下是不是没填android_id!

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

如果你要改端口,看下面!

docker改改参数跑

external_port: host侧端口 internal_port: container侧端口,要改就必须有-e PORT={internal_port} count: 并行数量 android_id: device.json里的android_id

docker run -d --restart=always --name qsign -p {external_port}:{internal_port} -e PORT={internal_port} -e COUNT={count} -e ANDROID_ID={android_id} xzhouqd/qsign:8.9.63

用Docker-Compose跑:

docker-compose.yml:

代码语言:javascript复制
version: "3.0"
services:
  qsign:
    image: xzhouqd/qsign:8.9.63
    ports:
      - "8080:8080"  # {external_port}:{internal_port}
    environment:
      - PORT=8080  # {internal_port} 可选填,必须和ports里的internal_port一致,要改就必填
      - COUNT=3  # {count} 可选填
      - ANDROID_ID=xxxxxxxxxxxxx  必填!到你的device.json里找!
    container_name: qsign
    restart: always

然后docker-compose up -d

0 人点赞