🗡v2p.sh &🔨

This commit is contained in:
Leon 2021-08-06 22:00:14 +08:00
parent c8b8e5a01c
commit 93d4156405
3 changed files with 308 additions and 10 deletions

View File

@ -18,7 +18,7 @@ JD_PATH=""
SHELL_FOLDER=$(pwd)
CONTAINER_NAME=""
TAG="latest"
NETWORK="host"
NETWORK="bridge"
JD_PORT=5700
NINJA_PORT=5701
@ -145,11 +145,11 @@ if [ "$watchtower" = "1" ]; then
INSTALL_WATCH=true
fi
inp "请选择容器的网络类型:\n1) host[默认]\n2) bridge"
inp "请选择容器的网络类型:\n1) host\n2) bridge[默认]"
echo -n -e "\e[36m输入您的选择->\e[0m"
read net
if [ "$net" = "2" ]; then
NETWORK="bridge"
if [ "$net" = "1" ]; then
NETWORK="host"
CHANGE_NETWORK="--network $NETWORK"
else
CHANGE_NETWORK="--network $NETWORK"

298
Scripts/sh/v2p.sh Normal file
View File

@ -0,0 +1,298 @@
#!/usr/bin/env bash
clear
echo -e "\e[34m
mmmm mm mm mmmmm mmmmmm
\"\"## \"## ##\" #\"\"\"\"##m ##\"\"\"\"#m
m####m ## m####m m#####m ## ## ## ## ##
##mmmm## ## ##mmmm## ##\" \" ## ## m#\" ######\"
##\"\"\"\"\"\" ## ##\"\"\"\"\"\" ## #### m#\" ##
\"##mmmm# ##mmm \"##mmmm# \"##mmmm# #### m##mmmmm ##
\"\"\"\"\" \"\"\"\" \"\"\"\"\" \"\"\"\"\" \"\"\"\" \"\"\"\"\"\"\"\" \"\"
\e[0m
"
DOCKER_IMG_NAME="elecv2/elecv2p"
V2P_PATH=""
SHELL_FOLDER=$(pwd)
CONTAINER_NAME=""
TAG=""
NETWORK="bridge"
V2P_PORT=8100 # webUI 后台管理界面。添加规则/JS 文件管理/定时任务管理/MITM 证书等
HTTP_PORT=8101 # ANYPROXY HTTP 代理端口。(代理端口不是网页,不能通过浏览器直接访问)
REQUEST_PORT=8102 # ANYPROXY 代理请求查看端口
HAS_IMAGE=false
EXT_ALL=true
PULL_IMAGE=true
HAS_CONTAINER=false
DEL_CONTAINER=true
INSTALL_WATCH=false
OLD_IMAGE_ID=""
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 "\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 v2p_path
if [ -z "$v2p_path" ]; then
V2P_PATH=$SHELL_FOLDER
elif [ -d "$v2p_path" ]; then
V2P_PATH=$v2p_path
else
mkdir -p $v2p_path
V2P_PATH=$v2p_path
fi
JSFile_PATH=$V2P_PATH/elecv2p/JSFile
LISTS_PATH=$V2P_PATH/elecv2p/Lists
STORE_PATH=$V2P_PATH/elecv2p/Store
SHELL_PATH=$V2P_PATH/elecv2p/Shell
ROOTCA_PATH=$V2P_PATH/elecv2p/rootCA
EFSS_PATH=$V2P_PATH/elecv2p/efss
}
docker_install
warn "小白基本回车即可,更多学习内容尽在 https://github.com/elecV2/elecV2P"
inp "是否为 arm 架构系统:\n1) x86/x64等[默认]\n2arm64\n3arm32"
echo -n -e "\e[36m输入您的选择->\e[0m"
read architecture
architecture=${image:-'1'}
if [ "$architecture" = "2" ]; then
TAG=":arm64"
elif [ "$architecture" = "3" ]; then
TAG=":arm32"
fi
inp "是否将目录映射到外部:\n1) 映射[默认]\n2) 不映射"
echo -n -e "\e[36m输入您的选择->\e[0m"
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) 不拉取"
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 容器名称[默认为elecv2p]->\e[0m"
read container_name
if [ -z "$container_name" ]; then
CONTAINER_NAME="elecv2p"
else
CONTAINER_NAME=$container_name
fi
check_container_name
}
input_container_name
# 是否安装 WatchTower
inp "是否安装 containrrr/watchtower 自动更新 Docker 容器:\n1) 安装\n2) 不安装[默认]"
echo -n -e "\e[36m输入您的选择->\e[0m"
read watchtower
if [ "$watchtower" = "1" ]; then
INSTALL_WATCH=true
fi
inp "请选择容器的网络类型:\n1) host\n2) bridge[默认]"
echo -e "\e[31m如果在部分复杂的网络情况下出现无法联网或访问的问题尝试在命令中添加 --net=host即选择 host 模式\e[0m\n"
echo -n -e "\e[36m输入您的选择->\e[0m"
read net
if [ "$net" = "1" ]; then
NETWORK="host"
CHANGE_NETWORK="--network $NETWORK"
else
CHANGE_NETWORK="--network $NETWORK"
fi
inp "是否修改端口[默认 8100|8101|8102]\n1) 修改\n2) 不修改[默认]"
echo -n -e "\e[36m输入您的选择->\e[0m"
read change_port
if [ "$change_port" = "1" ]; then
echo -n -e "\e[36m输入您想修改的 webUI 端口->\e[0m"
read V2P_PORT
echo -n -e "\e[36m输入您想修改的代理端口->\e[0m"
read HTTP_PORT
echo -n -e "\e[36m输入您想修改的代理请求查看端口->\e[0m"
read REQUEST_PORT
fi
# 配置已经创建完成,开始执行
if [ $EXT_ALL = true ]; then
log "1.开始创建配置文件目录"
PATH_LIST=($JSFILE_PATH $LISTS_PATH $STORE_PATH $SHELL_PATH $ROOTCA_PATH $EFSS_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
# 端口存在检测
check_port() {
echo "正在检测端口:$1"
netstat -tlpn | grep "\b$1\b"
}
if [ "$port" != "2" ]; then
while check_port $V2P_PORT; do
echo -n -e "\e[31m端口:$V2P_PORT 被占用,请重新输入 webUI 端口:\e[0m"
read V2P_PORT
done
echo -e "\e[34m恭喜端口:$V2P_PORT 可用\e[0m"
while check_port $HTTP_PORT; do
echo -n -e "\e[31m端口:$HTTP_PORT 被占用,请重新输入代理端口:\e[0m"
read HTTP_PORT
done
echo -e "\e[34m恭喜端口:$HTTP_PORT 可用\e[0m"
while check_port $REQUEST_PORT; do
echo -n -e "\e[31m端口:$REQUEST_PORT 被占用,请重新输入代理请求端口:\e[0m"
read REQUEST_PORT
done
echo -e "\e[34m恭喜端口:$REQUEST_PORT 可用\e[0m"
fi
log "3.开始创建容器并执行"
run_v(){
docker run -dit \
-t \
-e TZ=Asia/Shanghai \
-p $V2P_PORT:80 \
-p $HTTP_PORT:8001 \
-p $REQUEST_PORT:8002 \
-v $JSFILE_PATH:/usr/local/app/script/JSFile \
-v $LISTS_PATH:/usr/local/app/script/Lists \
-v $STORE_PATH:/usr/local/app/script/Store \
-v $SHELL_PATH:/usr/local/app/script/Shell \
-v $ROOTCA_PATH:/usr/local/app/rootCA \
-v $EFSS_PATH:/usr/local/app/efss \
--name $CONTAINER_NAME \
--restart always \
$CHANGE_NETWORK \
$DOCKER_IMG_NAME$TAG
}
run_nov(){
docker run -dit \
-t \
-e TZ=Asia/Shanghai \
-p $V2P_PORT:80 \
-p $HTTP_PORT:8001 \
-p $REQUEST_PORT:8002 \
--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
log "4.下面列出所有容器"
docker ps
log "enjoy!!!"

View File

@ -20,7 +20,7 @@ JD_PATH=""
SHELL_FOLDER=$(pwd)
CONTAINER_NAME=""
TAG="v4_bot"
NETWORK="host"
NETWORK="bridge"
JD_PORT=5678
HAS_IMAGE=false
@ -97,7 +97,7 @@ 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 "选择你想拉取的 V4 镜像:\n1) annyooo/jd[默认]\n2) jiulan/jd:test备份 nevinee/jd:v4\n3jiulan/jd:v4"
inp "选择你想拉取的 V4 镜像:\n1) annyooo/jd[默认]\n2) jiulan/jd:test备份 nevinee/jd:v4\n3) jiulan/jd:v4"
echo -n -e "\e[36m输入您的选择->\e[0m"
read image
image=${image:-'1'}
@ -158,17 +158,17 @@ input_container_name
# 是否安装 WatchTower
inp "是否安装 containrrr/watchtower 自动更新 Docker 容器:\n1) 安装\n2) 不安装[默认]"
echo -n -e "\e[33m输入您的选择->\e[0m"
echo -n -e "\e[36m输入您的选择->\e[0m"
read watchtower
if [ "$watchtower" = "1" ]; then
INSTALL_WATCH=true
fi
inp "请选择容器的网络类型:\n1) host[默认]\n2) bridge"
inp "请选择容器的网络类型:\n1) host\n2) bridge[默认]"
echo -n -e "\e[36m输入您的选择->\e[0m"
read net
if [ "$net" = "2" ]; then
NETWORK="bridge"
if [ "$net" = "1" ]; then
NETWORK="host"
CHANGE_NETWORK="--network $NETWORK"
else
CHANGE_NETWORK="--network $NETWORK"