制作一个一键运行的10多M的go-cqhttp最简docker镜像

news2024/11/24 11:50:04

一直有个想自己部署一个QQ机器人,虽然成功完成在Windows环境下基于 go-cqhttp 的搭建工作。但考虑到我有一台常年在线的群晖 NAS,并且已经配置并启用了 Docke r服务,可否将go-cqhttp 迁移至 NAS 上的 Docker 容器中运行吗呢?同时,为进一步提升便捷性,计划将 go-cqhttp 的配置文件整合入容器内,以便一键部署,避免繁琐的配置步骤。在此过程中,秉持精简原则,在确保功能完备的同时,力求最大限度地压缩镜像体积,实现轻量化部署。

重要提示:使用 go-cqhttp 或 其他工具,都有可能造成 QQ 账号被风控, 请谨慎使用。建议用小号,不要因 QQ 号被风控造成损失!!!

此次目标分两步,第一步实现在 alpine 镜像上安装 go-cqhttp,并启动、配置好 go-cqhttp,确保跟随容器启动、停止,只实现QQ信息监听的最简功能,后续功能另行测试;第二步实现集成打包一个极简的 Docker 镜像,功能和第一步实现的一致。

1 在alpine镜像上安装 go-cqhttp

1.1 拉取 alpine 镜像

习惯指定版本号,避免版本更新导致镜像失效,此次选用 alpine:3.10。

docker pull alpine:3.10

1.2 使用基础镜像创建容器

下面代码的功能是:

  • 使用 alpine 镜像创建容器
  • 指定容器名称为 go-cqhttp-alpine
  • 将用户的 home 目录下的 docker-volumes/go-cqhttp-alpine 目录挂载到容器的 /app/go-cqhttp-alpine 目录
docker run -itd -v ~/docker-volumes/go-cqhttp-alpine:/app/go-cqhttp-alpine --name go-cqhttp-alpine alpine:3.10

1.3 下载 go-cqhttp

在 github 上的下载页地址为:https://github.com/Mrs4s/go-cqhttp/releases/,需要根据需求选择对应的版本号。我的 mac 电脑和 NAS 都可以使用 amd64 的版本。下载地址为:https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc3/go-cqhttp_linux_amd64.tar.gz

1.4 解压 go-cqhttp

解压到当前电脑系统的 ~/docker-volumes/go-cqhttp-alpine 目录下,由于此目录为 docker 挂载的目录,所以文件在docker内部也能看到,并可直接进行操作。

1.5 使用 docker exec 命令进入容器内部

docker exec -it go-cqhttp-alpine /bin/sh

打开的终端如下图所示:
图1  docker exec 进入容器内部

图1 docker exec 进入容器内部

进入容器内部目录:/app/go-cqhttp-alpine,看到文件列表如下:(这些文件是刚才通过挂载目录拷入的)
图2  压缩包解压后的文件列表

图2 压缩包解压后的文件列表

1.6 在容器内部启动 go-cqhttp

cd /app/go-cqhttp-alpine
./go-cqhttp

图3  选择通信方式

图3 选择通信方式

选:0,回车

图4  选择后执行自动生成 config.yml

图4 选择后执行自动生成 config.yml

ctrl + c,退出,重新执行:./go-cqhttp

./go-cqhttp

图5  协议选择不匹配,需要修改设备配置文件 device.json

图5 协议选择不匹配,需要修改设备配置文件 device.json

  • 账号密码未配置, 将使用二维码登录
    为了简化配置,也为了方便分享,就不配置 config.yml 了,直接使用默认配置,将启用二维码登录
  • 虚拟设备信息不存在, 将自动生成随机设备
    由于默认没有配置虚拟设备,所以会出现此提示,同时在当前目录下会生成 device.json 的文件
  • no usable sign server
    未配置签名服务器或签名服务器不可用, 这可能会导致登录 45 错误码或发送消息被风控,目前只是简单的提示,不会影响使用。但后期还是要考虑解决前面服务器的问题
  • 当前协议不支持二维码登录, 请配置账号密码登录
    这个可以通过后面配置 device.json 来解决。如果需要配置用户名密码的话,请自行修改 config.yml 和 device.json 文件。

1.7 配置 device.json

图6  修改 device.json 文件

图6 修改 device.json 文件

编辑 device.json 文件

图7  更改协议编号

图7 更改协议编号

将 protocol 改为 2

1.8 再次启动 go-cqhttp

./go-cqhttp

