🗡v4.sh & 🔨ql.sh

This commit is contained in:
Leon 2021-08-05 08:44:28 +08:00
parent 7cb051c75e
commit f8c766302e
2 changed files with 320 additions and 1 deletions

View File

@ -170,7 +170,7 @@ echo -n -e "\e[36m输入您的选择->\e[0m"
read port
#配置已经创建完成,开始执行
# 配置已经创建完成,开始执行
log "1.开始创建配置文件目录"
PATH_LIST=($CONFIG_PATH $DB_PATH $REPO_PATH $RAW_PATH $SCRIPT_PATH $LOG_PATH $JBOT_PATH $NINJA_PATH)
for i in ${PATH_LIST[@]}; do

319
Scripts/sh/v4.sh Normal file
View File

@ -0,0 +1,319 @@
#!/bin/sh
# source: https://github.com/Annyoo2021/jd_v4_bot
clear
echo "
██╗██████╗ ██████╗ ██████╗ ██████╗██╗ ██╗███████╗██████╗ ██╗ ██╗██╗ ██╗
██║██╔══██╗ ██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗ ██║ ██║██║ ██║
██║██║ ██║ ██║ ██║██║ ██║██║ █████╔╝ █████╗ ██████╔╝ ██║ ██║███████║
██ ██║██║ ██║ ██║ ██║██║ ██║██║ ██╔═██╗ ██╔══╝ ██╔══██╗ ╚██╗ ██╔╝╚════██║
╚█████╔╝██████╔╝ ██████╔╝╚██████╔╝╚██████╗██║ ██╗███████╗██║ ██║ ╚████╔╝ ██║
╚════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝
"
DOCKER_IMG_NAME="annyooo/jd"
JD_PATH=""
SHELL_FOLDER=$(pwd)
CONTAINER_NAME=""
CONFIG_PATH=""
LOG_PATH=""
TAG="v4_bot"
NETWORK="host"
JD_PORT=5678
HAS_IMAGE=false
EXT_SCRIPT=true
PULL_IMAGE=true
HAS_CONTAINER=false
DEL_CONTAINER=true
INSTALL_WATCH=false
TEST_BEAN_CHAGE=false
ENABLE_WEB_PANEL=true
ENABLE_HANGUP=true
OLD_IMAGE_ID=""
MOUNT_SCRIPT=""
MAPPING_PORT="-p $JD_PORT:5678"
CHANGE_NETWORK="--network $NETWORK"
ENABLE_HANGUP_ENV="--env ENABLE_HANGUP=true"
ENABLE_BOT_ENV="--env ENABLE_TG_BOT=true"
ENABLE_WEB_PANEL_ENV="--env ENABLE_WEB_PANEL=true"
log() {
echo -e "\e[32m\n$1 \e[0m\n"
}
inp() {
echo -e "\e[33m\n$1 \e[0m\n"
}
warn() {
echo -e "\e[31m\n$1 \e[0m\n"
}
cancelrun() {
if [ $# -gt 0 ]; then
echo "\e[31m $1 \e[0m"
fi
exit 1
}
docker_install() {
echo "检测 Docker......"
if [ -x "$(command -v docker)" ]; then
echo "检测到 Docker 已安装!"
else
if [ -r /etc/os-release ]; then
lsb_dist="$(. /etc/os-release && echo "$ID")"
fi
if [ $lsb_dist == "openwrt" ]; then
echo "openwrt 环境请自行安装 docker"
#exit 1
else
echo "安装 docker 环境..."
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
echo "安装 docker 环境...安装完成!"
systemctl enable docker
systemctl start docker
fi
fi
}
docker_install
warn "一路有我,回车即可,小白福音!!!这是 TG BOT 版!!!"
# 配置文件保存目录
echo -n -e "\e[33m\n一、请输入配置文件保存的绝对路径示例/root),回车默认为当前目录:\e[0m"
read jd_path
if [ -z "$jd_path" ]; then
JD_PATH=$SHELL_FOLDER
elif [ -d "$jd_path" ]; then
JD_PATH=$jd_path
else
mkdir -p $jd_path
JD_PATH=$jd_path
fi
CONFIG_PATH=$JD_PATH/jd_v4_bot/config
LOG_PATH=$JD_PATH/jd_v4_bot/log
OWN_PATH=$JD_PATH/jd_v4_bot/own
SCRIPT_PATH=$JD_PATH/jd_v4_bot/scripts
DIY_PATH=$JD_PATH/jd_v4_bot/diy
inp "是否为 arm64 架构:\n1) x86[默认]\n2) arm64"
echo -n -e "\e[36m输入您的选择->\e[0m"
read Processor_architecture
if [ "$Processor_architecture" = "2" ]; then
TAG="v4_bot_arm64"
fi
inp "是否将 scripts 目录映射到外部:\n1) 映射[默认]\n2) 不映射"
echo -n -e "\e[36m输入您的选择->\e[0m"
read ext_s
if [ "$ext_s" = "2" ]; then
EXT_SCRIPT=false
fi
# 检测镜像是否存在
if [ ! -z "$(docker images -q $DOCKER_IMG_NAME:$TAG 2> /dev/null)" ]; then
HAS_IMAGE=true
OLD_IMAGE_ID=$(docker images -q --filter reference=$DOCKER_IMG_NAME:$TAG)
inp "检测到先前已经存在的镜像,是否拉取最新的镜像:\n1) 拉取[默认]\n2) 不拉取"
echo -n -e "\e[36m输入您的选择->\e[0m"
read update
if [ "$update" = "2" ]; then
PULL_IMAGE=false
fi
fi
# 检测容器是否存在
check_container_name() {
if [ ! -z "$(docker ps -a | grep $CONTAINER_NAME 2> /dev/null)" ]; then
HAS_CONTAINER=true
inp "检测到先前已经存在的容器,是否删除先前的容器:\n1) 删除[默认]\n2) 不删除"
echo -n -e "\e[36m输入您的选择->\e[0m"
read update
if [ "$update" = "2" ]; then
PULL_IMAGE=false
inp "您选择了不删除之前的容器,需要重新输入容器名称"
input_container_name
fi
fi
}
# 容器名称
input_container_name() {
echo -n -e "\e[33m\n二、请输入要创建的 Docker 容器名称[默认为jd_v4_bot]->\e[0m"
read container_name
if [ -z "$container_name" ]; then
CONTAINER_NAME="jd_v4_bot"
else
CONTAINER_NAME=$container_name
fi
check_container_name
}
input_container_name
#是否安装WatchTower
inp "是否安装 containrrr/watchtower 自动更新 Docker 容器:\n1) 安装\n2) 不安装[默认]"
echo -n -e "\e[33m输入您的选择->\e[0m"
read watchtower
if [ "$watchtower" = "1" ]; then
INSTALL_WATCH=true
fi
inp "请选择容器的网络类型:\n1) host[默认]\n2) bridge"
echo -n -e "\e[36m输入您的选择->\e[0m"
read net
if [ "$net" = "2" ]; then
NETWORK="bridge"
fi
inp "是否在启动容器时自动启动挂机程序:\n1) 开启[默认]\n2) 关闭"
echo -n -e "\e[36m输入您的选择->\e[0m"
read hang_s
if [ "$hang_s" = "2" ]; then
ENABLE_HANGUP_ENV=""
fi
inp "是否启用 TG BOT\n1) 启用[默认]\n2) 不启用"
echo -n -e "\e[36m输入您的选择->\e[0m"
read bot
if [ "$bot" = "2" ]; then
ENABLE_BOT_ENV=""
fi
inp "是否启用 V4 面板:\n1) 启用[默认]\n2) 不启用"
echo -n -e "\e[36m输入您的选择->\e[0m"
read pannel
if [ "$pannel" = "2" ]; then
ENABLE_WEB_PANNEL_ENV=""
fi
inp "根据设备是否映射端口:\n1) 映射[默认]\n2) 不映射"
echo -n -e "\e[36m输入您的选择->\e[0m"
read port
if [ "$port" = "2" ]; then
MAPPING_PORT=""
else
CHANGE_NETWORK=""
fi
if [ "$port" != "2" ]; then
inp "是否修改端口:\n1) 修改\n2) 不修改[默认]"
echo -n -e "\e[36m输入您的选择->\e[0m"
read change_port
if [ "$change_port" = "1" ]; then
echo -n -e "\e[36m输入您想修改的端口->\e[0m"
read JD_PORT
MAPPING_PORT="-p $JD_PORT:5678"
fi
fi
# 配置已经创建完成,开始执行
log "1.开始创建配置文件目录"
mkdir -p $CONFIG_PATH
mkdir -p $LOG_PATH
mkdir -p $OWN_PATH
mkdir -p $DIY_PATH
if [ $EXT_SCRIPT = true ]; then
mkdir -p $SCRIPT_PATH
fi
if [ $? -ne 0 ] ; then
cancelrun "** 错误:目录创建错误请重试!"
fi
if [ $HAS_CONTAINER = true ] && [ $DEL_CONTAINER = true ]; then
log "2.1.删除先前的容器"
docker stop $CONTAINER_NAME >/dev/null
docker rm $CONTAINER_NAME >/dev/null
fi
if [ $HAS_IMAGE = true ] && [ $PULL_IMAGE = true ]; then
if [ ! -z "$OLD_IMAGE_ID" ] && [ $HAS_CONTAINER = true ] && [ $DEL_CONTAINER = true ]; then
log "2.2.删除旧的镜像"
docker image rm $OLD_IMAGE_ID
fi
log "2.3.开始拉取最新的镜像"
docker pull $DOCKER_IMG_NAME:$TAG
if [ $? -ne 0 ] ; then
cancelrun "** 错误:拉取不到镜像!"
fi
fi
if [ $EXT_SCRIPT = true ]; then
MOUNT_SCRIPT="-v $SCRIPT_PATH:/jd/scripts"
fi
# 端口存在检测
check_port() {
echo "正在检测端口 $1"
netstat -tlpn | grep "\b$1\b"
}
while check_port $JD_PORT; do
if [ "$port" != "2" ]; then
echo -n -e "\e[31m端口被占用请重新输入 V4 面板端口:\e[0m"
read JD_PORT
else
break
MAPPING_PORT="-p $JD_PORT:5678"
fi
done
log "3.开始创建容器并执行"
docker run -dit \
-t \
-v $CONFIG_PATH:/jd/config \
-v $LOG_PATH:/jd/log \
-v $OWN_PATH:/jd/own \
-v $SCRIPT_PATH:/jd/scripts \
-v $DIY_PATH:/jd/jbot/diy \
$MOUNT_SCRIPT \
$MAPPING_PORT \
--name $CONTAINER_NAME \
--hostname jd_v4_bot \
--restart always \
$CHANGE_NETWORK \
$ENABLE_HANGUP_ENV \
$ENABLE_BOT_ENV \
$ENABLE_WEB_PANEL_ENV \
$DOCKER_IMG_NAME:$TAG
if [ $? -ne 0 ] ; then
cancelrun "** 错误:容器创建失败,多数由于 docker 空间不足引起,请检查!"
fi
if [ $INSTALL_WATCH = true ]; then
log "3.1.开始创建容器并执行"
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c\
--schedule "13,14,15 3 * * * *" \
$CONTAINER_NAME
fi
# 检查config文件是否存在
if [ ! -f "$CONFIG_PATH/config.sh" ]; then
docker cp $CONTAINER_NAME:/jd/sample/config.sample.sh $CONFIG_PATH/config.sh
if [ $? -ne 0 ] ; then
cancelrun "** 错误:找不到配置文件!"
fi
fi
log "4.下面列出所有容器"
docker ps
if [ "$pannel" != "2" ]; then
log "5.开始安装面板"
docker exec $CONTAINER_NAME bash -c "$(curl -fsSL https://raw.githubusercontent.com/Annyoo2021/jd_v4_bot/main/v4mb.sh)"
fi
log "6.安装已经完成。创建好后请阅读映射的 config 目录下的的 config.sh并根据注释修改。"
log "7.如果启用了 ENABLE_TG_BOT创建好后请阅读映射的 config 目录下的的 config.sh 和 bot.json并根据说明修改首次创建并不会启动 bot修改好 bot.json 后请重启容器。"
log "命令提示:\njtask mtask otask 链接的都是同一个脚本m=myo=ownj=jd。三者区分仅用在 crontab.list 中,以区别不同类型任务,手动运行直接 jtask 即可。\ndocker exec $CONTAINER_NAME jtask # 运行 scripts 脚本\ndocker exec $CONTAINER_NAME otask # 运行 own 脚本\ndocker exec $CONTAINER_NAME mtask # 运行你自己的脚本,如果某些 own 脚本识别不出来 cron你也可以自行添加 mtask 任务\ndocker exec $CONTAINER_NAME jlog # 删除旧日志\ndocker exec $CONTAINER_NAME jup # 更新所有脚本\ndocker exec $CONTAINER_NAME jcode # 导出所有互助码\ndocker exec $CONTAINER_NAME jcsv # 记录豆豆变化情况"