跳转至

Linux 部署

使用前注意

本教程需要:

  • 基础文件操作能力

  • 基础终端使用能力

  • 基础搜索引擎使用能力

  • 中文阅读理解能力

  • 一个可以正常运转的脑子

没有的话建议快跑

一个建议

极度不建议没有任何计算机基础的人安装或使用 SAGIRI-BOT!

除非你懂得如何阅读文档、虚心提问并可以正常使用搜索引擎

关于部署出现问题

当部署出现问题时,请检查是否按文档顺序进行,如出现问题可前往 FAQ 寻找,如果没有找到原因可以前往 SAGIRI BOT官方交流群 询问或在 github 提出 ISSUE

其他选择

对于 mirai 的部署部分,如果有感觉写的不清楚的地方,可以查看官方/社区的部署教程,效果是相同的

安装 Mirai

本章分为使用 mirai-console-loader 安装(推荐)和使用 mcl-installer 安装两部分

我们推荐使用 mirai-console-loader 进行安装

我们不推荐直接下载 Mirai 使用,如果你确定自己会用,请自行部署

使用 mirai-console-loader 安装

安装 Java

关于 Java 的安装,可以查看社区文档 安装 Java(我懒得写)

安装 mirai-console-loader

  • 在终端中执行如下命令:
    mkdir mcl
    cd mcl
    wget https://github.com/iTXTech/mirai-console-loader/releases/download/v2.1.2/mcl-2.1.2.zip
    unzip mcl-2.1.2.zip
    chmod +x mcl
    ./mcl
    
  • 等待运行完成

使用 mcl-installer 安装

  • mcl-installer release 下载对应自己系统架构的二进制文件
  • 下载完成后,运行下载后的文件,你应当见到如下输出:
iTXTech MCL Installer 1.0.7 [OS: windows]
Licensed under GNU AGPLv3.
https://github.com/iTXTech/mcl-installer

iTXTech MCL and Java will be downloaded to "/root/mah-pure-inst"

Checking existing Java installation.
...
Would you like to install Java? (Y/N, default: Y)

一路回车即可(也可以按照自己情况进行修改)

  • 随后运行 ./mcl,你应当见到如下输出:
[INFO] Verifying "net.mamoe:mirai-console" v
[ERROR] "net.mamoe:mirai-console" is corrupted.
Downloading ......
xxxx-xx-xx xx:xx:xx I/main: Starting mirai-console...
......
xxxx-xx-xx xx:xx:xx I/main: mirai-console started successfully.

>
  • Ctrl + C 退出 mirai-console

安装 mirai-api-http-v2

首先,我们进入 mirai-console-loader 的文件夹下,如果你在安装 Mirai 时使用的是使用的是 mcl-installer,则进入 mcl-installer 下面的 mcl 文件夹

  • 按照 mirai-api-httpREADME,在终端中运行 ./mcl --update-package net.mamoe:mirai-api-http --channel stable-v2 --type plugin
  • 切换 mirai-console-loaderrepo,运行 ./mcl --mrm-use forum(当出现网络报错时执行)
  • 启动 mcl 完成自动更新和启动

配置 mirai-api-http-v2

  • 打开 mcl/config/net.mamoe.mirai-api-http/setting.yml,将下面的内容复制覆盖粘贴到文件中
  • 若无此文件请检查 mcl 是否被成功添加并且添加后启动过一次 mcl,若没有请完成前文所述步骤再进行此步骤
    adapters:
      - http
      - ws
    debug: false
    enableVerify: true
    verifyKey: 1234567890 # 你可以自己设定, 这里作为示范, 请保持和 config.yaml 中 verify_key 项一致
    singleMode: false
    cacheSize: 4096 # 可选, 缓存大小, 默认4096. 缓存过小会导致引用回复与撤回消息失败
    adapterSettings:
      ## 详情看 http adapter 使用说明 配置
      http:
        host: localhost
        port: 23456 # 端口
        cors: [*]
    
      ## 详情看 websocket adapter 使用说明 配置
      ws:
        host: localhost
        port: 23456 # 端口
        reservedSyncId: -1 # 确保为 -1, 否则 WebsocketAdapter(Experimental) 没法正常工作.
    

