🗡hhl.sh
This commit is contained in:
parent
a04f874294
commit
2eb319c29e
259
Scripts/sh/hhl.sh
Normal file
259
Scripts/sh/hhl.sh
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
echo "
|
||||||
|
|
||||||
|
▄▄ ▄▄ ▄▄ ▄▄ ▄▄
|
||||||
|
██ ██ ██ ██ ██
|
||||||
|
██ ██ ██ ██ ██
|
||||||
|
████████ ████████ ██
|
||||||
|
██ ██ ██ ██ ██
|
||||||
|
██ ██ ██ ██ ██▄▄▄▄▄▄
|
||||||
|
|
||||||
|
"
|
||||||
|
|
||||||
|
DOCKER_IMG_NAME="classmatelin/hhl"
|
||||||
|
JD_PATH=""
|
||||||
|
SHELL_FOLDER=$(pwd)
|
||||||
|
CONTAINER_NAME=""
|
||||||
|
TAG="latest"
|
||||||
|
NETWORK="bridge"
|
||||||
|
|
||||||
|
HAS_IMAGE=false
|
||||||
|
EXT_ALL=true
|
||||||
|
PULL_IMAGE=true
|
||||||
|
HAS_CONTAINER=false
|
||||||
|
DEL_CONTAINER=true
|
||||||
|
INSTALL_WATCH=false
|
||||||
|
ENABLE_WEB_PANEL=true
|
||||||
|
ENABLE_HANGUP=true
|
||||||
|
OLD_IMAGE_ID=""
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo -e "\e[32m\n$1 \e[0m\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
inp() {
|
||||||
|
echo -e "\e[33m\n$1 \e[0m\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
opt(){
|
||||||
|
echo -n -e "\e[36m输入您的选择->\e[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
warn() {
|
||||||
|
echo -e "\e[31m$1 \e[0m\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
cancelrun() {
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
echo -e "\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
|
||||||
|
}
|
||||||
|
|
||||||
|
# 配置文件保存目录
|
||||||
|
set_savedir(){
|
||||||
|
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
|
||||||
|
CONF_PATH=$JD_PATH/hhl/conf
|
||||||
|
LOG_PATH=$JD_PATH/hhl/logs
|
||||||
|
SHELL_PATH=$JD_PATH/hhl/shell
|
||||||
|
TOOL_PATH=$JD_PATH/hhl/tools
|
||||||
|
}
|
||||||
|
|
||||||
|
docker_install
|
||||||
|
warn "项目地址:https://github.com/ClassmateLin/jd_scripts"
|
||||||
|
|
||||||
|
inp "选择你想拉取的 hhl 镜像:\n1) classmatelin/hhl[默认]\n2) classmatelin/hhl-n1"
|
||||||
|
opt
|
||||||
|
read image
|
||||||
|
if [ "$image" = "2" ]; then
|
||||||
|
DOCKER_IMG_NAME="classmatelin/hhl-n1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
inp "是否将目录映射到外部:\n1) 映射[默认]\n2) 不映射"
|
||||||
|
opt
|
||||||
|
read ext_all
|
||||||
|
if [ "$ext_all" = "2" ]; then
|
||||||
|
EXT_ALL=false
|
||||||
|
else
|
||||||
|
set_savedir
|
||||||
|
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) 不拉取"
|
||||||
|
opt
|
||||||
|
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) 不删除"
|
||||||
|
opt
|
||||||
|
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 容器名称[默认为:hhl]->\e[0m"
|
||||||
|
read container_name
|
||||||
|
if [ -z "$container_name" ]; then
|
||||||
|
CONTAINER_NAME="hhl"
|
||||||
|
else
|
||||||
|
CONTAINER_NAME=$container_name
|
||||||
|
fi
|
||||||
|
check_container_name
|
||||||
|
}
|
||||||
|
input_container_name
|
||||||
|
|
||||||
|
# 是否安装 WatchTower
|
||||||
|
inp "是否安装 containrrr/watchtower 自动更新 Docker 容器:\n1) 安装\n2) 不安装[默认]"
|
||||||
|
opt
|
||||||
|
read watchtower
|
||||||
|
if [ "$watchtower" = "1" ]; then
|
||||||
|
INSTALL_WATCH=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
inp "请选择容器的网络类型:\n1) host\n2) bridge[默认]"
|
||||||
|
opt
|
||||||
|
read net
|
||||||
|
if [ "$net" = "1" ]; then
|
||||||
|
NETWORK="host"
|
||||||
|
CHANGE_NETWORK="--network $NETWORK"
|
||||||
|
else
|
||||||
|
CHANGE_NETWORK="--network $NETWORK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 配置已经创建完成,开始执行
|
||||||
|
if [ $EXT_ALL = true ]; then
|
||||||
|
log "1.开始创建配置文件目录"
|
||||||
|
PATH_LIST=($CONF_PATH $LOG_PATH $SHELL_PATH $TOOL_PATH)
|
||||||
|
for i in ${PATH_LIST[@]}; do
|
||||||
|
mkdir -p $i
|
||||||
|
done
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
cancelrun "** 错误:目录创建错误请重试!"
|
||||||
|
fi
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
log "3.开始创建容器并执行"
|
||||||
|
run_v(){
|
||||||
|
docker run -dit \
|
||||||
|
-t \
|
||||||
|
-v $CONF_PATH:/scripts/conf \
|
||||||
|
-v $LOG_PATH:/scripts/logs \
|
||||||
|
-v $SHELL_PATH:/scripts/shell \
|
||||||
|
-v $TOOL_PATH:/scripts/tools \
|
||||||
|
--name $CONTAINER_NAME \
|
||||||
|
--restart always \
|
||||||
|
$CHANGE_NETWORK \
|
||||||
|
$DOCKER_IMG_NAME:$TAG
|
||||||
|
}
|
||||||
|
run_nov(){
|
||||||
|
docker run -dit \
|
||||||
|
-t \
|
||||||
|
--name $CONTAINER_NAME \
|
||||||
|
--restart always \
|
||||||
|
$CHANGE_NETWORK \
|
||||||
|
$DOCKER_IMG_NAME:$TAG
|
||||||
|
}
|
||||||
|
if [ $EXT_ALL = true ]; then
|
||||||
|
run_v
|
||||||
|
else
|
||||||
|
run_nov
|
||||||
|
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 "$CODE_DIR/conf/config.yaml" ]; then
|
||||||
|
docker cp $CONTAINER_NAME:/scripts/conf/config.yaml $CONFIG_PATH/config.yaml
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
cancelrun "** 错误:找不到配置文件!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "4.下面列出所有容器"
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
log "5.薅薅乐使用说明:https://github.com/ClassmateLin/jd_scripts#readme"
|
||||||
|
|
||||||
|
|
||||||
|
log "enjoy!!!"
|
||||||
@ -17,7 +17,7 @@ DOCKER_IMG_NAME="elecv2/elecv2p"
|
|||||||
V2P_PATH=""
|
V2P_PATH=""
|
||||||
SHELL_FOLDER=$(pwd)
|
SHELL_FOLDER=$(pwd)
|
||||||
CONTAINER_NAME=""
|
CONTAINER_NAME=""
|
||||||
TAG=""
|
TAG="latest"
|
||||||
NETWORK="bridge"
|
NETWORK="bridge"
|
||||||
V2P_PORT=8100 # webUI 后台管理界面。添加规则/JS 文件管理/定时任务管理/MITM 证书等
|
V2P_PORT=8100 # webUI 后台管理界面。添加规则/JS 文件管理/定时任务管理/MITM 证书等
|
||||||
HTTP_PORT=8101 # ANYPROXY HTTP 代理端口。(代理端口不是网页,不能通过浏览器直接访问)
|
HTTP_PORT=8101 # ANYPROXY HTTP 代理端口。(代理端口不是网页,不能通过浏览器直接访问)
|
||||||
@ -104,9 +104,9 @@ opt
|
|||||||
read architecture
|
read architecture
|
||||||
architecture=${image:-'1'}
|
architecture=${image:-'1'}
|
||||||
if [ "$architecture" = "2" ]; then
|
if [ "$architecture" = "2" ]; then
|
||||||
TAG=":arm64"
|
TAG="arm64"
|
||||||
elif [ "$architecture" = "3" ]; then
|
elif [ "$architecture" = "3" ]; then
|
||||||
TAG=":arm32"
|
TAG="arm32"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
inp "是否将目录映射到外部:\n1) 映射[默认]\n2) 不映射"
|
inp "是否将目录映射到外部:\n1) 映射[默认]\n2) 不映射"
|
||||||
@ -260,7 +260,7 @@ run_v(){
|
|||||||
--name $CONTAINER_NAME \
|
--name $CONTAINER_NAME \
|
||||||
--restart always \
|
--restart always \
|
||||||
$CHANGE_NETWORK \
|
$CHANGE_NETWORK \
|
||||||
$DOCKER_IMG_NAME$TAG
|
$DOCKER_IMG_NAME:$TAG
|
||||||
}
|
}
|
||||||
run_nov(){
|
run_nov(){
|
||||||
docker run -dit \
|
docker run -dit \
|
||||||
@ -272,7 +272,7 @@ run_nov(){
|
|||||||
--name $CONTAINER_NAME \
|
--name $CONTAINER_NAME \
|
||||||
--restart always \
|
--restart always \
|
||||||
$CHANGE_NETWORK \
|
$CHANGE_NETWORK \
|
||||||
$DOCKER_IMG_NAME$TAG
|
$DOCKER_IMG_NAME:$TAG
|
||||||
}
|
}
|
||||||
if [ $EXT_ALL = true ]; then
|
if [ $EXT_ALL = true ]; then
|
||||||
run_v
|
run_v
|
||||||
|
|||||||
@ -101,7 +101,7 @@ OWN_PATH=$JD_PATH/v4/own
|
|||||||
SCRIPT_PATH=$JD_PATH/v4/scripts
|
SCRIPT_PATH=$JD_PATH/v4/scripts
|
||||||
DIY_PATH=$JD_PATH/v4/diy
|
DIY_PATH=$JD_PATH/v4/diy
|
||||||
|
|
||||||
inp "选择你想拉取的 V4 镜像:\n1) annyooo/jd[默认]\n2) jiulan/jd:test(备份 nevinee/jd:v4)\n3) jiulan/jd:v4\n4) jiulan/jd:v4_arm64"
|
inp "选择你想拉取的 V4 镜像:\n1) annyooo/jd:v4_bot[默认]\n2) jiulan/jd:test(备份 nevinee/jd:v4)\n3) jiulan/jd:v4\n4) jiulan/jd:v4_arm64"
|
||||||
opt
|
opt
|
||||||
read image
|
read image
|
||||||
image=${image:-'1'}
|
image=${image:-'1'}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user