出现扫码二维码提示,用手机 QQ 扫码登录。提示在手表上登录,因为选择的协议 2 就是智能手表登录协议。
图8  扫码后成功登录 QQ

图8 扫码后成功登录 QQ

至此,完成第一步目标:在docker里安装go-cqhttp,并成功登录。实现了监控 QQ 群消息和私聊消息的功能。所有配置文件,仅仅改动了一个字符,所以很容易实现配置文件的一键 docker 镜像部署。

下面开始第二个目标。

2 创建镜像

实现机理,制作一个 Dockerfile 文件,引用:alpine:3.10 作为初始镜像,将下面的文件通过 COPY 写入 Dockerfile 文件,并保存。再用 docker build 命令构建镜像即可。
图9  正常运行时的文件结构

图9 正常运行时的文件结构

上图中,有些是运行后产生的数据文件,初始镜像中并不需要这些文件,所以可以删除。包括:data 目录、logs 目录、session.token 文件。

2.1 文件准备

  • 在任意位置创建一个文件夹,名称可随便定,此处命名为 build-files,把 签名的挂载目录 go-cqhttp-alpine 文件夹拷贝进去
  • 在文件夹 build-files 中创建一个 Dockerfile 文件,并写入如下内容:
FROM alpine:3.10

WORKDIR /app/go-cqhttp-alpine

COPY go-cqhttp-alpine /app/go-cqhttp-alpine/

最后形成如下目录结构:
图10  为编译镜像准备的文件结构

图10 为编译镜像准备的文件结构

2.2 构建镜像

在终端窗口中 cd 到 build-files 文件夹,执行:

docker build -t go-cqhttp-alpine:1.0.0 .

镜像构建成功!生成的镜像为 go-cqhttp-alpine:1.0.0。

2.3 运行容器

docker run -itd --name go-cqhttp-alpine go-cqhttp-alpine:1.0.0

容器成功运行!

2.4 进入容器运行 go-cqhttp

docker exec -it go-cqhttp-alpine /bin/sh

进入容器内部,执行:

cd /app/go-cqhttp-alpine
./go-cqhttp

出现下面的扫码登录提示:
图11  扫码登录

扫码登录

扫码登录即可。如果要退出,请输入 ctrl + c。

3 总结

目前仅仅是安装成功,并实现了:

  • 登录功能
    下一步可以配置 config.yml 文件,实现用户名密码自动登录,就无需每次扫码登录了。此部分可以自行尝试。
  • 消息接收
    实现了 QQ 群消息和私聊消息的接收。下一步可以实现消息的转发,实现群聊和私聊的转发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1566072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSTI模板注入(jinja2)

前面学习了SSTI中的smarty类型,今天学习了Jinja2,两种类型都是flask框架的,但是在注入的语法上还是有不同 SSTI:服务器端模板注入,也属于一种注入类型。与sql注入类似,也是通过凭借进行命令的执行&#xff…

短袖有什么牌子可以推荐?五款每个人都必备的短袖分享

最近天气逐渐升温,大家都在挑选夏季的短袖了,但是因为市面上的短袖质量参差不齐,甚至有一些使用劣质面料,不仅不耐穿不耐洗,而且穿着还十分闷热。相信大家心里都非常想知道现在有哪些短袖品牌是可靠的,所以…

鸿蒙TypeScript入门学习第8天:【TypeScript 函数】

1、TypeScript 函数 函数是一组一起执行一个任务的语句。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。 函数声明告诉编译器函数的名称、返回类型和参…

2.2.1.2-网格交易(python网格交易附实战交易记录)

跳转到根目录:知行合一:投资篇 已完成: 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率   2.1.2 一个关于yaxb的…

源浩流体设备与您相约2024年第13届生物发酵展

参展企业介绍 温州源浩流体设备科技有限公司是一家集设计、开发、制造、销售、服务于一体的高科技企业,公司主要生产各种不锈钢阀门、管件、卫生级流体设备(卫生级换向阀,卫生级减压阀,卫生级罐底阀)等。现为温州市泵阀协会会员,ISO9000 2008版质量质量…

Leaflet使用多面(MultiPolygon)进行遥感影像掩膜报错解决之道

目录 前言 一、问题初诊断 1、山重水复 2、柳暗花明 3、庖丁解牛 4、问题定位 二、解决多面掩膜问题 1、尝试数据修复 2、实际修复 3、最终效果 三、总结 前言 之前一篇讲解遥感影像掩膜实现:基于SpringBoot和Leaflet的行政区划地图掩膜效果实战&#xff0…

