要点说明

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容器日志会提示