机器人搭建记录 yobot(Docker版本)

机器人搭建记录 yobot(Docker版本)

前言

在上一篇,我们介绍了如何在Linux & Windows环境下进行部署. 本章我们主要简述如何使用Docker进行部署.


正文

官方教程使用 Docker 自动脚本部署

官方的一键脚本

sudo bash -c "$(curl get.yobot.win)"

我将脚本的内容下载了下来. 说实话, 脚本运行的过程中有不少问题. 并且不支持错误重新安装, 且国内网络不通等问题. 其可用性比较差. 我们将脚本拆散, 遇到错误地方一步一步运行即可.


脚本内容(附带注释)

#!/bin/bash
set -e

# 判断运行环境(其实没啥必要)
# ensure amd64
if [ $(dpkg --print-architecture) != "amd64" ]; then
    echo "Sorry, the architecture of your device is not supported yet."
    exit
fi

# ensure run as root
if [ $EUID -ne 0 ]; then
    echo "Please run as root"
    exit
fi

echo "
yobot-gocqhttp installer script

What will it do:
1. install docker
2. run yobot in docker
3. run go-cqhttp in docker

After script finished, you need to press 'ctrl-p, ctrl-q' to detach the container.

"

# 输入机器人用户名和密码,为方便后续配置
read -p "请输入作为机器人的QQ号:" qqid
read -p "请输入作为机器人的QQ密码:" qqpassword
export qqid
export qqpassword

echo "开始安装,请等待"

# 创建文件夹
mkdir yobot_data gocqhttp_data

# 判断是否存在docker命令。没有下载docker进行安装
if [ -x "$(command -v docker)" ]; then
    echo "docker found, skip installation"
else
    echo "installing docker"
    curl -fsSL "https://get.docker.com" | sh
fi

# docker创建一个网络叫做qqbot
docker network create qqbot

# docker拉取2个镜像文件
docker pull alpine
docker pull yobot/yobot

# 拉取go-cqhttp文件 从https://api.github.com/repos/Mrs4s/go-cqhttp/releases
# 其实在执行这个步骤时候,有时网络不好会执行很长一段时间
echo "downloading latest gocqhttp"
docker run --rm -v ${PWD}:/work -w /work python:3.7-slim-buster python3 -c "
import json
import urllib.request
import ssl
url = 'https://api.github.com/repos/Mrs4s/go-cqhttp/releases'
resp = urllib.request.urlopen(url).read().decode('utf-8')
assets = json.loads(resp)[0]['assets']
for item in assets:
    if item['name'].endswith('linux-amd64.tar.gz'):
        download = item['browser_download_url']
        break
resp = urllib.request.urlopen(download).read()
f = open('go-cqhttp.tar.gz', 'wb')
f.write(resp)
f.close()
"
# 解压go-cqhttp文件
tar zxf go-cqhttp.tar.gz
rm go-cqhttp.tar.gz -f

# 编写一个Dockerfile文件
# 打一个go-cqhttp文件包 将其打成docker image
echo "building gocqhttp container"
echo "
FROM alpine:latest
ADD go-cqhttp /bin/go-cqhttp
WORKDIR /bot
ENTRYPOINT /bin/go-cqhttp
">Dockerfile
docker build . -t gocqhttp
rm Dockerfile -f

# 初始化go-cqhttp项目
echo "initializing gocqhttp configure file"
docker run --rm \
           -v ${PWD}/gocqhttp_data:/bot \
           gocqhttp >/dev/null 2>&1

# 使用python镜像,处理更改cqhttp的配置文件。
echo "writing configure files"
docker run --rm -v ${PWD}:/work -w /work -e qqid -e qqpassword python:3.7-slim-buster python3 -c "
import json, os, random, string
access_token = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=16))
with open('yobot_data/yobot_config.json', 'w') as f:
    json.dump({'access_token': access_token}, f, indent=4)
with open('gocqhttp_data/config.json', 'r+') as f:
    config = json.load(f)
    config['uin'] = int(os.environ['qqid'])
    config['password'] = os.environ['qqpassword']
    config['access_token'] = access_token
    config['enable_db'] = False
    config['web_ui']['enabled'] = False
    config['http_config']['enabled'] = False
    config['ws_config']['enabled'] = False
    config['ws_reverse_servers'] = [{
        'enabled': True,
        'reverse_url': 'ws://yobot:9222/ws/',
        'reverse_api_url': '',
        'reverse_event_url': '',
        'reverse_reconnect_interval': 3000
    }]
    f.seek(0)
    f.truncate()
    json.dump(config, f, indent=4)
"

# 启动yobot镜像
echo "starting yosbot"
docker run -d \
           --name yobot \
           -p 9222:9222 \
           --network qqbot \
           -v ${PWD}/yobot_data:/yobot/yobot_data \
           yobot/yobot

# 启动go-cqhttp镜像
echo "starting gocqhttp"
docker run -it \
           --name gocqhttp \
           --network qqbot \
           -v ${PWD}/gocqhttp_data:/bot \
           gocqhttp

附带注释的脚本文件如上所示。可以看出,如果当你第一次停止后,第二次再进行创建文件夹时候就会报错。mkdir yobot_data gocqhttp_data. 应该选用mkdir -xx yobot_data. 作者在这边还是略显的年轻.


Reference

[1]. 使用 Docker 自动脚本部署[2].

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页