xray_docker/install.sh
2026-01-10 19:43:16 +08:00

149 lines
3.6 KiB
Bash

#!/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)
;;
*)
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 ./bin/create_config.sh
;;
2)
# 启动容器
echo "启动容器.."
check_dependencies
bash ./bin/run.sh
;;
3)
# 查看分享链接
echo "查看分享链接.."
check_dependencies
check_config
bash ./bin/print_share_link.sh
;;
4)
# 停止容器
echo "正在停止容器.."
docker-compose -f ./docker-compose.yml down
;;
5)
# 更新镜像
bash ./bin/update_docker_images.sh
;;
6)
# 修改端口
check_dependencies
check_config
bash ./bin/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