#!/bin/bash restart_docker() { # 如果容器未运行,提示启动 local running_count=$(docker-compose -f ./docker-compose.yml ps -q | wc -l) if [ "$running_count" -eq 0 ]; then read -p "容器未启动,是否启动容器?(Y/N): " choice case "$choice" in Y|y) docker-compose -f ./docker-compose.yml up -d return ;; *) echo "已取消启动" return ;; esac fi echo "正在重启容器..." docker-compose -f ./docker-compose.yml down docker-compose -f ./docker-compose.yml up -d } check_config(){ local config_dir="./conf" # 如果配置文件不存在或者空白 if [ ! -e "$config_dir/config.json" ] || [ ! -s "$config_dir/config.json" ];then echo "请先'创建配置'" exit 0 fi # 如果配置未初始化 uuid=$(jq -r '.inbounds[0].settings.clients[0].id' "$config_dir/config.json") if [ "$uuid" = "你的UUID" ] || [ -z "$uuid" ]; then echo "请先'创建配置'" exit 0 fi } # 检查依赖 check_dependencies() { # 内部退出函数:只在本函数作用域内有效 exit_with_dep_error() { echo "请执行 安装依赖 操作" exit 1 } source ./bin/utils/base.sh check_jq || exit_with_dep_error check_docker || exit_with_dep_error check_docker_compose || exit_with_dep_error } # 安装依赖 install_dependencies() { source ./bin/utils/base.sh if ! command -v jq >/dev/null 2>&1; then echo "jq 未安装,开始安装..." install_jq fi if ! command -v docker >/dev/null 2>&1; then echo "Docker 未安装,开始安装..." install_docker fi if ! command -v docker-compose >/dev/null 2>&1; then echo "docker-compose 未安装,开始安装..." install_docker_compose fi } main(){ local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹路径 # 显示菜单 echo "请选择一个操作:" echo "0. 安装依赖" echo "1. 创建配置 / 重置配置" echo "2. 启动容器" echo "3. 查看分享链接" echo "4. 停止容器" echo "5. 更新镜像" echo "6. 修改端口" echo "7. 修改Reality目标域名" echo "8. 退出" # 读取用户选择 read -p "输入您的选择: " choice # 根据用户选择执行相应的操作 case $choice in 0) # 安装依赖 install_dependencies ;; 1) # 创建配置 / 重置配置 check_dependencies bash $script_dir/create_config.sh ;; 2) # 启动容器 echo "启动容器.." check_dependencies bash $script_dir/run.sh ;; 3) # 查看分享链接 echo "查看分享链接.." check_dependencies check_config bash $script_dir/print_share_link.sh ;; 4) # 停止容器 echo "正在停止容器.." docker-compose -f ./docker-compose.yml down ;; 5) # 更新镜像 bash $script_dir/update_docker_images.sh ;; 6) # 修改端口 check_dependencies check_config bash $script_dir/update_port.sh restart_docker ;; 7) # 修改Reality目标域名 check_dependencies check_config bash $script_dir/update_reality_dest.sh restart_docker ;; 8) # 退出 echo "退出程序." ;; *) echo "无效的选择, 请重新选择." ;; esac } main