安装注意

当启动后出现如下方的消息才算安装并启动成功

2022-04-30 12:20:17 I/Mirai HTTP API: ********************************************************
2022-04-30 12:20:17 I/http adapter: >>> [http adapter] is listening at http://localhost:23456
2022-04-30 12:20:17 I/ws adapter: >>> [ws adapter] is listening at ws://localhost:23456
2022-04-30 12:20:17 I/Mirai HTTP API: Http api server is running with verifyKey: 1234567890
2022-04-30 12:20:17 I/Mirai HTTP API: adaptors: [http,ws]
2022-04-30 12:20:17 I/Mirai HTTP API: ********************************************************

配置自动登录

注意

为防止因填入不当数据导致无法启动 mirai-console-loader (MCL) 的问题,建议在部署时通过 mirai-console-loader (MCL) 内建的 autoLogin 指令配置自动登录,而非直接修改 Console 配置文件

使用 /autoLogin 配置自动登录(推荐)

在 mirai-console-loader (MCL) 启动完成后,输入 /autoLogin add <你的QQ号> <你的QQ密码> 并回车,应该会显示 已成功添加 '<你的QQ号>'

修改 Console 配置文件实现自动登录(不推荐)

仅可在 mirai-console-loader (MCL) 已关闭的情况下更改配置文件

使用合适的编辑器打开位于 mirai-console-loader (MCL) 安装目录下的 config/Console/AutoLogin.yml 文件,应类似于如下内容:

accounts: 
    account: 123456    # 需要自动登录的 QQ 号
    password:     # 这行不填!!!这行不填!!!这行不填!!!
      kind: PLAIN    #       # 密码种类, 可选 PLAIN 或 MD5,看不懂保持默认即可
      value: pwd    # QQ 号对应的登录密码,PLAIN 时为密码文本, MD5 时为 16 进制
    configuration: 
      protocol: ANDROID_PHONE    # 登录协议,看不懂保持默认即可,可选 "ANDROID_PHONE" / "ANDROID_PAD" / "ANDROID_WATCH" /"MAC" / "IPAD"

修改 account kind value protocol 的值并保存即可完成自动登录的配置

如何实现手机和 mirai 同时在线?

可通过更改登录协议实现,操作如下:

在已配置自动登录后,输入 /autoLogin setConfig <你的QQ号> protocol IPAD

指令中的 IPAD 可更换为其他登录协议,如 ANDROID_PAD ANDROID_WATCH 等,推荐使用 IPAD 登录协议以防止出现部分功能无法使用的情况

注意:更改协议后需要重启 mcl 才可生效

什么?你想手机平板手表电脑和 mirai 同时在线?

我的建议是,为什么不问问万能的神奇海螺呢?

登录 QQ

执行 ./mcl 启动 mirai-console

如果直接显示 Event: BotOnlineEvent(bot=Bot(<你的QQ号>)),并有收到新消息,那么恭喜你,你已经完成了 mirai 方面的配置了

若显示如下输出或出现有如下内容的弹窗:

需要滑动验证码,完成后请输入ticket
url:http://xxx.xxx.xxx
  • 有弹窗,并且使用的是 Android 系统手机(或使用电脑模拟器)

    • 点击 Open with TxCaptchaHelper,下载 TxCaptchaHelper 并安装
    • 输入弹窗中的4位请求码并完成滑动验证,随后在电脑端点击确定
  • 没弹窗(如 Linux NoGUI 用户)或者使用的 IOS 系统手机/其他不能运行 apk 程序系统的手机

    • 在电脑上打开浏览器,输入程序提供的url,应当会出现滑动认证的画面,此时先不要进行认证
    • 单击 F12 键,会出现一个 DevTool,找到上方选项卡,点击 Network 选项,再点击下方的 Fetch/XHR 选项
    • 完成滑动验证,此时在 DevTool 界面中应会出现新的请求,找到其中名为 cap_union_new_verify 选项卡,点击其中的 Preview 选项卡,在其中找到 ticket 的值填入 mcl 并回车
    • gif演示:浏览器获取ticket演示

