docker安装并跑通QQ机器人实践(3)-bs-nonebot搭建

news/2024/10/18 8:35:33/

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架(下称 NoneBot),它基于 Python 的类型注解和异步优先特性(兼容同步),能够为你的需求实现提供便捷灵活的支持。同时,NoneBot 拥有大量的开发者为其开发插件,用户无需编写任何代码,仅需完成环境配置及插件安装,就可以正常使用 NoneBot。

下面将演示如何在Docker 里安装 Nonebot 框架

nonebot__3">1 关于 bs-nonebot 的镜像配置

需要注意的是,NoneBot 仅支持 Python 3.8 以上版本

下面是 Dockerfile 的内容:

dockerfile"># 使用官方的轻量级基础镜像
FROM alpine:3.10# 定义作者信息
LABEL MAINTAINER="tanbushi@qq.com"# 设置环境变量
ENV WORK_DIR /app/bs-nonebot# 设置工作目录
WORKDIR $WORK_DIR# 更新系统
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.13/main" > /etc/apk/repositories \&& echo "https://mirrors.ustc.edu.cn/alpine/v3.13/community" >> /etc/apk/repositories \&& apk update && apk upgrade \&& apk add --no-cache \bash \python3=3.8.15-r0 \py3-pip \&& pip3 install nonebot

上面的 Dockerfile 中,配置了清华的源,安装了 bash、python3(为了版本统一,指定了 3.8.15-r0)、pip、nonebot

2 配置文件 config.sh

此模块配置文件内容和上一篇的 qsign 模块的内容差不多。此模块少了一个环境变量定义(-e),多了一个目录映射定义(-v)。内容如下:

#!/bin/bash# 基本参数
appName="bs-nonebot" # 应用名称
appVersion="0.0.1" # 应用版本号
imageName="$appName:$appVersion" # 镜像名称
containerName="$appName" # 容器名称# docker run 相关配置(可选项,如为空,可不填)# 挂载目录配置,形式为:宿主机目录:容器目录
# 下面的路径用到了 pwd 命令,默认要求当前脚本文件和 volumes 目录同在项目目录下(本例项目目录为 bs-nonebot 目录)
volumes=( \"`pwd`/volumes/source:/app/bs-nonebot/source" \
)# 端口映射配置,形式为:宿主机端口:容器端口
ports=( \"15703:5703" \
)# 环境变量配置
# envs=( \
#     "ENV1=value1" \
#     "ENV2=value2" \
# )configured=true # 标记变量——此脚本已经被执行过

注意:
上面文件里volumes数组里用到了 pwd,这里要求 .sh 脚本文件和 volumes 目录同在 项目目录 bs-nonebot 下,如下图红框内所示:
图1  脚本文件和 volumes 目录在同一目录下

图1 脚本文件和 volumes 目录在同一目录下

3 运行 build.sh 生成 Docker 镜像

#!/bin/bashset -e # 遇到错误时退出脚本# 判断是否运行过配置文件 config.sh,如果未运行过,则运行配置文件
if [ -z "$configured" ]; then. ./config.sh
#   configured=true # 设置一个标志,表示已经运行过配置文件
fi# 检查Docker命令是否可用
if ! command -v docker &> /dev/null; thenecho "Docker 命令不可用,请确保已经安装并启动了Docker。"exit 1
fi# 检查 Docker 是否在运行
if ! docker info > /dev/null 2>&1; thenecho "Docker 没用运行。请启动 Docker 再试!"exit 2
fi# 判断 Dockerfile 文件是否存在
if [ ! -f "Dockerfile" ]; thenecho "Dockerfile 文件不存在。请检查!"exit 3
fi# 构建镜像,注意此处用到了
docker build -t $imageName .
echo ""
echo "*********************************************************"
echo "成功生成 Docker 镜像:【 $imageName 】!"
echo "*********************************************************"
echo ""

4 运行 run.sh 创建容器

脚本 run.sh 内容为:

#!/bin/bash# 运行初始化脚本
. ../../shell-scripts/run_init.sh# 创建并执行临时文件——实现 docker run 命令(临时文件不是在容器里哦!)
. ../../shell-scripts/run_in_tmp.shecho ""
echo "*********************************************************"
echo "成功创建容器:【 $containerName 】!"
echo "*********************************************************"
echo ""