解锁金融数据中心场景,实现国产化AD替代,宁盾身份域管为信创电脑、应用提供统一管理

随着信创国产化改造持续推进,越来越多的金融机构不断采购信创服务器、PC、办公软件等,其 IT 基础设施逐渐迁移至国产化 IT 架构下。为支撑国产化 IT 基础设施的正常使用和集中管理运维,某金融机构数据中心的微软Active Directory(…

Java入门教程||Java 多线程编程

Java 多线程编程 Java 给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径。 多线程是多任务的一种特别的形式。多线程比多任务需要更小的开销。 这里定义和线程…

WEB 工程路径

WEB 工程路径 相对路径 使用相对路径来解决, 一个非常重要的规则:页面所有的相对路径,在默认情况下,都会参考当前浏览器地址栏的路径 http://ip:port/工程名/ 资源来进行跳转。 相对路径带来的问题 如上图,若在a.h…

Shell脚本介绍及基本功能

目录 一、什么是Shell 二、什么是Shell脚本 三、echo 四、Hello World 五、Bash的基本功能 1.别名 2.常用快捷键 3.输入输出 4.输出重定向 5.多命令执行 6.管道符 7.通配符和特殊符合 一、什么是Shell Shell是一种命令行解释器,它是操作系统的一部分&a…

N5182A安捷伦N5182A信号发生器

181/2461/8938产品概述: 信号特征 100 kHz至3或6 GHz使用高度可靠的快速开关电子衰减器时,最高可达3 GHz》23 dBmW-CDMA动态范围:≤-73 dBc,输出功率为5 dBm列表模式下≤900 μs的同步频率、幅度和波形切换 调制和扫描 调幅、调频、调频和…

OpenHarmony实战开发-如何通过Stage模型实现一个简单的游戏卡片

介绍 本示例展示了如何通过Stage模型实现一个简单的游戏卡片。 通过卡片支持的点击事件进行交互,让用户通过点击的先后顺序把一个乱序的成语排列成正确的成语。使用了C和TS的混合编程方式,将获取随机数的能力下沉到C实现,并通过NAPI的能力将…

高德定位 SDK 到底提供了什么服务?

最近我被高德的销售烦到不行,说是我用了他们的 SDK,现在 SDK 要收费。 表达是很绕的,什么授权啦,什么企业认证风险啦,讲了一堆,还跟我开始搬出协议了。感觉高德的销售真够垃圾的,编个话术都不会…

【EI检索会议】电子、通信与智能科学国际会议二轮征稿中

【会议名称】电子、通信与智能科学国际会议 【会议简称】ECIS 2024 【会议官网】www.icecis.org 【会议时间】2024年5月24日~27日 【二轮截稿时间】2024年4月20日 【会议地点】中国长沙 【征稿主题】集中但不限于“电子、通信、智能科学”等其他相关主题。 【官方邮箱】…

3.java openCV4.x 入门-数据类型(CvType)与Scalar

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天 🧭文章导航🧭 ⬆️ 2.hello openCV ⬇️ 4.待更新 数据类型&#xff…

【leetcode】双指针(二)

标题: 【leetcode】双指针(二) 水墨不写bug 正文开始: (一)总和为目标值的两个数 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#…

支持各种不同系列nvdia显卡和amd显卡,DeepFaceLab安装与使用,附完整的软件打包下载一键安装

支持各种不同系列nvdia显卡和amd显卡,DeepFaceLab安装与使用,附完整的软件打包下载一键安装。 主要使用的技术: 1. 深度学习(Deep Learning) 深度学习是人工智能领域的一个重要分支,它通过模拟人脑的神经…

面试经典150题【131-140】

文章目录 面试经典150题【131-140】123.买卖股票的最佳时机III188.买卖股票的最佳时机IV二分查找的板子:35.搜索插入位置74.搜索二维矩阵162.寻找峰值33.搜索旋转排序数组34.在排序数组中查找元素的第一个和最后一个位置153.寻找旋转排序数组中的最小值4.寻找两个正…

C++之类和对象的中篇

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

函数参数缺省和内联函数【C++】

文章目录 函数参数缺省函数参数缺省的条件和要求 内联函数内联函数的工作原理内联函数的定义方法内联函数的要求解决方法:直接在.h中定义内联函数的函数体 内联函数再Debug模式下默认是不展开的 函数参数缺省 顾名思义:可以少传一个/多个参数给函数&…