若显示需要手机验证码登录按提示操作即可

安装 python

安装前请注意

如果你要使用使用到深度学习库的项目,强烈推荐使用 Anaconda/Miniconda 安装 Python

如果你了解这些库的配置等,可自行决定

使用 Anaconda/Miniconda

  • 安装前请注意,请选择适合你的架构,本文以 x86_64 为例
  • 如果你的机器存储空间足够大,则执行 wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh 安装 Anaconda,否则执行 wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 安装 Miniconda
  • 执行 bash 刚下载的文件名.sh,如 bash Anaconda3-5.3.1-Linux-x86_64.shbash Miniconda3-latest-Linux-x86_64.sh
  • 执行 source .bashrc 更新环境变量
  • 创建虚拟环境(可选但推荐)
    • 输入 conda create -n your_env_name python=3.10,其中 your_env_name 为你要创建的环境名,可自定义,python版本 >= 3.10 即可,可自行安装其他版本
    • 等待程序询问是否安装,直接回车即可
    • 安装完毕后输入 conda activate your_env_name 即可激活虚拟环境

自行安装

搜索引擎会告诉你一切,搜索关键词:Linux python3.10安装,注意,安装的python版本必须大于等于 3.10

下载 SAGIRI-BOT

使用 git

  • 打开终端,进入你想要下载的目标文件夹
  • 输入 git clone https://github.com/SAGIRI-kawaii/sagiri-bot.git
  • 等待下载完成即可
  • 什么?你问我太慢怎么办?我的建议是,找一台可以快速链接 github 的机器下载再传过来
  • 或者你可以使用代理站:git clone https://ghproxy.com/github.com/SAGIRI-kawaii/sagiri-bot.git

直接下载

  • 打开 SAGIRI-BOT 项目地址 ,点击绿色的 Code 按钮,并点击下面的 Download ZIP
  • 下载完成后解压即可
  • 什么?你问我太慢怎么办?我的建议是,找一台可以快速链接 github 的机器下载再传过来

真的非常不建议直接从 GitHub 下载仓库的 zip 或 tar 文件

大部分情况下,直接使用 zip 或 tar 文件进行安装无法通过 git pull 进行更新,即使用该方法,可能无法正常更新且可能有稳定性问题

如果是因为直接下的 zip 或 tar 文件而且一直没更新导致的问题,就不要跑来群里或者发 issue 问了

配置 python 虚拟环境并安装依赖

为什么要配置python虚拟环境?

防止出现依赖混乱或冲突等问题,常用的虚拟环境有 conda venv poetry

当然你也可以不配置,但是如果你不配置而且服务器上还有其他的一些python项目,那么你的程序可能会出现一些问题

此处将默认你已经安装了 poetry

不会安装 poetry

在终端执行 curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - 即可安装 poetry

随后在 .bashrc.zshrc 中添加脚本打印的 export 以便在终端中使用 poetry 命令

实在不会,你就 pip install poetry

使用 Anaconda/Miniconda

  • 若你在安装python时使用的是安装 Anaconda/Miniconda 的方法并且 自带python版本>=3.10 或已经配置好虚拟环境可观看此项
  • 使用 win + r 组合键,打开运行窗口,输入 cmd 并回车,打开命令提示符
  • 输入 conda activate your_env_name 进入虚拟环境(Anaconda自带版本 >= 3.10可忽略此步骤,但推荐使用虚拟环境以防止出现依赖混乱冲突的情况,若你还没有创建虚拟环境并且自带python版本不符合条件,请查看上方创建虚拟环境)
  • 激活成功后进入bot所在目录,因为我们使用 conda 创建虚拟环境,所以要先关闭 poetry 的虚拟环境创建,在终端执行 poetry config virtualenvs.create false
  • 在终端输入 poetry env info,当其中的的 Valid 项为 True 时,就代表 poetry 已经可以在 conda 的虚拟环境中使用了
  • 执行 poetry install,等待安装完成

使用 poetry

  • 终端进入 bot 所在目录,运行 poetry install 即可
