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

14 篇文章 0 订阅

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

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

1 关于 bs-nonebot 的镜像配置

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

下面是 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/bash

set -e # 遇到错误时退出脚本

# 判断是否运行过配置文件 config.sh,如果未运行过,则运行配置文件
if [ -z "$configured" ]; then
  . ./config.sh
#   configured=true # 设置一个标志,表示已经运行过配置文件
fi

# 检查Docker命令是否可用
if ! command -v docker &> /dev/null; then
    echo "Docker 命令不可用,请确保已经安装并启动了Docker。"
    exit 1
fi

# 检查 Docker 是否在运行
if ! docker info > /dev/null 2>&1; then
  echo "Docker 没用运行。请启动 Docker 再试!"
  exit 2
fi

# 判断 Dockerfile 文件是否存在
if [ ! -f "Dockerfile" ]; then
  echo "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.sh

echo ""
echo "*********************************************************"
echo "成功创建容器:【 $containerName 】!"
echo "*********************************************************"
echo ""

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

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

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

import nonebot

# 主程序入口
if __name__ == '__main__':
    # 初始化nonebot
    nonebot.init()
    # 加载内置插件
    nonebot.load_builtin_plugins()
    # 启动nonebot,监听0.0.0.0:5703
    nonebot.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搭建

下一篇:docker安装并跑通QQ机器人实践(4)-bs-cqhttp搭建


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanbushi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值