用Astrbot框架,实现微信个人号机器人和QQ个人号机器人
要点说明
1.astrbot机器人框架、微信侧wechatpadpro及2个数据库、QQ侧napcat,一共5个容器用docker compose统一编排
2.五个容器,在docker中共用一个网络桥接在宿主机网络,所以5个容器间的通信,可以通过【容器名称:容器端口号】来实现
3.微信侧容易风控,风险自行承担。详见通过 WeChatPadPro 接入微信 | AstrBot(一定要整页看完)
4.关于astrbot的AI服务商配置,这篇文章不做讲解
前期准备
1.linux服务器系统一套(我的是ubuntu系统),并且可以正常通网,我这里用的是废弃电脑刷了ubuntu系统,作为可以连网的本地服务器使用。
2.安装好了docker 和docker compose(如果先安装1panel,在1panel的web端控制后台可以找到docker服务的安装按钮。
3.趁手工具:1panel
4.工具框架:Astrbot
5.消息平台适配器:
QQ个人号:Napcat
微信个人号:wechatpadpro
(ps.github搜索仓库显示too many request,是因为你没登陆github账号)
步骤1-镜像拉取
1.安装好1panel(安装说明在官网有详细指引,不做展开)
2.拉取4个镜像(注意需要一些科学的环境才能保障网络畅通,可以自查是否能正常打开docker仓库)
2-1.Astrbot镜像拉取
docker pull m.daocloud.io/docker.io/soulter/astrbot:latest #此代码为拉取Astrbot镜像
docker pull soulter/astrbot:latest
#以上两个镜像都可以,选一个即可,只是镜像来源不同而已。
2-2.Napcat镜像拉取
docker pull mlikiowa/napcat-docker #此代码为拉取Napcat镜像
2-3.SQL数据库镜像拉取
docker pull mysql:8.0 #此代码为拉取SQL8.0的镜像
2-4.Redis数据库镜像拉取
docker pull redis:alpine #此代码为拉取Redis的alpine版本镜像
备注:如果安装了1panel,可以在应用商店安装SQL和Redis,但是需要在wechatpadpro的设置文件中去修改对应的数据库变量,并且,在对应数据库要创建新的,为了省事,我懒得做,所以就统一拉取镜像,最后通过docker compose一体化编排,搞定多个容器的创建和管理。
步骤2-wechatpadpro源文件准备
1.下载这个压缩包,解压出WeChatPadPro-Docker的文件夹,放到/opt的文件夹下(放其他目录也行)
压缩包下载:https://pan.quark.cn/s/ea31c6fd0508
2.然后找到WeChatPadPro-Docker/WeChatPadPro/Assets
目录下的setting.json文件,打开,然后修改AdminKey为自己的密钥,并且保存
3.然后在WeChatPadPro-Docker/WeChatPadPro目录中找到stay这个文件(没有后缀),并且记录好它的绝对路径,并且记下来。
按照我的方法,绝对路径为:/opt/WeChatPadPro-Docker/WeChatPadPro
步骤3-docker compose 编排
1.如果1panel的版本有编排功能,则开始利用1panel的编排工具,进行编排内容编写:
# docker-compose.yml
# NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker-compose -f ./compose/astrbot.yml up -d
services:
#安装napcat容器
napcat:
environment:
- NAPCAT_UID=${NAPCAT_UID:-1000}
- NAPCAT_GID=${NAPCAT_GID:-1000}
- MODE=astrbot
ports:
- 6099:6099
container_name: as_napcat
restart: unless-stopped
image: mlikiowa/napcat-docker:latest
volumes:
- ./data:/AstrBot/data
- ./ntqq:/app/.config/QQ
networks:
- astrbot_network
mac_address: "02:42:ac:11:00:02"
#安装astrbot容器
astrbot:
environment:
- TZ=Asia/Shanghai
image: soulter/astrbot:latest
container_name: astrbot
restart: unless-stopped
ports:
- "6185:6185"
- "6195:6195"
- "6199:6199"
volumes:
- ./data:/AstrBot/data
- ./napcat/config:/app/napcat/config
- ./ntqq:/app/.config/QQ
networks:
- astrbot_network
#安装wechatpadpro消息平台的数据库--mysql
mysql_wx:
# 指定容器的名称
container_name: as_mysql_wx
# 指定镜像和版本
image: mysql:8.0
ports:
- "33306:3306"
restart: unless-stopped
# 容器日志大小配置
logging:
driver: "json-file"
options:
max-size: "5g"
environment:
# 配置root密码
MYSQL_ROOT_PASSWORD: wyz_mysql
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: wechatpadpro
volumes:
# 挂载数据目录
- "./mysql/data:/var/lib/mysql"
# 挂载配置文件目录
- "./mysql/config:/etc/mysql/conf.d"
networks:
- astrbot_network
healthcheck:
# 可选:健康检查确保MySQL就绪
test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
interval: 5s
timeout: 3s
retries: 5
#安装wechatpadpro消息平台的数据库--redis:
redis_wx:
# 指定容器的名称
container_name: as_redis_wx
# 指定镜像和版本
image: redis:alpine
ports:
- "36379:6379"
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 3
# 容器日志大小配置
logging:
driver: "json-file"
options:
max-size: "5g"
volumes:
- ./redis/conf/redis.conf:/etc/redis/redis.conf # 映射配置文件目录,宿主机:容器
- ./redis/data:/data # 映射数据目录,宿主机:容器
restart: unless-stopped # 容器开机自启的话用always
privileged: true # 获取宿主机root权限
networks:
- astrbot_network
command: [ "redis-server", "/etc/redis/redis.conf" ] # 指定配置文件启动redis-server进程
#安装微信消息平台wechatpadpro
wechatpadpro:
# 指定容器的名称
container_name: as_wechatpadpro
# 指定镜像和版本
image: alpine:latest
ports:
- "38849:8849"
restart: unless-stopped
depends_on:
mysql_wx:
condition: service_healthy
redis_wx:
condition: service_healthy
links:
- mysql_wx
- redis_wx
volumes:
- /opt/WeChatPadPro-Docker/WeChatPadPro:/WeChatPadPro # 映射数据目录,宿主机:容器,改成了宿主机文件夹绝对路径
# - ./WeChatPadPro/assets/setting.json:/WeChatPadPro/assets/setting.json # 映射配置文件目录,宿主机:容器
# 指定工作目录
working_dir: /WeChatPadPro
# 指定容器启动命令,执行./stay
command: [ "/bin/sh", "-c", "chmod +x ./stay && ./stay" ]
# 容器日志大小配置
logging:
driver: "json-file"
options:
max-size: "5g"
# 设置时区
environment:
- TZ=Asia/Shanghai
# 设置语言
- LANG=zh_CN.UTF-8
# 设置编码
- LC_ALL=zh_CN.UTF-8
networks:
- astrbot_network
networks:
astrbot_network:
driver: bridge
name: astrbot_network
2.如果没有编排功能,可以手动在以下路径,创建一个新的文件夹astrbot_all
,名字自定义,算是为了这个小项目的容器编排进行命名,同时创建一个docker-compose.yml文件,文件具体代码,在步骤①附上了。
3.注意:docker-compose.yml中wechatpadpro服务中的挂载volume,一定要改为你的WechatPadPro文件夹的绝对路径,也就是我们刚刚记下的/opt/WeChatPadPro-Docker/WeChatPadPro
(因为我们的docker-compose.yml文件路径和挂载的这个文件夹不在一个路径,所以要用绝对路径)
步骤4-运行docker compose编排,创建容器并且观察容器日志是否正常
1.利用1panel创建的编排,设置编辑好docker-compose.yml的内容后,就会开始运行了。
2.或者在终端输入
cd /opt/1panel/docker/compose/astrbot_all #先进入到我们创建的这个astrbot_all的文件夹内,这也是刚刚编辑好的docker-compose.yml文件所在位置
docker compose up -d #根据这个编排文件进行容器创建,其中-d是为了不在终端直接显示容器日志
3.容器全部创建好之后,应该有5个:
4.检查关键容器日志和容器状态
as_wechatpadpro容器日志:
astrbot容器日志:
as_napcat容器日志:
这3个容器日志检查都没问题,安装部分就大功告成。接下来是配置。
步骤5-astrbot+napcat配置QQ
在浏览器打开astrbot的web端后台,登录初始用户名和密码都是astrbot(登陆后会强制你改密码,然后重新用新账号密码登录即可)
登录地址:localhost:6185
,如果你是在另一台局域网中的电脑浏览器打开,那么就是你的服务器内网ip:6185的形式,
比如我打开就是用192.168.5.122:6185
,登录进入后看图配置即可:
astrbot容器日志出现aiocqhttp适配器已连接就ok了
接下来就登录napcat的web控制后台,扫码登录QQ即可
步骤6-astrbot+wechatpadpro配置微信
在浏览器打开astrbot的web端后台,登录初始token是napcat(登陆后会提示你改token,然后重新用新账号密码登录即可)
来到消息平台适配器-新增适配器
选择WeChatPadPro
保存即可
查看astrbot容器日志,这样的状态,就是随时可以微信扫码登录了
如果登录时间超过180秒,就在astrbot的web管理后台,消息平台开关一下即可。
扫码登录成功后,astrbot容器日志会提示
- 感谢你赐予我前进的力量