运行后,即可创建容器
注意:在创建 -v 映射时,在 windows 环境下的 git bash 里执行脚本,目录前必须是双斜杠,即 //xxx,在 run_in_tmp.sh 文件里已经做了相应处理。请参见上一篇docker安装并跑通QQ机器人实践(2)-签名服务器bs-qsign搭建里的相关代码。

nonebot__128">5 编写 bs-nonebot 最简测试代码

做了 -v 目录映射后,宿主机项目目录 bs-nonebot 下的 volumes/source 目录和 /app/bs-nonebot/source 建立了映射关系,在宿主机 source 目录下的修改,会直接映射到容器里。在宿主机 source 目录下创建 bot.py 测试文件,内容如下:

import nonebot# 主程序入口
if __name__ == '__main__':# 初始化nonebotnonebot.init()# 加载内置插件nonebot.load_builtin_plugins()# 启动nonebot,监听0.0.0.0:5703nonebot.run(host='0.0.0.0', port=5703)

进入 bs-nonebot 容器,可以看到新创建的 bot.py 文件。如下图:
图2  映射的 source 目录下的文件 bot.py

图2 映射的 source 目录下的文件 bot.py

这段Python代码是nonebot框架的主程序入口。

首先导入nonebot模块。
使用if name == ‘main’:来作为程序的入口。
调用nonebot的init()方法来初始化nonebot
调用nonebot的load_builtin_plugins()方法来加载内置插件。
调用nonebot的run()方法来启动nonebot,并监听0.0.0.0:5703端口,并且在宿主机的15703上访问到该端口。

6 运行 bot.py

python3 bot.py

运行成功!见下图:
图3 运行成功

图3 运行成功

上一篇:docker安装并跑通QQ机器人实践(2)-签名服务器bs-qsign搭建

下一篇:敬请期待…



http://www.ppmy.cn/news/1425386.html

相关文章

解析OceanBase v4.2函数索引进行查询优化

一、如何通过函数索引来进行查询优化 函数索引是一种优化查询的技术,其主要作用在于提升包含函数调用的查询语句的执行速度。当查询语句中包含函数调用时,数据库系统需要逐行执行函数计算,这无疑会增加查询的复杂性,导致查询速度…

day22 java多线程 构造方法 常用方法 守护线程

目录 多线程构造方法 常用方法 守护线程 多线程构造方法 public Thread() :分配一个新的线程对象。 public Thread(String name) :分配一个指定名字的新线程对象。 public Thread(Runnable target) :分配一个带有指定目标新的线程对象。 public Thread(Runnable target,S…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models论文解读

文章目录 前言一、摘要二、引言三、文献1、大语言模型文献2、视觉语言模型文献3、LLM作为生成助手文献 四、模型方法与结果1、Dual Vision Encoders3、Patch Info Mining4、Text and Image Generation1、Text-image Instructions2、Generation-related Instructions 五、实验结…

【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本)

往期回顾 【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍-CSDN博客 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之VS2019 C…

AI容器化部署开发尝试 (一)(Pycharm连接docker,并部署django测试)

注意:从 Docker 19.03 开始,Docker 引入了对 NVIDIA GPU 的原生支持,因此若AI要调用GPU算力的话docker版本也是有要求的,后面博客测试。 当然本篇博客还没设计到GPU的调用,主要Pycharm加Anaconda的方案用习惯了&#…

本文为解决:前端json传String格式时间参数,后端无法解析。

有的人说单独写一个localDateTime配置类,看了一下可以不用。 直接写WebMvcConfig里面就行 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToS…

VSCode断点调试(ROS)

0、安装ros插件 在扩展商店中安装ROS插件(Microsoft) 1、修改CMakeList.txt # set(CMAKE_BUILD_TYPE "Release") // 注释Release模式 set(CMAKE_BUILD_TYPE "Debug") // 设置为Debug模式 # set(CMAKE_CXX_FLAGS_RELEASE &…

缓存穿透的解释

什么是缓存穿透了? 就是一个数据在缓存和数据库中都不存在,但是还是被大量查询,导致数据库承受不了,直接崩了 原因是什么? 1.恶意用户多次查询同一个数据 2.系统设计不合理,未将大量的重复恶意查询设置为ke…