Resolving dependencies... 部分耗时过长?

首先检查一下是否误删了 poetry.lock 文件

如果误删了,可以使用 git checkout poetry.lock 恢复

如果没有误删,那么不用慌张!这是技术性调整

可能是因为你的网络不稳定,或者你的网络环境不符合要求,导致 poetry install 失败,请尝试使用 pip 安装依赖

大概需要多久安装成功呢?

截至这个区块编写完成,已知的最长用时是 20 分钟。

配置 config

  • 打开 /config/config_demo.yaml
  • 按文件中注释更改
  • 将文件更名为 /config/config.yaml
不知道怎么改数据库链接?

如果没有特殊需求,或者你不知道这是什么意思,保持不变即可。

如需要指定使用的数据库或使用 MySQL 等,则需要更改至相应链接,格式如下:

  • SQLite

    sqlite+aiosqlite:///data.db

    使用该链接将使用 SAGIRI-BOT 部署目录下的 data.db

  • MySQL

    mysql+aiomysql://username:password@ip:port/database

    使用该链接将以 username 为用户名,password 为密码连接至位于 ip:portdatabase 数据库

    你可能需要自行安装 mysql 的异步驱动 aiomysql

  • 其他数据库

    不知道捏,自己探索吧

    可查阅 SQLAlchemy 使用文档填写合适的链接

如果你看不懂上述文本的话保持不变即可。

