为避免部署云崽时重复性的输入指令耗时费力,(以及俺老重装服务器),故写了一键部署脚本来直接部署Yunzai的v3,内含个人认为的主要功能的其他插件包的安装和依赖,新人码代码不熟练,望多指正!
若直接复制代码报错无法运行,可直接到https://gitee.com/piedianz/testshell下载Ubuntuinstallyz.sh,配合说明.txt食用
tips:1.本文适用于Ubuntu系统,服务器和安卓的终端可用,win的话没试过不过后面的插件包部分应该能用脚本执行
2.脚本安装了py-plugin,并提供选项安装v3分支或者main分支
v3分支是直接安装依赖,并且poetry使用的是pip install poetry(python install太慢了)
main分支虽然可选安装但是并非本地,若想本地部署py请查看https://gitee.com/realhuhu/py-plugin的main分支,不过个人建议使用远程
3.脚本使用手动编译方式编译ffmpeg,安装在Yunzai-Bot的同级目录,安装时间可能比较长,(服务器的话二十分钟左右,手机看自身性能和网络状况),服务器建议在tmux或者screen运行(防止连接中断脚本停止运行)
当然也可以试试sudo apt install ffmpeg,不过可能ubuntu20.04的apt安装的版本不符合要求
脚本代码如下,可自行取所需
#! /bin/bash
#本脚本用于部署Yunzai-Bot v3
#于2022.11.20
if [ $EUID -ne 0 ]; then
echo "请先输入sudo su root 切换成root权限"
exit
fi
echo "开始安装和更新相关环境依赖"
apt update #列出可更新的软件清单
apt-get install -y sudo #安装sudo权限 -y表示执行过程中全部是yes
apt-get install -y curl #安装curl,curl是用于请求web服务器的工具
#安装nodejs
echo "开始安装nodejs"
#/dev/null相当于一个黑洞,任何输出信息都会直接丢失,此处表示将标准输出(1) 以及标准错误输出(2)都重定向到null中去,即不输出
#若type有输出,则exit code 为0
if ! type node >/dev/null 2>&1; then
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - #curl的-s表示不输出错误和进度信息,-L表示让http请求跟随服务器的重定向
sudo apt-get install -y nodejs
else
echo "nodejs已安装"
fi
echo "安装nodejs完成"
#若没有npm则安装npm
if ! type npm >/dev/null 2>&1; then
apt install npm -y
echo 'npm安装成功'
else
echo 'npm已安装'
fi
#安装并运行redis
echo "开始安装redis"
apt-get install redis -y
#启动redis服务,save中的默认参数配置
redis-server --save 900 1 --save 300 10 --daemonize yes
echo "redis安装完成"
#安装chromium浏览器
echo "开始安装chromium浏览器"
apt install chromium-browser -y
echo "安装chromium完成"
#安装中文字体
echo "开始安装中文字体"
apt install -y --force-yes --no-install-recommends fonts-wqy-microhei
echo "安装中文字体完成"
#安装git
echo "开始安装git"
apt install git -y
git config --global http.sslVerify false #去除https的ssl验证,方便拉取项目
echo "安装git完成"
#克隆云崽本体
echo "开始克隆Yunzai-Bot"
if [ ! -d "Yunzai-Bot/" ]; then #如果不存在Yunzai-Bot文件夹,-d表示是否存在文件夹
git clone --depth=1 -b main https://github.com/Le-niao/Yunzai-Bot.git
if [ ! -d "Yunzai-Bot/" ]; then
echo "克隆失败"
exit 0
else
echo "克隆完成"
fi
else
echo "Yunzai-Bot已安装"
fi
cd Yunzai-Bot/
echo "开始安装模块"
if [ ! -d "node-mudules/" ]; then
if ! type pnpm >/dev/null; then
npm install pnpm -g
fi;
if ! type cnpm >/dev/null; then
npm install cnpm -g --registry=https://registry.npmmirror.com
fi;
pnpm install -P
echo "安装模块完成"
else
echo "模块已安装"
fi
echo "开始安装依赖"
sudo apt install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev
echo "安装依赖完成"
echo "云崽本体安装完成"
#安装其他主要插件包
echo -n "你想装哪个版本的py-plugin(新版v3请输入v3,旧版py请输入main,不想请crtl + c退出):"
read ans
if [ ${ans} == v3 ]; then
echo "开始安装v3分支py-plugin";
echo "安装v3云崽依赖"
pnpm install iconv-lite @grpc/grpc-js @grpc/proto-loader -w
if ! type python >/dev/null 2>&1; then
echo "正在为您安装python3.10"
curl -sL https://gitee.com/piedianz/testshell/raw/dev/ubuntu_install_python3.10_apt.sh | sudo -E bash -
fi;
PY_VERSION=`python -V 2>&1|awk '{print $2}'|awk -F '.' '{print $2}'` #第一个用空格分割,取第二部分版本号3.10.8,第二个以'.'分割,取第二个数字10
if [[ ${PY_VERSION} -lt 10 ]]; then
echo -n "检测到您的py版本小于3.10,是否安装python3.10(yes/no):"
read ans1
if [ ${ans1} == yes ]; then
echo "正在为您安装python3.10"
curl -sL https://gitee.com/piedianz/testshell/raw/dev/ubuntu_install_python3.10_apt.sh | sudo -E bash -
else
echo "请保证你的python版本大于等于3.9"
fi;
fi;
if [ ! -d plugins/py-plugin/ ]; then
echo "克隆项目中"
git clone https://github.com/realhuhu/py-plugin.git ./plugins/py-plugin
fi;
cd plugins/py-plugin
if ! type poetry >/dev/null 2>&1; then
echo "开始安装poetry"
#python install
pip install poetry
if [ $? == 0 ]; then
echo "poetry安装完成"
else
echo "poetry安装失败,请自行百度安装方法"
exit 1;
fi;
fi;
echo "开始安装相关依赖"
poetry install;
if [ $? == 0 ]; then
echo "依赖安装成功";
else
echo "依赖安装失败,更换方法2"
poetry run pip install -r requirements.txt --trusted-host mirrors.aliyun.com
if [ $? == 0 ]; then
echo "依赖安装成功";
else
echo "依赖安装失败"
exit 1;
fi;
fi;
echo "v3分支py-plugin安装完成,有关插件安装请查看https://gitee.com/realhuhu/py-plugin/tree/v3/"
cd ../../
elif [ ${ans} == main ]; then
echo "开始安装main分支py-plugin";
if [ ! -d plugins/py-plugin/ ]; then
echo "安装py依赖中"
pnpm install @grpc/grpc-js @grpc/proto-loader -w
echo "克隆py项目中"
git clone -b main https://github.com/realhuhu/py-plugin.git ./plugins/py-plugin
if [ ! -d plugins/py-plugin/ ]; then
echo "py安装失败"
exit
fi
echo "py安装成功,因部署本地py问题较多,此处建议使用远程使用py的功能"
echo "有关远程可去https://gitee.com/realhuhu/py-plugin的main分支查看"
fi;
else
echo "未恰当选择,继续安装其他插件";
fi;
echo "开始安装Guoba-Plugin"
if [ ! -d plugins/Guoba-Plugin/ ]; then
git clone --depth=1 https://gitee.com/guoba-yunzai/guoba-plugin.git ./plugins/Guoba-Plugin/
pnpm install --filter=guoba-plugin
if [ ! -d plugins/Guoba-Plugin/ ]; then
echo "锅巴安装失败"
exit
fi
echo "锅巴安装成功"
fi
echo "开始安装miao-plugin"
if [ ! -d plugins/miao-plugin/ ]; then
git clone https://gitee.com/yoimiya-kokomi/miao-plugin.git ./plugins/miao-plugin/
pnpm add image-size -w
if [ ! -d plugins/miao-plugin/ ]; then
echo "喵喵安装失败"
exit
fi
echo "喵喵安装成功"
fi
echo "开始安装xiaoyao-cvs-plugin"
if [ ! -d plugins/xiaoyao-cvs-plugin/ ]; then
git clone https://gitee.com/Ctrlcvs/xiaoyao-cvs-plugin.git ./plugins/xiaoyao-cvs-plugin/
if [ ! -d plugins/xiaoyao-cvs-plugin/ ]; then
echo "图鉴安装失败"
exit
fi
echo "图鉴安装成功"
fi
echo "开始安装earth-k-plugin"
if [ ! -d plugins/earth-k-plugin/ ]; then
git clone https://gitee.com/SmallK111407/earth-k-plugin.git ./plugins/earth-k-plugin/
echo '安装土块画图相关依赖'
cnpm install node-machine-id
if [ ! -d plugins/earth-k-plugin/ ]; then
echo "土块安装失败"
exit
fi
echo "土块安装成功"
fi
echo "开始安装flower-plugin"
if [ ! -d plugins/flower-plugin/ ]; then
git clone --depth=1 https://github.com/Nwflower/flower-plugin.git ./plugins/flower-plugin/
if [ ! -d plugins/flower-plugin/ ]; then
echo "花佬插件安装失败"
exit
fi
echo "花佬插件安装成功"
fi
echo "开始安装yenai-plugin"
if [ ! -d plugins/yenai-plugin/ ]; then
git clone https://gitee.com/yeyang52/yenai-plugin.git ./plugins/yenai-plugin
if [ ! -d plugins/yenai-plugin/ ]; then
echo "椰奶安装失败"
exit
fi
echo "椰奶安装成功"
fi
echo "开始安装suiyue"
if [ ! -d plugins/suiyue/ ]; then
git clone https://gitee.com/Acceleratorsky/suiyue.git ./plugins/suiyue/
if [ ! -d plugins/suiyue/ ]; then
echo "碎月安装失败"
exit
fi
echo "碎月安装成功"
fi
echo "开始安装xitian-plugin"
if [ ! -d plugins/xitian-plugin/ ]; then
git clone https://gitee.com/XiTianGame/xitian-plugin.git ./plugins/xitian-plugin/
if [ ! -d plugins/xitian-plugin/ ]; then
echo "戏天插件管理器安装失败"
exit
fi
echo "戏天插件管理器安装成功"
fi
#由于apt安装的ffmpeg版本过低,可能不支持amr的转换
#有关ffmpeg的下载和编译,此处采用手动编译安装的方式
echo '开始安装ffmpeg'
if ! type ffmpeg >/dev/null 2>&1; then
#下载ffmpeg并解压,目录设置为自己所在目录
echo '开始下载ffmpeg'
wget http://www.ffmpeg.org/releases/ffmpeg-5.1.tar.gz
tar -zxvf ffmpeg-5.1.tar.gz
echo '下载解压完成'
#打开和编译
cd ffmpeg-5.1/
echo '安装yasm(有yasm的话就不用管)'
apt install yasm pkg-config libopencore-amrnb-dev libopencore-amrwb-dev
echo '安装yasm完成'
#编译
echo '此过程可能比较漫长,请耐心等候'
./configure --enable-gpl --enable-version3 --enable-nonfree --disable-ffplay --disable-ffprobe --enable-libopencore-amrnb --enable-libopencore-amrwb
make
make install
echo '手动编译完成,恭喜!'
#指示如何配置环境路径
dir=$(pwd)
echo "请将 ${dir}/ffmpeg 添加到登录过的云崽的config/config/bot.yaml的ffmpeg_path中,建议通过锅巴登录进行添加"
echo '可根据需要改变环境变量'
else
echo 'ffmpeg已安装'
fi
echo '本脚本已安装云崽本体及主要插件包,按自己需要删减'
echo "脚本结束,恭喜你部署完成!"
写了这么多但可能很多判断压根不需要,如果由于插件依赖的安装导致掉了其他依赖可根据node app的报错提示重新安装即可!
这样写的太慢啦果然还是不熟练