diff --git a/Scripts/sh/ql.sh b/Scripts/sh/ql.sh index 0220a42..ce6b653 100644 --- a/Scripts/sh/ql.sh +++ b/Scripts/sh/ql.sh @@ -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" diff --git a/Scripts/sh/v2p.sh b/Scripts/sh/v2p.sh new file mode 100644 index 0000000..d96d572 --- /dev/null +++ b/Scripts/sh/v2p.sh @@ -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等[默认]\n2)arm64\n3)arm32" +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!!!" \ No newline at end of file diff --git a/Scripts/sh/v4.sh b/Scripts/sh/v4.sh index 51093df..d3f17bb 100644 --- a/Scripts/sh/v4.sh +++ b/Scripts/sh/v4.sh @@ -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)\n3)jiulan/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"