配置 alembic

  • 首先启动 mcl
  • 运行一次bot ( python main.py ),bot应会自动退出
  • 在目录下寻找 alembic.ini 文件并打开
  • 将其中 sqlalchemy.url 项更换为自己的连接(不需注明引擎否则会报错)(如 sqlite:///data.db
不知道什么是引擎?

如果你在上一步保持不变,这一步填写 sqlite:///data.db 即可

  • SQLite

    假设你在上一步配置的链接为 sqlite+aiosqlite:///data.db

    则你在这一步配置的链接应为 sqlite:///data.db

  • MySQL

    假设你在上一步配置的链接为 mysql+aiomysql://username:password@ip:port/database

    则你在这一步配置的链接应为 mysql://username:password@ip:port/database

  • 其他数据库

    不知道捏,自己探索吧

    可查阅 SQLAlchemy 使用文档填写合适的链接

如果你看不懂上述文本的话,看这个区块的第一行

启动机器人8

  1. 启动 mcl
  2. 进入bot目录下执行 poetry run python main.py
报错了怎么办?

如果你在前文使用了 conda 等虚拟环境,请保证其被正确激活

如果是其他报错,请参考 FAQ

你应当见到类似如下界面:

2022-01-04 23:45:08.848 | INFO     | sagiri_bot.core.app_core:__init__:59 - Initializing
2022-01-04 23:45:08.916 | INFO     | sagiri_bot.core.app_core:__init__:84 - Initialize end
2022-01-04 23:45:08.921 | DEBUG    | graia.saya:require:111 - require sagiri_bot.handler.handlers.abbreviated_prediction
2022-01-04 23:45:08.939 | INFO     | graia.saya:require:134 - module loading finished: sagiri_bot.handler.handlers.abbreviated_prediction
...
                _           _            
     /\        (_)         | |           
    /  \   _ __ _  __ _  __| |_ __   ___ 
   / /\ \ | '__| |/ _` |/ _` | '_ \ / _ \
  / ____ \| |  | | (_| | (_| | | | |  __/
 /_/    \_\_|  |_|\__,_|\__,_|_| |_|\___|
Ariadne version: 0.4.9
Broadcast version: 0.14.5
Scheduler version: 0.0.6
Saya version: 0.0.13
2022-01-04 23:45:11.200 | INFO     | graia.ariadne.app:launch:1287 - Launching app...
2022-01-04 23:45:11.200 | DEBUG    | graia.ariadne.app:daemon:1208 - Ariadne daemon started.
2022-01-04 23:45:11.246 | INFO     | graia.ariadne.adapter:fetch_cycle:378 - websocket: connected
2022-01-04 23:45:13.256 | INFO     | graia.ariadne.app:launch:1295 - Remote version: 2.4.0
2022-01-04 23:45:13.256 | INFO     | graia.ariadne.app:launch:1298 - Application launched with 2.1s
2022-01-04 23:45:13.256 | INFO     | sagiri_bot.core.app_core:config_check:206 - Start checking configuration
2022-01-04 23:45:13.257 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - bot_qq - 123
2022-01-04 23:45:13.257 | SUCCESS  | sagiri_bot.core.app_core:config_check:215 - data_related:
2022-01-04 23:45:13.257 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     lolicon_image_cache - true
2022-01-04 23:45:13.257 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     lolicon_data_cache - true
2022-01-04 23:45:13.257 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     network_data_cache - true
2022-01-04 23:45:13.258 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     automatic_update - false
2022-01-04 23:45:13.258 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     data_retention - true
2022-01-04 23:45:13.258 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - db_link - sqlite+aiosqlite:///data.db
2022-01-04 23:45:13.258 | SUCCESS  | sagiri_bot.core.app_core:config_check:215 - functions:
2022-01-04 23:45:13.258 | SUCCESS  | sagiri_bot.core.app_core:dict_check:196 -     tencent:
2022-01-04 23:45:13.259 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -         secret_id - xxx
2022-01-04 23:45:13.259 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -         secret_key - xxx
2022-01-04 23:45:13.259 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     saucenao_api_key - xxx
2022-01-04 23:45:13.259 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     loliconApiKey - xxx
2022-01-04 23:45:13.259 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     wolfram_alpha_key - xxx
2022-01-04 23:45:13.259 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     shadiao_app_name - xxx
2022-01-04 23:45:13.260 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - host_qq - 123
2022-01-04 23:45:13.260 | SUCCESS  | sagiri_bot.core.app_core:config_check:215 - image_path:
2022-01-04 23:45:13.260 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     setu - M:\Pixiv\pxer_new\
2022-01-04 23:45:13.260 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     setu18 - M:\Pixiv\pxer18_new\
2022-01-04 23:45:13.260 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     real - M:\Pixiv\reality\
2022-01-04 23:45:13.261 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     real_highq - M:\Pixiv\reality\highq\
2022-01-04 23:45:13.261 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     wallpaper - M:\Pixiv\bizhi\highq\
2022-01-04 23:45:13.261 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     sketch - M:\线稿\
2022-01-04 23:45:13.261 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     cg - M:\二次元\CG\画像\ev\
2022-01-04 23:45:13.262 | SUCCESS  | sagiri_bot.core.app_core:config_check:215 - log_related:
2022-01-04 23:45:13.262 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     error_retention - 14
2022-01-04 23:45:13.262 | SUCCESS  | sagiri_bot.core.app_core:dict_check:201 -     common_retention - 7
2022-01-04 23:45:13.262 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - mirai_host - http://localhost:23456
2022-01-04 23:45:13.263 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - proxy - http://localhost:12345
2022-01-04 23:45:13.263 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - verify_key - 1234567890
2022-01-04 23:45:13.263 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - web_manager_api - True
2022-01-04 23:45:13.263 | SUCCESS  | sagiri_bot.core.app_core:config_check:220 - web_manager_auto_boot - True
2022-01-04 23:45:13.263 | INFO     | sagiri_bot.core.app_core:config_check:221 - Configuration check completed
2022-12-04 11:44:44.898 | DEBUG    | graia.saya:require:111 - require modules.self_contained.abbreviated_prediction
2022-12-04 11:44:44.913 | INFO     | graia.saya:require:134 - module loading finished: modules.self_contained.abbreviated_prediction
...
2022-01-04 23:45:13.263 | INFO     | SAGIRIBOT.Core.AppCore:bot_launch_init:171 - 本次启动活动群组如下:
2022-01-04 23:45:13.263 | INFO     | SAGIRIBOT.Core.AppCore:bot_launch_init:173 - 群ID: 123456789     群名: xxxxxxx
...

其中 ... 为省略的类似内容

现在,来试一试你的机器人吧!

后台运行

可使用 bg screen tmux nohup 等方法实现后台运行,此处不作过多阐述。