# 使用windows或linux部署
# python环境
python
项目采用python环境部署,版本需要在python3.10 (opens new window)以上,python怎么安装请自行解决。
# go-cqhttp环境
go-cqhttp
项目的qq协议端采用go-cqhttp (opens new window),请安装对应版本。
ffmpeg
ffmpeg是go-cqhttp发送语音视频必须的环境,安装请参考:文档 (opens new window)
# 虚拟环境
强烈推荐使用虚拟环境运行bot,使用何种虚拟环境由你指定,这里列出比较常用的:
venv
venv是python自带的虚拟环境工具,linux下可能需要手动安装:
# 需要先安装venv模块
sudo apt-get install python3.10-venv
# 创建虚拟环境,这里python需要改成你的3.9软连接
python -m venv ./venv
# 激活虚拟环境
source ./venv/bin/activate
2
3
4
5
6
7
windows下可以直接使用:
# windows下,创建venv目录
python -m venv ./venv
# 激活虚拟环境
./venv/scripts/activate
2
3
4
5
conda
使用conda管理环境,甚至包括python的环境也能管理:
# 创建环境
conda create --name bot python=3.10
# 激活环境
conda activate bot
2
3
4
5
# 安装依赖
环境准备好后需要安装依赖,同样有几种方式:
pip安装
在激活虚拟环境后,进入bot目录,使用pip安装依赖:
pip install -r requirements.txt
conda安装
使用conda可以在虚拟环境外安装依赖,在bot目录下:
conda install --yes --file requirements.txt
# 设置配置
# 项目配置
config
bot目录下的.env文件是本项目的配置文件,打开可以进行设置:
# ============ nb2配置 ==================
superusers = [""] # 服务器超级用户,就是机器人管理员,一般填你的主人qq号
nickname = ["团子"] # 机器人昵称
log_level = "INFO" # nb2日志等级,INFO,DEBUG,SUCCESS,ERROR
host = 127.0.0.1 # nb服务器地址和端口
port = 8080
# ============= 项目配置 =================
# ====jx3api配置====
jx3api_ws_path = "wss://socket.nicemoe.cn" # ws连接地址
jx3api_ws_token = "" # ws的token授权,关联ws服务器推送消息类型
jx3api_url = "https://www.jx3api.com" # 主站地址
jx3api_token = "" # 主站token,不填将不能访问高级功能接口
2
3
4
5
6
7
8
9
10
11
12
13
14
# gocq配置
config
具体配置请参考gocq的文档 (opens new window),在本项目下,你可能需要修改gocq的config.yml如下:
message:
# 上报数据类型
# 可选: string,array
post-format: array
servers:
- ws-reverse:
# 反向WS Universal 地址
# 注意 设置了此项地址后下面两项将会被忽略
universal: ws://127.0.0.1:8080/onebot/v11/ws
2
3
4
5
6
7
8
9
10
# 运行机器人
运行nb2
在bot目录下:
nb run
运行gocq
在gocq目录下:
./go-cqhttp
# 后台运行
screen
linux下运行后没法收起到后台?可以自己选择后台运行的工具,我这里使用的是screen:教程 (opens new window)
# 使用Docker部署
# 拉取镜像
项目已打包image上传到dockerhub,使用此命令拉取项目镜像:
docker pull justundertaker/mini_jx3_bot:latest
# 启动容器
使用命令启动该镜像容器:
docker run -it --name bot -p 8080:8080 \
-e host=0.0.0.0 \
-e superusers="[\"123\"]" \
-e nickname="[\"团子\"]" \
-e jx3api_token="" \
-e jx3api_ws_token="" \
-e nlp_secretId="" \
-e nlp_secretKey="" \
-e voice_appkey="" \
-e voice_access="" \
-e voice_secret="" \
-e weather_api_key="" \
-e weather_api_type=0 \
-d justundertaker/mini_jx3_bot:latest
2
3
4
5
6
7
8
9
10
11
12
13
14
参数讲解:
- -p 8080:8080:前面的8080对应的是宿主机映射端口,可以自己修改,对应gocq地址也要修改;后面的8080是容器内端口,需要与env里设置的port保持一致。
- -e host=0.0.0.0:容器内监听所有地址,实际上只会监听到映射出来的地址。
- -e superusers="["123"]":引号内要填你的超级管理员QQ,一般是大号QQ
- -e nickname="["团子"]":机器人昵称
其他-e参数,实际上都是.env里面的内容,将你需要填写的内容放到环境变量中即可,特别的superusers和nickname的写法需要写成 [""] 形式。
映射配置文件
你也将.env文件映射到容器根目录,使用 -v 参数:
docker run -it --name bot -p 8080:8080 -v ./.env:./.env -d mini_jx3_bot:latest
至此,nonebot2服务已经部署完毕,接下来需要部署gocq。
# 部署gocq容器
你可以选择自己喜欢的方式部署gocq,只要端口与宿主机映射端口保持一致即可。
下面是使用容器部署:
# 拉取gocq镜像
docker pull namiya233/go-cqhttp:latest
2
镜像设置
此镜像需要将你的配置文件等映射到/data中,所以你需要在本地设置好gocq后,将config.yml,device.json,session.token映射到相应位置。
gocq配置内容参考:#gocq配置
启动容器:
docker run -it --name gocq --network host \
-v /your_config/config.yml:/data/config.yml \
-v /your_config/device.json:/data/device.json \
-v /your_config/session.token:/data/session.token \
-d namiya233/go-cqhttp:latest
2
3
4
5
这里的 your_config 修改成你的配置文件路径即可。
# 使用docker-compose部署
可以使用项目下的docker-compose.yml进行部署:
version: "3"
networks:
nonebot:
external: false
services:
bot:
image: justundertaker/mini_jx3_bot:latest
restart: always
container_name: mini_jx3_bot
volumes:
- "/etc/localtime:/etc/localtime"
networks:
- nonebot
environment:
# nb2配置
- host=0.0.0.0 # 由于组网原因,需要监听0.0.0.0
- superusers=[""] # 超级用户,这里一般是你的大号QQ
- nickname=["团子"] # 机器人昵称
# jx3api配置
- jx3api_token="" # jx3api的高级功能token,没有可以不填
- jx3api_ws_token="" # jx3api的ws消息token,没有可以不填
# 智能聊天配置
- nlp_secretId="" # 腾讯云API的secretId
- nlp_secretKey=""
# 语音聊天配置
- voice_appkey="" # 阿里云的语音接口配置
- voice_access=""
- voice_secret=""
# 天气插件配置
- weather_api_key="" # 和风天气apikey
- weather_api_type=0 # api_key类型,普通版:0,个人开发版:1,商业版:2
gocq:
image: namiya233/go-cqhttp:latest
restart: always
container_name: go_cqhttp
volumes:
- "/etc/localtime:/etc/localtime"
- "/your_config/config.yml:/data/config.yml" # 这里your_config需要填写你的gocq config配置文件位置
- "/your_config/device.json:/data/device.json" # 这里your_config需要填写你的gocq device.json文件位置
- "/your_config/session.token:/data/session.token" # 这里your_config需要填写你的gocq token文件位置
networks:
- nonebot
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
注意
因为组网的原因,gocq的config.yml需要修改一下ws地址:
message:
# 上报数据类型
# 可选: string,array
post-format: array
servers:
- ws-reverse:
# 反向WS Universal 地址
# 注意 设置了此项地址后下面两项将会被忽略
universal: ws://mini_jx3_bot:8080/onebot/v11/ws
2
3
4
5
6
7
8
9
10
这里ws地址需要是bot的容器名。