注意:本文旨在帮助希望使用 docker 的搭建者,如果你并不熟悉使用 docker,请参考其他教程
前言
什么是 Docker
Docker 是一种容器方案,将多个运行环境分离,就像虚拟机一样,但原理不同。容器比虚拟机更轻便,只将环境隔离并不需要虚拟硬件,性能损耗极小。
为什么要用 Docker
方便部署、方便迁移、干净、安全。
准备工作
- 一个服务器(家庭、学校、公司的宽带一般没有公网不建议使用)
- 一个域名(如果服务器在大陆区域,那么域名必须备案。港澳台与境外服务器可以不用备案)
- 将一到两个域名指向你的服务器(yobot 使用一个域名,HoshinoBot 的第三方插件可能需要一个域名)
部署教程
(以下教程均以 Linux 服务器为例,新手建议选择 Ubuntu 最新版)
安装必要软件
安装 Docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
rm get-docker.sh
sudo usermod -aG docker $(whoami)
|
关于文本编辑器,我个人推荐使用更全能的 ssh 工具,在本地完成文本编辑任务。vim 适合以前没有鼠标、没有组合快捷键的年代,不过现在已经有更好的选择了。
如果要在本地修改文件,请尽量不要使用 Windows 自带的记事本,请先安装编程专用文本编辑器,比如这个:点击下载notepad3
部署过程
准备一个随机密钥
你可以用任何方式生成一个随机字符串,比如
请记下这个密钥,后面会用到
准备 Docker
创建 docker 网络,我们后面使用的多个容器将通过这个网络进行连接
1
| docker network create qqbot
|
现在可以创建一个工作目录,存放后续的文件
1 2 3
| mkdir -p ~/qqbot cd ~/qqbot
|
下载并导入镜像
拉取镜像
1 2 3 4
| docker pull pcrbot/hoshinobot docker pull pcrbot/gocqhttp:ffmpeg docker pull yobot/yobot:pypy docker pull caddy
|
如果国内服务器连接 Docker 速度较慢,可以改用下面的方法
阿里云镜像加速教程(目前限额免费)
配置 HoshinoBot
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker run --rm \ -v ${PWD}:/tmp/Hoshino \ pcrbot/hoshinobot \ mv /HoshinoBot/ /tmp/Hoshino/Hoshino
sudo chown -R $(whoami) Hoshino
vim Hoshino/hoshino/config/__bot__.py
|
配置文件中,需要修改下面三个字段,其他部分可按注释自行编辑。
1 2 3
| HOST = '0.0.0.0' ACCESS_TOKEN = 'xxxxxx' SUPERUSERS = ['000000']
|
1 2 3 4 5 6 7
| docker run -d \ -v ${PWD}/Hoshino:/HoshinoBot \ -v ${PWD}/Hoshino_data:/root/.hoshino \ --name hoshino \ --network qqbot \ pcrbot/hoshinobot
|
配置 yobot
启动 yobot
1 2 3 4 5 6 7 8 9 10 11 12
| export YOBOT_PUBLIC_ADDRESS="https://your-own-domain-here.com/" export YOBOT_ACCESS_TOKEN="xxxxxx"
docker run -d \ -v ${PWD}/yobot_data:/yobot/yobot_data \ -e YOBOT_PUBLIC_ADDRESS \ -e YOBOT_ACCESS_TOKEN \ --name yobot \ --network qqbot \ yobot/yobot:pypy
|
配置 gocqhttp
1 2 3 4 5 6 7 8 9 10 11
| docker run --rm \ -v ${PWD}/gocqhttp_data:/data \ pcrbot/gocqhttp:ffmpeg
sudo chown -R $(whoami) gocqhttp_data
vim gocqhttp_data/config.hjson
|
这里我们需要修改如下的部分,对照下面的注释修改
go-cqhttp
使用了 hjson
格式的配置文件,所以格式更加随意,不必感到困惑
1 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 46
| { "uin": 0, "password": "", "encrypt_password": false, "password_encrypted": "", "enable_db": false, "access_token": "xxxxxx", "relogin": { "enabled": true, "relogin_delay": 3, "max_relogin_times": 0 }, "_rate_limit": { "enabled": false, "frequency": 1, "bucket_size": 1 }, "post_message_format": "string", "ignore_invalid_cqcode": false, "force_fragmented": true, "use_sso_address": false, "heartbeat_interval": 5, "http_config": { "enabled": false }, "ws_config": { "enabled": false }, "web_ui": { "enabled": false }, "ws_reverse_servers": [ { "enabled": true, "reverse_url": "ws://hoshino:8080/ws/", "reverse_reconnect_interval": 3000 }, { "enabled": true, "reverse_url": "ws://yobot:9222/ws/", "reverse_reconnect_interval": 3000 } ] }
|
修改完毕,启动 gocqhttp
1 2 3 4 5 6 7 8 9
|
docker run -it \ -v ${PWD}/gocqhttp_data:/data \ -v ${PWD}/Hoshino:/HoshinoBot \ --name gocqhttp \ --network qqbot \ pcrbot/gocqhttp:ffmpeg
|
登录成功后,按下连续组合键 ctrl-P , ctrl-Q
,将此容器挂到后台
至此,你的 bot 已经可以开始对话了,尝试发送 在?
(验证hoshinobot) 或 version
(验证yobot)
配置网络服务器
为了访问 yobot 网页,我们需要配置网络服务器
如果你已经安装过 nginx
,请阅读下方 nginx 部分
如果你尚未安装 nginx
或其他网络服务器,请阅读下方 caddy 部分
这里的例子只给出 yobot 的代理方法,如需代理 HoshinoBot 则用换一个域名再操作一次即可。
Nginx 反向代理
如果你已经安装过 nginx
,请参考此部分,并忽略下方 caddy 部分
请事先准备好 SSL 证书
如果你的 Nginx 不在容器内,则无法自动获取 yobot 地址,需要手动查询地址,记下此 IP 填写到 nginx 配置文件中
1 2 3
| docker inspect yobot | grep IPAddress
|
请在已有的 nginx 配置文件中加入以下内容
1 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 46 47 48 49 50 51
| server { listen 80; listen [::]:80; server_name example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2;
server_name example.com; ssl_certificate /home/www/ssl/ssl_certificate.crt; ssl_certificate_key /home/www/ssl/ssl_certificate.key;
ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:1m; ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_stapling on; ssl_stapling_verify on;
location / { proxy_pass http://yobot:9222; proxy_set_header X-Real-IP $remote_addr; }
location /ws/ { deny all; }
}
|
重新加载 nginx 配置
Caddy 反向代理
请先将域名指向你的服务器,否则无法自动申请证书
caddy 使用非常简单,只需创建一个 Caddyfile
(没有扩展名),填写如下内容
编写内容如下
1 2 3 4 5 6 7 8 9 10
| example.com { # 此处修改为你的域名
respond /ws/* "Forbidden" 403 { close }
reverse_proxy * http://yobot:9222 { header_up +X-Real-IP {remote_host} } }
|
使用 docker 启动 caddy
1 2 3 4 5 6 7
| docker run -d \ -v ${PWD}/Caddyfile:/etc/caddy/Caddyfile \ --name caddy \ --network qqbot \ -p 80:80 \ -p 443:443 \ caddy
|
现在打开浏览器访问你的域名,就能看到 yobot 主页了
添加更多 Hoshino 插件
HoshinoBot 有很多社区插件,可以在插件索引中查看,安装插件方法请参考插件自身的介绍页。
注意:在安装依赖时,需要使用 pip3
,我们需要改为 docker exec hoshino pip3
(可选)我们也可以为这个命令设置一个别名方便记忆
1 2
| alias hpip='docker exec hoshino pip3'
|
(可选)将其写入 ~/.bashrc
结尾,即可永久生效
1 2
| echo "alias hpip='docker exec hoshino pip3'" >>~/.bashrc
|
(可选)安装 hsn
插件管理器
更多信息请参考:https://github.com/pcrbot/hsn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| wget https://github.com/pcrbot/hsn/releases/download/v0.1.4/hsn-v0.1.4-linux-amd64.tar.gz
tar zxvf hsn-v0.1.4-linux-amd64.tar.gz
rm hsn-v0.1.4-linux-amd64.tar.gz
chmod +x hsn
mv hsn /usr/bin/
hsn set --path=${PWD}/Hoshino hsn set -i="https://github.com" hsn set --pip="docker exec hoshino pip3"
|