diff --git a/install/DockerProxy_Install.sh b/install/DockerProxy_Install.sh index 953bedd..400592f 100644 --- a/install/DockerProxy_Install.sh +++ b/install/DockerProxy_Install.sh @@ -85,10 +85,13 @@ cd "${PROXY_DIR}" GITRAW="https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main" CNGITRAW="https://gitee.com/boydqz/Docker-Proxy/raw/main" - +# docker registry IMAGE_NAME="dqzboy/registry" UI_IMAGE_NAME="dqzboy/docker-registry-ui" DOCKER_COMPOSE_FILE="docker-compose.yaml" +# HubCMD-UI +CMDUI_IMAGE_NAME="dqzboy/hubcmd-ui" +CMDUI_COMPOSE_FILE="${GITRAW}/hubcmdui/${DOCKER_COMPOSE_FILE}" attempts=0 maxAttempts=3 @@ -1669,8 +1672,6 @@ while true; do done } - - function PROMPT(){ PUBLIC_IP=$(curl -s https://ifconfig.me) ALL_IPS=$(hostname -I) @@ -1694,7 +1695,6 @@ INFO INFO "================================================================" } - function INSTALL_PROXY() { ALL_IN_ONE() { CHECK_OS @@ -1760,17 +1760,150 @@ case $proxy_install in esac } +function REMOVE_CMDUI() { + if [ -d "${CMDUI_DIR}" ]; then + if [ -f "${CMDUI_DIR}/${DOCKER_COMPOSE_FILE}" ]; then + INFO "停止和移除HubCMD-UI容器" + docker-compose -f "${CMDUI_DIR}/${DOCKER_COMPOSE_FILE}" down --remove-orphans + rm -rf "${CMDUI_DIR}" + else + WARN "${LIGHT_YELLOW}文件${CMDUI_DIR}/${DOCKER_COMPOSE_FILE} 不存在,无需进行删除操作!${RESET}" + fi + else + WARN "${LIGHT_YELLOW}目录 ${CMDUI_DIR} 不存在,无需进行删除操作!${RESET}" + fi + + docker images | grep "^${CMDUI_IMAGE_NAME}.*" | awk '{print $3}' | xargs -r docker rmi + + images=$(docker images ${CMDUI_IMAGE_NAME} --format '{{.Repository}}:{{.Tag}}') + latest=$(echo "$images" | sort -V | tail -n1) + for image in $images; do + if [ "$image" != "$latest" ]; then + docker rmi $image + fi + done + + # 强制移除所有相关镜像 + docker rmi --force $(docker images -q ${CMDUI_IMAGE_NAME}) &>/dev/null +} + + +function HUBCMDUI() { +CMDUI_NAME="hubcmd-ui" +CMDUI_DIR="${PROXY_DIR}/hubcmdui" + +CMDUI_PROMPT() { +PUBLIC_IP=$(curl -s https://ifconfig.me) +ALL_IPS=$(hostname -I) +INTERNAL_IP=$(echo "$ALL_IPS" | awk '$1!="127.0.0.1" && $1!="::1" && $1!="docker0" {print $1}') + +echo +INFO "=================感谢您的耐心等待,安装已经完成==================" +INFO +INFO "请用浏览器访问 HubCMD-UI 面板: " +INFO "公网访问地址: ${UNDERLINE}http://$PUBLIC_IP:30080${RESET}" +INFO "内网访问地址: ${UNDERLINE}http://$INTERNAL_IP:30080${RESET}" +INFO +INFO "后端访问地址: 地址后面跟admin,例: ${UNDERLINE}http://$INTERNAL_IP/admin:30080${RESET}" +INFO "默认账号密码: ${LIGHT_GREEN}root${RESET}/${LIGHT_CYAN}admin${RESET}" +INFO +INFO "服务安装路径: ${LIGHT_BLUE}${CMDUI_DIR}${RESET}" +INFO +INFO "作者博客: https://dqzboy.com" +INFO "技术交流: https://t.me/dqzboyblog" +INFO "代码仓库: https://github.com/dqzboy/Docker-Proxy" +INFO +INFO "================================================================" +} + +INSTALL_HUBCMDUI() { + mkdir -p ${CMDUI_DIR} + + INFO "正在安装HubCMD-UI服务,请稍等!安装路径 ${LIGHT_CYAN}${CMDUI_DIR}${RESET}" + + if [[ -f "${CMDUI_DIR}/${DOCKER_COMPOSE_FILE}" ]]; then + if docker-compose ps --services 2>/dev/null | grep -q "^${CMDUI_NAME}$"; then + INFO "${CMDUI_NAME} 已经安装并启动,无需重复执行安装!" + else + docker-compose -f "${CMDUI_DIR}/${DOCKER_COMPOSE_FILE}" up -d + fi + else + wget -NP ${CMDUI_DIR}/ ${CMDUI_COMPOSE_FILE} &>/dev/null + if [ $? -ne 0 ]; then + WARN "下载${LIGHT_YELLOW}docker-compose.yaml 文件失败${RESET},请稍后重试!" + HUBCMDUI + fi + docker-compose -f "${CMDUI_DIR}/${DOCKER_COMPOSE_FILE}" up -d + if [ $? -eq 0 ]; then + CMDUI_PROMPT + exit 1 + else + WARN "服务安装失败,请稍后重试!" + HUBCMDUI + fi + fi +} + +UNINSTALL_HUBCMDUI() { +WARN "${LIGHT_RED}注意:${RESET} ${LIGHT_YELLOW}请执行删除之前确定是否需要备份配置文件${RESET}" +while true; do + read -e -p "$(INFO "本人${LIGHT_RED}已知晓后果,确认删除${RESET}服务? ${PROMPT_YES_NO}")" delcmdui + case "$delcmdui" in + y|Y ) + REMOVE_CMDUI + break;; + n|N ) + WARN "退出执行卸载服务" + break;; + * ) + INFO "请输入 ${LIGHT_GREEN}y${RESET} 或 ${LIGHT_YELLOW}n${RESET}";; + esac +done +} + + +SEPARATOR "HubCMD-UI管理" +echo -e "1) ${BOLD}${LIGHT_GREEN}安装${RESET}HubCMD-UI" +echo -e "2) ${BOLD}${LIGHT_YELLOW}卸载${RESET}HubCMD-UI" +echo -e "3) ${BOLD}返回${LIGHT_RED}主菜单${RESET}" +echo -e "0) ${BOLD}退出脚本${RESET}" +echo "---------------------------------------------------------------" +read -e -p "$(INFO "输入${LIGHT_CYAN}对应数字${RESET}并按${LIGHT_GREEN}Enter${RESET}键 > ")" cmdui_choice + +case $cmdui_choice in + 1) + INSTALL_HUBCMDUI + HUBCMDUI + ;; + 2) + UNINSTALL_HUBCMDUI + HUBCMDUI + ;; + 3) + main_menu + ;; + 0) + exit 1 + ;; + *) + WARN "输入了无效的选择。请重新${LIGHT_GREEN}选择0-8${RESET}的选项." + HUBCMDUI + ;; +esac +} + function COMP_INST() { SEPARATOR "安装组件" echo -e "1) ${BOLD}安装${LIGHT_GREEN}环境依赖${RESET}" -echo -e "2) ${BOLD}安装${LIGHT_GREEN}Docker${RESET}" +echo -e "2) ${BOLD}安装${LIGHT_CYAN}Docker${RESET}" echo -e "3) ${BOLD}安装${LIGHT_MAGENTA}Compose${RESET}" echo -e "4) ${BOLD}安装${GREEN}Nginx${RESET}" -echo -e "5) ${BOLD}安装${LIGHT_CYAN}Caddy${RESET}" +echo -e "5) ${BOLD}安装${LIGHT_BLUE}Caddy${RESET}" echo -e "6) ${BOLD}配置${LIGHT_YELLOW}Nginx${RESET}" echo -e "7) ${BOLD}配置${CYAN}Caddy${RESET}" -echo -e "8) ${BOLD}返回${LIGHT_RED}主菜单${RESET}" +echo -e "8) ${BOLD}安装${BLUE}HubCMD-UI${RESET}" +echo -e "9) ${BOLD}返回${LIGHT_RED}主菜单${RESET}" echo -e "0) ${BOLD}退出脚本${RESET}" echo "---------------------------------------------------------------" read -e -p "$(INFO "输入${LIGHT_CYAN}对应数字${RESET}并按${LIGHT_GREEN}Enter${RESET}键 > ")" comp_choice @@ -1846,6 +1979,10 @@ case $comp_choice in COMP_INST ;; 8) + HUBCMDUI + COMP_INST + ;; + 9) main_menu ;; 0) @@ -2332,6 +2469,7 @@ fi RM_ALLSERVICE() { STOP_REMOVE_CONTAINER REMOVE_NONE_TAG +REMOVE_CMDUI docker rmi --force $(docker images -q ${IMAGE_NAME}) &>/dev/null docker rmi --force $(docker images -q ${UI_IMAGE_NAME}) &>/dev/null if [ -d "${PROXY_DIR}" ]; then