Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bad0bcc602 | |||
| 334b0629b0 | |||
| 2379022f7f | |||
| 2d09268c4d | |||
| 9dfd39e67b | |||
| 97cd1e6b70 | |||
| e90a7e7d25 | |||
| 149d8a2cb0 | |||
| 1ef1799a51 | |||
| 07e3ec7a77 | |||
| a58cfd0fe6 | |||
| 1ee54f0f48 | |||
| 6b01c65ea6 | |||
| 6a2e902fb3 | |||
| 7de9fcf0a9 | |||
| 250952e5dd | |||
| 506894d145 | |||
| 245bac6056 | |||
| f58c341a28 | |||
| c0824d99c0 | |||
| 499b085f05 | |||
| 30a50c0292 | |||
| 4bd898a067 | |||
| 900378b8ec |
@@ -54,6 +54,7 @@ apt install -y curl wget curl
|
|||||||
7. 修改端口
|
7. 修改端口
|
||||||
8. 更新镜像
|
8. 更新镜像
|
||||||
9. 更新脚本
|
9. 更新脚本
|
||||||
|
10. 开启BBR加速
|
||||||
输入您的选择:
|
输入您的选择:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+71
@@ -0,0 +1,71 @@
|
|||||||
|
# 开启BBR加速
|
||||||
|
enable_kernel_bbr(){
|
||||||
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
|
echo "请使用 root 权限运行该操作"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检测容器环境
|
||||||
|
local virt_type=""
|
||||||
|
if command -v systemd-detect-virt >/dev/null 2>&1; then
|
||||||
|
virt_type=$(systemd-detect-virt 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$virt_type" in
|
||||||
|
lxc|openvz|docker|podman|container-other)
|
||||||
|
echo "检测到当前运行于容器环境: $virt_type"
|
||||||
|
echo "请在宿主机开启 BBR"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null)" = "bbr" ]; then
|
||||||
|
echo "BBR加速 已经开启,无需重复操作"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 尝试加载 bbr 模块(新内核可能已内建)
|
||||||
|
if command -v modprobe >/dev/null 2>&1; then
|
||||||
|
modprobe tcp_bbr 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查内核是否支持 BBR
|
||||||
|
if ! sysctl net.ipv4.tcp_available_congestion_control 2>/dev/null | grep -qw bbr; then
|
||||||
|
echo "当前系统内核不支持 BBR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set_sysctl_conf(){
|
||||||
|
local key="$1"
|
||||||
|
local value="$2"
|
||||||
|
local file="/etc/sysctl.conf"
|
||||||
|
|
||||||
|
touch "$file"
|
||||||
|
|
||||||
|
# 转义 key,避免 . 被 grep/sed 当作正则
|
||||||
|
local escaped_key
|
||||||
|
escaped_key=$(printf '%s\n' "$key" | sed 's/[.[\*^$()+?{|]/\\&/g')
|
||||||
|
|
||||||
|
if grep -qE "^[[:space:]]*#?[[:space:]]*$escaped_key[[:space:]]*=" "$file"; then
|
||||||
|
sed -i "s|^[[:space:]]*#\?[[:space:]]*$escaped_key[[:space:]]*=.*|$key = $value|" "$file"
|
||||||
|
else
|
||||||
|
echo "$key = $value" >> "$file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 写入配置
|
||||||
|
set_sysctl_conf "net.core.default_qdisc" "fq"
|
||||||
|
set_sysctl_conf "net.ipv4.tcp_congestion_control" "bbr"
|
||||||
|
|
||||||
|
# 立即生效
|
||||||
|
sysctl -w net.core.default_qdisc=fq >/dev/null 2>&1
|
||||||
|
sysctl -w net.ipv4.tcp_congestion_control=bbr >/dev/null 2>&1
|
||||||
|
|
||||||
|
# 验证是否成功
|
||||||
|
if [ "$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null)" = "bbr" ]; then
|
||||||
|
echo "BBR加速 已开启"
|
||||||
|
else
|
||||||
|
echo "BBR开启失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
|
|
||||||
create_hysteria_config(){
|
create_hysteria_config(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_DIR="${1}" # 配置文件目录
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
|
||||||
echo "请选择配置类型:"
|
echo "请选择配置类型:"
|
||||||
echo "1. Hysteria 自签名证书配置"
|
echo "1. Hysteria 自签名证书配置"
|
||||||
@@ -13,11 +12,11 @@ create_hysteria_config(){
|
|||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
echo "重置为hysteria自签名证书配置..."
|
echo "重置为hysteria自签名证书配置..."
|
||||||
create_hysteria_self_tls_config
|
create_hysteria_self_tls_config $CONFIG_DIR
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
echo "重置为hysteria acme tls证书配置..."
|
echo "重置为hysteria acme tls证书配置..."
|
||||||
create_hysteria_acme_tls_config
|
create_hysteria_acme_tls_config $CONFIG_DIR
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "无效的选择, 请重新选择."
|
echo "无效的选择, 请重新选择."
|
||||||
@@ -26,42 +25,42 @@ create_hysteria_config(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_hysteria_self_tls_config() {
|
create_hysteria_self_tls_config() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_DIR="${1}" # 配置文件目录
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
cp "$SCRIPT_DIR/../config/template/hysteria/hysteria_self_tls_config.json" "$CONFIG_FILE"
|
cp "$CONFIG_DIR/template/hysteria/hysteria_self_tls_config.json" "$CONFIG_FILE"
|
||||||
|
|
||||||
# 生成自签名证书和设置域名
|
# 生成自签名证书和设置域名
|
||||||
update_self_tls "$CONFIG_FILE" "bing.com"
|
update_self_tls "$CONFIG_FILE" "bing.com"
|
||||||
|
|
||||||
# 设置端口
|
# 设置端口
|
||||||
update_port
|
update_port "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置密码
|
# 设置密码
|
||||||
update_password
|
update_password "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置混淆密码
|
# 设置混淆密码
|
||||||
update_obfs_password
|
update_obfs_password "$CONFIG_FILE"
|
||||||
|
|
||||||
green "成功创建配置"
|
green "成功创建配置"
|
||||||
}
|
}
|
||||||
|
|
||||||
create_hysteria_acme_tls_config() {
|
create_hysteria_acme_tls_config() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_DIR="${1}" # 配置文件目录
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
cp "$SCRIPT_DIR/../config/template/hysteria/hysteria_acme_tls_config.json" "$CONFIG_FILE"
|
cp "$CONFIG_DIR/template/hysteria/hysteria_acme_tls_config.json" "$CONFIG_FILE"
|
||||||
|
|
||||||
update_acme_tls "$CONFIG_FILE"
|
update_acme_tls "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置端口
|
# 设置端口
|
||||||
update_port
|
update_port "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置密码
|
# 设置密码
|
||||||
update_password
|
update_password "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置混淆密码
|
# 设置混淆密码
|
||||||
update_obfs_password
|
update_obfs_password "$CONFIG_FILE"
|
||||||
|
|
||||||
green "成功创建配置"
|
green "成功创建配置"
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-15
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
|
|
||||||
create_tuic_config(){
|
create_tuic_config(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_DIR="${1}" # 配置文件目录
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
|
||||||
echo "请选择配置类型:"
|
echo "请选择配置类型:"
|
||||||
echo "1. Tuic 自签名证书配置"
|
echo "1. Tuic 自签名证书配置"
|
||||||
@@ -13,11 +12,11 @@ create_tuic_config(){
|
|||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
echo "重置为 tuic 自签名证书配置..."
|
echo "重置为 tuic 自签名证书配置..."
|
||||||
create_tuic_self_tls_config
|
create_tuic_self_tls_config $CONFIG_DIR
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
echo "重置为 tuic acme tls证书配置..."
|
echo "重置为 tuic acme tls证书配置..."
|
||||||
create_tuic_acme_tls_config
|
create_tuic_acme_tls_config $CONFIG_DIR
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "无效的选择, 请重新选择."
|
echo "无效的选择, 请重新选择."
|
||||||
@@ -26,8 +25,7 @@ create_tuic_config(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_tuic_acme_tls_config() {
|
create_tuic_acme_tls_config() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_DIR="${1}" # 配置文件目录
|
||||||
local CONFIG_DIR="$SCRIPT_DIR/../config"
|
|
||||||
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
cp "$CONFIG_DIR/template/tuic/tuic_acme_tls_config.json" "$CONFIG_FILE"
|
cp "$CONFIG_DIR/template/tuic/tuic_acme_tls_config.json" "$CONFIG_FILE"
|
||||||
@@ -35,34 +33,34 @@ create_tuic_acme_tls_config() {
|
|||||||
update_acme_tls "$CONFIG_FILE"
|
update_acme_tls "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置端口
|
# 设置端口
|
||||||
update_port
|
update_port "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置密码
|
# 设置密码
|
||||||
update_password
|
update_password "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置UUID
|
# 设置UUID
|
||||||
update_uuid
|
update_uuid "$CONFIG_FILE"
|
||||||
|
|
||||||
green "成功创建配置"
|
green "成功创建配置"
|
||||||
}
|
}
|
||||||
|
|
||||||
create_tuic_self_tls_config() {
|
create_tuic_self_tls_config() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_DIR="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
cp "$SCRIPT_DIR/../config/template/tuic/tuic_self_tls_config.json" "$CONFIG_FILE"
|
cp "$CONFIG_DIR/template/tuic/tuic_self_tls_config.json" "$CONFIG_FILE"
|
||||||
|
|
||||||
# 生成自签名证书和设置域名
|
# 生成自签名证书和设置域名
|
||||||
update_self_tls "$CONFIG_FILE" "bing.com"
|
update_self_tls "$CONFIG_FILE" "bing.com"
|
||||||
|
|
||||||
# 设置端口
|
# 设置端口
|
||||||
update_port
|
update_port "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置密码
|
# 设置密码
|
||||||
update_password
|
update_password "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置UUID
|
# 设置UUID
|
||||||
update_uuid
|
update_uuid "$CONFIG_FILE"
|
||||||
|
|
||||||
green "成功创建配置"
|
green "成功创建配置"
|
||||||
}
|
}
|
||||||
|
|||||||
+38
-6
@@ -4,6 +4,7 @@
|
|||||||
restart_docker() {
|
restart_docker() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml"
|
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml"
|
||||||
|
check_docker_compose_file $COMPOSE_FILE
|
||||||
|
|
||||||
# 如果容器未运行,提示启动
|
# 如果容器未运行,提示启动
|
||||||
local RUNNING_COUNT=$(docker compose -f $COMPOSE_FILE ps -q | wc -l)
|
local RUNNING_COUNT=$(docker compose -f $COMPOSE_FILE ps -q | wc -l)
|
||||||
@@ -30,12 +31,7 @@ restart_docker() {
|
|||||||
update_docker_images(){
|
update_docker_images(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml" # docker-compose.yml文件路径
|
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml" # docker-compose.yml文件路径
|
||||||
|
check_docker_compose_file $COMPOSE_FILE
|
||||||
# 检查是否存在 docker-compose.yml 文件
|
|
||||||
if [ ! -f $COMPOSE_FILE ]; then
|
|
||||||
echo "Error: docker-compose.yml 文件不存在."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "正在关闭容器.."
|
echo "正在关闭容器.."
|
||||||
docker compose -f $COMPOSE_FILE down
|
docker compose -f $COMPOSE_FILE down
|
||||||
@@ -49,3 +45,39 @@ update_docker_images(){
|
|||||||
echo "正在启动容器.."
|
echo "正在启动容器.."
|
||||||
docker compose -f $COMPOSE_FILE up -d
|
docker compose -f $COMPOSE_FILE up -d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
run() {
|
||||||
|
check_docker_compose
|
||||||
|
|
||||||
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
|
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml"
|
||||||
|
check_docker_compose_file $COMPOSE_FILE
|
||||||
|
|
||||||
|
# 如果容器已经启动, 则先停止容器
|
||||||
|
if docker compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then
|
||||||
|
docker compose -f "$COMPOSE_FILE" down
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 启动docker容器
|
||||||
|
docker compose -f "$COMPOSE_FILE" up -d
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# 检查docker版本是否支持docker compose子命令
|
||||||
|
check_docker_compose(){
|
||||||
|
# 检查 docker compose 子命令是否可用
|
||||||
|
if ! docker compose version &>/dev/null; then
|
||||||
|
echo "Docker 不支持 'compose' 子命令,请升级 Docker"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_docker_compose_file(){
|
||||||
|
local COMPOSE_FILE=${1}
|
||||||
|
# 检查是否存在 docker-compose.yml 文件
|
||||||
|
if [ ! -f $COMPOSE_FILE ]; then
|
||||||
|
echo "Error: docker-compose.yml 文件不存在."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
+35
-16
@@ -2,30 +2,49 @@
|
|||||||
|
|
||||||
# 更新密码的函数
|
# 更新密码的函数
|
||||||
update_password() {
|
update_password() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_FILE="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 生成一个长度为16的随机密码
|
# 生成一个长度为16的随机密码
|
||||||
local NEW_PASSWORD=$(gen_password 16)
|
local NEW_PASSWORD
|
||||||
|
NEW_PASSWORD=$(gen_password 16)
|
||||||
|
|
||||||
# 修改密码
|
# 修改密码
|
||||||
sed -i 's/你的密码/'"$NEW_PASSWORD"'/g' $CONFIG_FILE
|
sed -i 's/你的密码/'"$NEW_PASSWORD"'/g' "$CONFIG_FILE"
|
||||||
|
|
||||||
echo "设置密码成功"
|
echo "设置密码成功"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 更新混淆密码
|
# 更新混淆密码
|
||||||
update_obfs_password() {
|
update_obfs_password() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_FILE="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 生成一个长度为16的随机密码
|
# 生成一个长度为16的随机密码
|
||||||
local NEW_PASSWORD=$(gen_password 16)
|
local NEW_PASSWORD
|
||||||
|
NEW_PASSWORD=$(gen_password 16)
|
||||||
|
|
||||||
# 修改密码
|
# 修改密码
|
||||||
sed -i 's/你的混淆密码/'"$NEW_PASSWORD"'/g' $CONFIG_FILE
|
sed -i 's/你的混淆密码/'"$NEW_PASSWORD"'/g' "$CONFIG_FILE"
|
||||||
|
|
||||||
echo "设置密码成功"
|
echo "设置密码成功"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 生成密码
|
||||||
|
gen_password() {
|
||||||
|
local PASS_LENGTH=$1 # 密码长度作为第一个参数
|
||||||
|
local CHARS='[:alnum:]' # 只允许出现字母和数字
|
||||||
|
|
||||||
|
local RAND
|
||||||
|
RAND=$(< /dev/urandom tr -dc "$CHARS" | head -c "$PASS_LENGTH")
|
||||||
|
|
||||||
|
echo "$RAND"
|
||||||
|
}
|
||||||
|
|||||||
+25
-13
@@ -2,21 +2,25 @@
|
|||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 更新 sing-box 配置文件中的监听端口,并开放对应防火墙规则
|
# 更新 sing-box 配置文件中的监听端口,并开放对应防火墙规则
|
||||||
# 参数: 端口号(可选,不传则设置一个5000 到 15000的空闲端口)
|
# 参数1: 配置文件路径
|
||||||
|
# 参数2: 端口号(可选,不传则设置一个5000 到 15000的空闲端口)
|
||||||
# --- 使用示例 ---
|
# --- 使用示例 ---
|
||||||
# 指定端口
|
# 指定端口
|
||||||
# update_port 8080
|
# update_port "$CONFIG_FILE" 8080
|
||||||
# ==========================================
|
# ==========================================
|
||||||
update_port(){
|
update_port(){
|
||||||
local PORT=$1
|
local CONFIG_FILE="$1"
|
||||||
|
local PORT="$2"
|
||||||
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
# 如果没有提供端口参数,则自动查找一个随机空闲端口
|
# 如果没有提供端口参数,则自动查找一个随机空闲端口
|
||||||
if [[ -z "$PORT" ]]; then
|
if [[ -z "$PORT" ]]; then
|
||||||
PORT=$(find_free_port 5000 15000)
|
PORT=$(find_free_port 5000 15000)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
modify_json_file "$CONFIG_FILE" ".inbounds[0].listen_port" "$PORT"
|
||||||
local CONFIG_DIR="$SCRIPT_DIR/../config"
|
|
||||||
modify_json_file "$CONFIG_DIR/config.json" ".inbounds[0].listen_port" "$PORT"
|
|
||||||
port_manage allow "$PORT"
|
port_manage allow "$PORT"
|
||||||
echo "设置端口成功"
|
echo "设置端口成功"
|
||||||
}
|
}
|
||||||
@@ -187,18 +191,26 @@ port_manage() {
|
|||||||
|
|
||||||
# 通过交互方式更新端口
|
# 通过交互方式更新端口
|
||||||
ask_update_port(){
|
ask_update_port(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
local CONFIG_FILE="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
|
||||||
local CURRENT_PORT=$(get_listen_port)
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local CURRENT_PORT=$(get_listen_port "$CONFIG_FILE")
|
||||||
local NEW_PORT=$(ask_update "请输入新的端口号" "$CURRENT_PORT")
|
local NEW_PORT=$(ask_update "请输入新的端口号" "$CURRENT_PORT")
|
||||||
update_port "$NEW_PORT"
|
update_port "$CONFIG_FILE" "$NEW_PORT"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 获取当前配置的监听端口
|
# 获取当前配置的监听端口
|
||||||
get_listen_port(){
|
get_listen_port(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
local CONFIG_FILE="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
local PORT=$(jq -r ".inbounds[0].listen_port" "$CONFIG_FILE")
|
local PORT=$(jq -r ".inbounds[0].listen_port" "$CONFIG_FILE")
|
||||||
echo $PORT
|
echo $PORT
|
||||||
|
|||||||
+25
-31
@@ -4,18 +4,16 @@ print_share_link() {
|
|||||||
# 检查jq是否安装
|
# 检查jq是否安装
|
||||||
check_jq
|
check_jq
|
||||||
|
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_FILE=${1}
|
||||||
local CONFIG_DIR=$(readlink -f "$SCRIPT_DIR/../config")
|
|
||||||
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
|
||||||
|
|
||||||
local TYPE=$(jq -r '.inbounds[0].type' "$CONFIG_FILE")
|
local TYPE=$(jq -r '.inbounds[0].type' "$CONFIG_FILE")
|
||||||
if [ "$TYPE" = "tuic" ]; then
|
if [ "$TYPE" = "tuic" ]; then
|
||||||
print_tuic_share_link
|
print_tuic_share_link "$CONFIG_FILE"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$TYPE" = "hysteria2" ]; then
|
if [ "$TYPE" = "hysteria2" ]; then
|
||||||
print_hysteria_share_link
|
print_hysteria_share_link "$CONFIG_FILE"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -23,9 +21,7 @@ print_share_link() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print_tuic_share_link() {
|
print_tuic_share_link() {
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_FILE=${1} # 配置文件路径
|
||||||
local CONFIG_DIR=$(readlink -f "$SCRIPT_DIR/../config")
|
|
||||||
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
|
||||||
|
|
||||||
# 检查配置是否正确
|
# 检查配置是否正确
|
||||||
local UUID=$(jq -r '.inbounds[0].users[0].uuid' "$CONFIG_FILE")
|
local UUID=$(jq -r '.inbounds[0].users[0].uuid' "$CONFIG_FILE")
|
||||||
@@ -71,42 +67,40 @@ print_tuic_share_link() {
|
|||||||
|
|
||||||
|
|
||||||
print_hysteria_share_link(){
|
print_hysteria_share_link(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
local CONFIG_FILE=${1} # 配置文件路径
|
||||||
local config_dir=$(readlink -f "$script_dir/../config")
|
local INSECURE=1
|
||||||
local config_file="$config_dir/config.json"
|
local ALLOW_INSECURE=1
|
||||||
local insecure=1
|
|
||||||
local allow_insecure=1
|
|
||||||
|
|
||||||
# 检查是否使用ACME申请证书
|
# 检查是否使用ACME申请证书
|
||||||
if is_config_use_acme "$config_file"; then
|
if is_config_use_acme "$CONFIG_FILE"; then
|
||||||
allow_insecure=0 # 不跳过证书验证
|
ALLOW_INSECURE=0 # 不跳过证书验证
|
||||||
insecure=0
|
INSECURE=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 读取配置文件内容
|
# 读取配置文件内容
|
||||||
local config=$(cat "$config_file")
|
local CONFIG=$(cat "$CONFIG_FILE")
|
||||||
|
|
||||||
# 提取所需信息
|
# 提取所需信息
|
||||||
local ipv4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
|
local IPV4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
|
||||||
local port=$(echo "$config" | jq -r '.inbounds[0].listen_port')
|
local PORT=$(echo "$CONFIG" | jq -r '.inbounds[0].listen_port')
|
||||||
local sni=$(echo "$config" | jq -r '.inbounds[0].tls.server_name')
|
local SNI=$(echo "$CONFIG" | jq -r '.inbounds[0].tls.server_name')
|
||||||
local password=$(echo "$config" | jq -r '.inbounds[0].users[0].password')
|
local PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].password')
|
||||||
local obfs_type=$(echo "$config" | jq -r '.inbounds[0].obfs.type')
|
local OBFS_TYPE=$(echo "$CONFIG" | jq -r '.inbounds[0].obfs.type')
|
||||||
local obfs_password=$(echo "$config" | jq -r '.inbounds[0].obfs.password')
|
local OBFS_PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].obfs.password')
|
||||||
|
|
||||||
# 构建分享链接
|
# 构建分享链接
|
||||||
local share_link="hysteria2://${password}@${ipv4}:${port}/?sni=${sni}&insecure=${insecure}&obfs=${obfs_type}&obfs-password=${obfs_password}&allowInsecure=${allow_insecure}#Hysteria2节点"
|
local SHARE_LINK="hysteria2://${PASSWORD}@${IPV4}:${PORT}/?sni=${SNI}&insecure=${INSECURE}&obfs=${OBFS_TYPE}&obfs-password=${OBFS_PASSWORD}&allowInsecure=${ALLOW_INSECURE}#Hysteria2节点"
|
||||||
|
|
||||||
# 输出分享链接
|
# 输出分享链接
|
||||||
echo -e "\033[32m"
|
echo -e "\033[32m"
|
||||||
echo "IPV4: $ipv4"
|
echo "IPV4: $IPV4"
|
||||||
echo "port: $port"
|
echo "port: $PORT"
|
||||||
echo "password: $password"
|
echo "password: $PASSWORD"
|
||||||
echo "sni: $sni"
|
echo "sni: $SNI"
|
||||||
echo "obfs_type: $obfs_type"
|
echo "obfs_type: $OBFS_TYPE"
|
||||||
echo "obfs_password(混淆密码): $obfs_password"
|
echo "obfs_password(混淆密码): $OBFS_PASSWORD"
|
||||||
echo ""
|
echo ""
|
||||||
echo "分享链接: $share_link"
|
echo "分享链接: $SHARE_LINK"
|
||||||
echo -e "\033[0m"
|
echo -e "\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
run() {
|
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
|
||||||
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml"
|
|
||||||
|
|
||||||
# 如果容器已经启动, 则先停止容器
|
|
||||||
if docker compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then
|
|
||||||
docker compose -f "$COMPOSE_FILE" down
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 启动docker容器
|
|
||||||
docker compose -f "$COMPOSE_FILE" up -d
|
|
||||||
}
|
|
||||||
|
|
||||||
+20
-14
@@ -18,13 +18,12 @@ create_self_tls_file() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update_self_tls(){
|
update_self_tls(){
|
||||||
local CONFIG_FILE="${1:-}"
|
local CONFIG_FILE="${1}" # 配置文件
|
||||||
local DOMAIN="${2:-bing.com}" # 域名,默认为bing.com
|
local DOMAIN="${2}" # 域名
|
||||||
|
|
||||||
if [[ -z "$CONFIG_FILE" ]]; then
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
local CONFIG_DIR=$(readlink -f "$SCRIPT_DIR/../config")
|
return 1
|
||||||
CONFIG_FILE="$CONFIG_DIR/config.json"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 生成自签名证书, 设置域名
|
# 生成自签名证书, 设置域名
|
||||||
@@ -33,19 +32,18 @@ update_self_tls(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
update_acme_tls(){
|
update_acme_tls(){
|
||||||
local CONFIG_FILE="${1:-}"
|
local CONFIG_FILE="${1}" # 配置文件
|
||||||
|
|
||||||
if [[ -z "$CONFIG_FILE" ]]; then
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
local CONFIG_DIR=$(readlink -f "$SCRIPT_DIR/../config")
|
return 1
|
||||||
CONFIG_FILE="$CONFIG_DIR/config.json"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 获取邮箱
|
# 获取邮箱
|
||||||
local USER_EMAIL
|
local USER_EMAIL
|
||||||
read -p "请输入你的邮箱: " USER_EMAIL
|
read -p "请输入你的邮箱: " USER_EMAIL
|
||||||
while [[ -z "$USER_EMAIL" ]]; do
|
while [[ -z "$USER_EMAIL" ]]; do
|
||||||
echo "[错误] 邮箱不能为空"
|
echo "[Error] 邮箱不能为空"
|
||||||
read -p "请输入你的邮箱: " USER_EMAIL
|
read -p "请输入你的邮箱: " USER_EMAIL
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -53,7 +51,7 @@ update_acme_tls(){
|
|||||||
local USER_DOMAIN
|
local USER_DOMAIN
|
||||||
read -p "请输入你的域名 (例如: example.com): " USER_DOMAIN
|
read -p "请输入你的域名 (例如: example.com): " USER_DOMAIN
|
||||||
while [[ -z "$USER_DOMAIN" ]]; do
|
while [[ -z "$USER_DOMAIN" ]]; do
|
||||||
echo "[错误] 域名不能为空"
|
echo "[Error] 域名不能为空"
|
||||||
read -p "请输入你的域名: " USER_DOMAIN
|
read -p "请输入你的域名: " USER_DOMAIN
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -61,7 +59,7 @@ update_acme_tls(){
|
|||||||
local CLOUDFLARE_TOKEN
|
local CLOUDFLARE_TOKEN
|
||||||
read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
|
read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
|
||||||
while [[ -z "$CLOUDFLARE_TOKEN" ]]; do
|
while [[ -z "$CLOUDFLARE_TOKEN" ]]; do
|
||||||
echo "[错误] Cloudflare API Token 不能为空"
|
echo "[Error] Cloudflare API Token 不能为空"
|
||||||
read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
|
read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -74,11 +72,19 @@ update_acme_tls(){
|
|||||||
update_acme_domain(){
|
update_acme_domain(){
|
||||||
local CONFIG_FILE="${1}" # 配置文件
|
local CONFIG_FILE="${1}" # 配置文件
|
||||||
local DOMAIN="${2}" # 域名
|
local DOMAIN="${2}" # 域名
|
||||||
modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.acme.domain[0]" "$DOMAIN"
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.certificate_provider.domain[0]" "$DOMAIN"
|
||||||
}
|
}
|
||||||
|
|
||||||
update_server_name(){
|
update_server_name(){
|
||||||
local CONFIG_FILE="${1}" # 配置文件
|
local CONFIG_FILE="${1}" # 配置文件
|
||||||
local DOMAIN="${2}" # 域名
|
local DOMAIN="${2}" # 域名
|
||||||
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.server_name" "$DOMAIN"
|
modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.server_name" "$DOMAIN"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,16 +54,6 @@ check_jq() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 生成密码
|
|
||||||
gen_password() {
|
|
||||||
local PASS_LENGTH=$1 # 密码长度作为第一个参数
|
|
||||||
local CHARS='[:alnum:]' # 只允许出现字母和数字
|
|
||||||
|
|
||||||
local RAND
|
|
||||||
RAND=$(< /dev/urandom tr -dc "$CHARS" | head -c "$PASS_LENGTH")
|
|
||||||
|
|
||||||
echo "$RAND"
|
|
||||||
}
|
|
||||||
|
|
||||||
# URL编码
|
# URL编码
|
||||||
url_encode() {
|
url_encode() {
|
||||||
|
|||||||
+8
-3
@@ -1,11 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
update_uuid(){
|
update_uuid(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local CONFIG_FILE="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
if [[ -z "$CONFIG_FILE" ]]; then
|
||||||
|
echo "[Error] config_file配置文件路径 不能为空"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 生成 UUID
|
# 生成 UUID
|
||||||
local UUID=$(cat /proc/sys/kernel/random/uuid)
|
local UUID
|
||||||
|
UUID=$(cat /proc/sys/kernel/random/uuid)
|
||||||
|
|
||||||
# 修改 UUID
|
# 修改 UUID
|
||||||
sed -i 's/你的UUID/'"$UUID"'/g' "$CONFIG_FILE"
|
sed -i 's/你的UUID/'"$UUID"'/g' "$CONFIG_FILE"
|
||||||
|
|||||||
@@ -26,7 +26,8 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"server_name": "你的域名",
|
"server_name": "你的域名",
|
||||||
"alpn": ["h3"],
|
"alpn": ["h3"],
|
||||||
"acme": {
|
"certificate_provider": {
|
||||||
|
"type":"acme",
|
||||||
"domain": ["你的域名"],
|
"domain": ["你的域名"],
|
||||||
"email": "你的邮箱",
|
"email": "你的邮箱",
|
||||||
"data_directory": "/etc/sing-box/tls/acme",
|
"data_directory": "/etc/sing-box/tls/acme",
|
||||||
|
|||||||
@@ -25,7 +25,8 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"server_name": "你的域名",
|
"server_name": "你的域名",
|
||||||
"alpn": ["h3"],
|
"alpn": ["h3"],
|
||||||
"acme": {
|
"certificate_provider": {
|
||||||
|
"type": "acme",
|
||||||
"domain": ["你的域名"],
|
"domain": ["你的域名"],
|
||||||
"email": "你的邮箱",
|
"email": "你的邮箱",
|
||||||
"data_directory": "/etc/sing-box/tls/acme",
|
"data_directory": "/etc/sing-box/tls/acme",
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
sing-box:
|
||||||
|
image: ghcr.io/sagernet/sing-box:v1.14.0-alpha.26
|
||||||
|
container_name: ${COMPOSE_PROJECT_NAME}
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
|
volumes:
|
||||||
|
- ./config/config.json:/etc/sing-box/config.json
|
||||||
|
- ./tls:/etc/sing-box/tls
|
||||||
|
- ./logs:/var/log/sing-box
|
||||||
|
command: -C /etc/sing-box run
|
||||||
+36
-29
@@ -36,16 +36,16 @@ install(){
|
|||||||
|
|
||||||
# 查询运行状态
|
# 查询运行状态
|
||||||
check_container_status(){
|
check_container_status(){
|
||||||
local compose_file="./docker-compose.yml"
|
local COMPOSE_FILE="./docker-compose.yml"
|
||||||
|
|
||||||
local GREEN='\033[0;32m'
|
local GREEN='\033[0;32m'
|
||||||
local RED='\033[0;31m'
|
local RED='\033[0;31m'
|
||||||
local RESET='\033[0m'
|
local RESET='\033[0m'
|
||||||
|
|
||||||
local status
|
local STATUS
|
||||||
status=$(docker compose -f "$compose_file" ps --status running --quiet 2>/dev/null)
|
STATUS=$(docker compose -f "$COMPOSE_FILE" ps --status running --quiet 2>/dev/null)
|
||||||
|
|
||||||
if [ -n "$status" ]; then
|
if [ -n "$STATUS" ]; then
|
||||||
echo -e "${GREEN}运行中${RESET}"
|
echo -e "${GREEN}运行中${RESET}"
|
||||||
else
|
else
|
||||||
echo -e "${RED}未运行${RESET}"
|
echo -e "${RED}未运行${RESET}"
|
||||||
@@ -54,8 +54,7 @@ check_container_status(){
|
|||||||
|
|
||||||
# 修改域名
|
# 修改域名
|
||||||
ask_update_domain(){
|
ask_update_domain(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹绝对路径
|
local CONFIG_FILE="${1}"
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
|
||||||
# 检查jq是否安装
|
# 检查jq是否安装
|
||||||
check_jq
|
check_jq
|
||||||
@@ -86,8 +85,7 @@ ask_update_domain(){
|
|||||||
|
|
||||||
# 检查配置文件
|
# 检查配置文件
|
||||||
check_config_file(){
|
check_config_file(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹绝对路径
|
local CONFIG_FILE="${1}" # 配置文件
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
|
||||||
|
|
||||||
# 检查配置文件是否存在
|
# 检查配置文件是否存在
|
||||||
if [ ! -e "$CONFIG_FILE" ]; then
|
if [ ! -e "$CONFIG_FILE" ]; then
|
||||||
@@ -105,7 +103,8 @@ check_config_file(){
|
|||||||
# 创建配置文件
|
# 创建配置文件
|
||||||
create_config(){
|
create_config(){
|
||||||
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹绝对路径
|
||||||
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
local CONFIG_DIR="$SCRIPT_DIR/../config"
|
||||||
|
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
# 如果配置文件已存在,提示用户是否重新生成
|
# 如果配置文件已存在,提示用户是否重新生成
|
||||||
if [ -e "$CONFIG_FILE" ]; then
|
if [ -e "$CONFIG_FILE" ]; then
|
||||||
@@ -124,10 +123,10 @@ create_config(){
|
|||||||
read -p "输入您的选择: " CHOICE
|
read -p "输入您的选择: " CHOICE
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
create_tuic_config
|
create_tuic_config $CONFIG_DIR
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
create_hysteria_config
|
create_hysteria_config $CONFIG_DIR
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "无效的选择, 请重新选择."
|
echo "无效的选择, 请重新选择."
|
||||||
@@ -136,10 +135,13 @@ create_config(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
main(){
|
main(){
|
||||||
local container_status=$(check_container_status)
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹绝对路径
|
||||||
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
|
local CONTAINER_STATUS=$(check_container_status)
|
||||||
# 显示菜单
|
# 显示菜单
|
||||||
echo ""
|
echo ""
|
||||||
echo 运行状态: $container_status
|
echo 运行状态: $CONTAINER_STATUS
|
||||||
echo "=============================="
|
echo "=============================="
|
||||||
echo "请选择一个操作:"
|
echo "请选择一个操作:"
|
||||||
echo "1. 一键部署"
|
echo "1. 一键部署"
|
||||||
@@ -151,20 +153,21 @@ main(){
|
|||||||
echo "7. 修改端口"
|
echo "7. 修改端口"
|
||||||
echo "8. 更新镜像"
|
echo "8. 更新镜像"
|
||||||
echo "9. 更新脚本"
|
echo "9. 更新脚本"
|
||||||
|
echo "10. 开启BBR加速"
|
||||||
|
|
||||||
# 读取用户选择
|
# 读取用户选择
|
||||||
local choice
|
local CHOICE
|
||||||
read -p "输入您的选择: " choice
|
read -p "输入您的选择: " CHOICE
|
||||||
|
|
||||||
# 根据用户选择执行相应的操作
|
# 根据用户选择执行相应的操作
|
||||||
case $choice in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
# 一键部署
|
# 一键部署
|
||||||
install
|
install
|
||||||
create_config
|
create_config
|
||||||
port_manage allow $(get_listen_port) # 开放端口
|
port_manage allow $(get_listen_port "$CONFIG_FILE") # 开放端口
|
||||||
run
|
run
|
||||||
print_share_link
|
print_share_link "$CONFIG_FILE"
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
# 生成配置 / 重置配置
|
# 生成配置 / 重置配置
|
||||||
@@ -172,19 +175,19 @@ main(){
|
|||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
# 查看分享链接
|
# 查看分享链接
|
||||||
check_config_file
|
check_config_file "$CONFIG_FILE"
|
||||||
print_share_link
|
print_share_link "$CONFIG_FILE"
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
# 启动
|
# 启动
|
||||||
check_config_file
|
check_config_file "$CONFIG_FILE"
|
||||||
port_manage allow $(get_listen_port) # 开放端口
|
port_manage allow $(get_listen_port "$CONFIG_FILE") # 开放端口
|
||||||
run
|
run
|
||||||
print_share_link
|
print_share_link "$CONFIG_FILE"
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
# 停止
|
# 停止
|
||||||
if echo "$container_status" | grep -q "未运行"; then
|
if echo "$CONTAINER_STATUS" | grep -q "未运行"; then
|
||||||
echo "程序已停止"
|
echo "程序已停止"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@@ -192,15 +195,15 @@ main(){
|
|||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
# 修改域名
|
# 修改域名
|
||||||
check_config_file
|
check_config_file "$CONFIG_FILE"
|
||||||
ask_update_domain
|
ask_update_domain "$CONFIG_FILE"
|
||||||
restart_docker
|
restart_docker
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
# 修改端口
|
# 修改端口
|
||||||
check_config_file
|
check_config_file "$CONFIG_FILE"
|
||||||
ask_update_port
|
ask_update_port "$CONFIG_FILE"
|
||||||
port_manage allow $(get_listen_port) # 开放端口
|
port_manage allow $(get_listen_port "$CONFIG_FILE") # 开放端口
|
||||||
restart_docker
|
restart_docker
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
@@ -212,6 +215,10 @@ main(){
|
|||||||
# 更新脚本
|
# 更新脚本
|
||||||
git pull
|
git pull
|
||||||
;;
|
;;
|
||||||
|
10)
|
||||||
|
# 开启BBR加速
|
||||||
|
enable_kernel_bbr
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "无效的选择, 请重新选择."
|
echo "无效的选择, 请重新选择."
|
||||||
;;
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user