yanyuyijian/Scripts/sh/ql.sh
2021-08-03 14:25:28 +08:00

300 lines
8.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
clear
echo -e "\033[36m
▄▄▄▄ ██ ▄▄▄▄
██▀▀██ ▀▀ ▀▀██
██ ██ ████ ██▄████▄ ▄███▄██ ██ ▄████▄ ██▄████▄ ▄███▄██
██ ██ ██ ██▀ ██ ██▀ ▀██ ██ ██▀ ▀██ ██▀ ██ ██▀ ▀██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██▄▄██▀ ▄▄▄██▄▄▄ ██ ██ ▀██▄▄███ ██▄▄▄ ▀██▄▄██▀ ██ ██ ▀██▄▄███
▀▀▀██ ▀▀▀▀▀▀▀▀ ▀▀ ▀▀ ▄▀▀▀ ██ ▀▀▀▀ ▀▀▀▀ ▀▀ ▀▀ ▄▀▀▀ ██
▀ ▀████▀▀ ▀████▀▀
"
DOCKER_IMG_NAME="whyour/qinglong"
JD_PATH=""
SHELL_FOLDER=$(pwd)
CONTAINER_NAME=""
TAG="latest"
NETWORK="host"
JD_PORT=5700
NINJA_PORT=5701
HAS_IMAGE=false
PULL_IMAGE=true
HAS_CONTAINER=false
DEL_CONTAINER=true
INSTALL_WATCH=false
ENABLE_WEB_PANEL=true
ENABLE_HANGUP=true
OLD_IMAGE_ID=""
ENABLE_HANGUP_ENV="--env ENABLE_HANGUP=true"
ENABLE_WEB_PANEL_ENV="--env ENABLE_WEB_PANEL=true"
log() {
echo -e "\e[32m$1 \e[0m\n"
}
inp() {
echo -e "\e[33m\n$1 \e[0m\n"
}
warn() {
echo -e "\e[31m$1 \e[0m\n"
}
cancelrun() {
if [ $# -gt 0 ]; then
echo "\033[31m $1 \033[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 "降低学习成本,小白回车到底,一路默认选择"
#配置文件目录
echo -n -e "\e[33m一.请输入配置文件保存的绝对路径(示例:/root),直接回车为当前目录:\e[0m"
read jd_path
JD_PATH=$jd_path
if [ -z "$jd_path" ]; then
JD_PATH=$SHELL_FOLDER
fi
CONFIG_PATH=$JD_PATH/ql/config
DB_PATH=$JD_PATH/ql/db
REPO_PATH=$JD_PATH/ql/repo
RAW_PATH=$JD_PATH/ql/raw
SCRIPT_PATH=$JD_PATH/ql/scripts
LOG_PATH=$JD_PATH/ql/log
JBOT_PATH=$JD_PATH/ql/jbot
NINJA_PATH=$JD_PATH/ql/ninja
#检测镜像是否存在
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三.请输入要创建的Docker容器名称[默认为qinglong]->\e[0m"
read container_name
if [ -z "$container_name" ]; then
CONTAINER_NAME="qinglong"
else
CONTAINER_NAME=$container_name
fi
check_container_name
}
input_container_name
#是否安装WatchTower
inp "5.是否安装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 "是否启用青龙面板:\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
#配置已经创建完成,开始执行
log "1.开始创建配置文件目录"
[ ! -d $CONFIG_PATH ] && mkdir -p
[ ! -d $DB_PATH ] && mkdir -p
[ ! -d $REPO_PATH ] && mkdir -p
[ ! -d $RAW_PATH ] && mkdir -p
[ ! -d $SCRIPT_PATH ] && mkdir -p
[ ! -d $LOG_PATH ] && mkdir -p
[ ! -d $JBOT_PATH ] && mkdir -p
[ ! -d $NINJA_PATH ] && mkdir -p
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
log "3.开始创建容器并执行"
run_port(){
docker run -dit \
-t \
-v $CONFIG_PATH:/ql/config \
-v $DB_PATH:/ql/db \
-v $LOG_PATH:/ql/log \
-v $REPO_PATH:/ql/repo \
-v $RAW_PATH:/ql/raw \
-v $SCRIPT_PATH:/ql/scripts \
-v $JBOT_PATH:/ql/jbot \
-v $NINJA_PATH:/ql/ninja \
-p $JD_PORT:5700 \
-p $NINJA_PORT:5701 \
--name $CONTAINER_NAME \
--hostname qinglong \
--restart always \
$ENABLE_HANGUP_ENV \
$ENABLE_WEB_PANEL_ENV \
$DOCKER_IMG_NAME:$TAG
}
run_noport(){
docker run -dit \
-t \
-v $CONFIG_PATH:/ql/config \
-v $DB_PATH:/ql/db \
-v $LOG_PATH:/ql/log \
-v $REPO_PATH:/ql/repo \
-v $RAW_PATH:/ql/raw \
-v $SCRIPT_PATH:/ql/scripts \
-v $JBOT_PATH:/ql/jbot \
-v $NINJA_PATH:/ql/ninja \
--name $CONTAINER_NAME \
--hostname qinglong \
--restart always \
--network $NETWORK \
$ENABLE_HANGUP_ENV \
$ENABLE_WEB_PANEL_ENV \
$DOCKER_IMG_NAME:$TAG
}
if [ "$port" = "2" ]; then
run_noport
else
run_port
fi
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:/ql/sample/config.sample.sh $CONFIG_PATH/config.sh
if [ $? -ne 0 ] ; then
cancelrun "** 错误: 找不到配置文件!"
fi
fi
log "4.下面列出所有容器"
docker ps
#Nginx静态解析检测
log "5.开始检测Nginx静态解析"
echo "开始扫描静态解析是否在线!"
ps -fe|grep nginx|grep -v grep
if [ $? -ne 0 ]; then
echo $NOWTIME" 扫描结束Nginx静态解析停止了准备重启"
docker exec -it $CONTAINER_NAME nginx -c /etc/nginx/nginx.conf
echo $NOWTIME" Nginx静态解析重启完成"
else
echo $NOWTIME" 扫描结束Nginx静态解析正常呢"
fi
if [ "$port" = "2" ]; then
log "6.安装已经完成,请自行调整端口映射并进入面板一次以便进行内部配置"
else
log "6.安装已经完成,请进入面板一次以便进行内部配置"
fi
sleep 20
if [ "$(grep -c "token" $CONFIG_PATH/auth.json)" != 0 ]; then
log "7.下面开始青龙内部配置"
docker exec -it $CONTAINER_NAME bash -c "$(curl -fsSL https://gitee.com/allin1code/a1/raw/master/1customCDN.sh)"
else
warn "7.未检测到 token不进行内部配置"
fi
log "🎉全面部署已完成enjoy!!!"