重构代码, 将变量改为大写

This commit is contained in:
Olia Lisa
2026-05-21 16:57:44 +08:00
parent e166148e87
commit 4adb219b11
9 changed files with 130 additions and 130 deletions
+30 -30
View File
@@ -2,11 +2,11 @@
create_acme_tls_config() { create_acme_tls_config() {
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_dir="$script_dir/../config" 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"
# 设置端口 # 设置端口
update_port update_port
@@ -18,39 +18,39 @@ create_acme_tls_config() {
update_uuid update_uuid
# 获取邮箱 # 获取邮箱
local user_email local USER_EMAIL
read -p "请输入你的邮箱(可留空): " user_email read -p "请输入你的邮箱(可留空): " USER_EMAIL
if [[ -z "$user_email" ]]; then if [[ -z "$USER_EMAIL" ]]; then
user_email="example@example.com" USER_EMAIL="example@example.com"
fi fi
# 获取域名 # 获取域名
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 "[错误] 域名不能为空"
read -p "请输入你的域名: " user_domain read -p "请输入你的域名: " USER_DOMAIN
done done
# 获取 Cloudflare API Token # 获取 Cloudflare API Token
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 "[错误] Cloudflare API Token 不能为空"
read -p "请输入你的 Cloudflare API Token: " cloudflare_token read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
done done
sed -i "s/你的邮箱/$user_email/g" "$config_file" sed -i "s/你的邮箱/$USER_EMAIL/g" "$CONFIG_FILE"
sed -i "s/你的域名/$user_domain/g" "$config_file" sed -i "s/你的域名/$USER_DOMAIN/g" "$CONFIG_FILE"
sed -i "s/你的Cloudflare_API_Token/$cloudflare_token/g" "$config_file" sed -i "s/你的Cloudflare_API_Token/$CLOUDFLARE_TOKEN/g" "$CONFIG_FILE"
green "成功创建配置" green "成功创建配置"
} }
create_self_tls_config() { create_self_tls_config() {
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
cp "$script_dir/../config/template/tuic/tuic_self_tls_config.json" "$script_dir/../config/config.json" cp "$SCRIPT_DIR/../config/template/tuic/tuic_self_tls_config.json" "$SCRIPT_DIR/../config/config.json"
# 设置端口 # 设置端口
update_port update_port
@@ -68,14 +68,14 @@ create_self_tls_config() {
} }
create_config(){ create_config(){
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_file="$script_dir/../config/config.json" local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
# 如果配置文件已存在,提示用户是否重新生成 # 如果配置文件已存在,提示用户是否重新生成
if [ -e "$config_file" ]; then if [ -e "$CONFIG_FILE" ]; then
local regenerate local REGENERATE
read -p "检测到配置已存在,是否重新生成配置?(y/n): " regenerate read -p "检测到配置已存在,是否重新生成配置?(y/n): " REGENERATE
if [ "$regenerate" != "y" ] && [ "$regenerate" != "Y" ]; then if [ "$REGENERATE" != "y" ] && [ "$REGENERATE" != "Y" ]; then
echo "取消重新生成配置." echo "取消重新生成配置."
return return
fi fi
@@ -84,9 +84,9 @@ create_config(){
echo "请选择配置类型:" echo "请选择配置类型:"
echo "1. 自签名证书配置" echo "1. 自签名证书配置"
echo "2. tls证书配置" echo "2. tls证书配置"
local choice local CHOICE
read -p "输入您的选择: " choice read -p "输入您的选择: " CHOICE
case $choice in case $CHOICE in
1) 1)
echo "重置为自签名证书配置..." echo "重置为自签名证书配置..."
create_self_tls_config create_self_tls_config
+9 -9
View File
@@ -2,22 +2,22 @@
# 生成自签名证书 # 生成自签名证书
create_self_tls() { create_self_tls() {
local domain="${1:-bing.com}" local DOMAIN="${1:-bing.com}"
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local key_dir="$script_dir/../tls/self-tls" local KEY_DIR="$SCRIPT_DIR/../tls/self-tls"
local config_file="$script_dir/../config/config.json" local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
# 创建存放证书的目录 # 创建存放证书的目录
mkdir -p "$key_dir" mkdir -p "$KEY_DIR"
# 生成自签名证书 # 生成自签名证书
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) \ openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) \
-keyout "$key_dir/server.key" \ -keyout "$KEY_DIR/server.key" \
-out "$key_dir/server.crt" \ -out "$KEY_DIR/server.crt" \
-subj "/CN=$domain" \ -subj "/CN=$DOMAIN" \
-days 36500 -days 36500
# 更新config.json文件中的域名信息 # 更新config.json文件中的域名信息
modify_json_file "$config_file" "inbounds[0].tls.server_name" "$domain" modify_json_file "$CONFIG_FILE" "inbounds[0].tls.server_name" "$DOMAIN"
} }
+10 -10
View File
@@ -2,32 +2,32 @@
# 修改域名 # 修改域名
update_domain(){ update_domain(){
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_file="$script_dir/../config/config.json" local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
# 检查jq是否安装 # 检查jq是否安装
check_jq check_jq
# 获取旧的domain # 获取旧的domain
local old_domain=$(jq -r ".inbounds[0].tls.server_name" "$config_file") local OLD_DOMAIN=$(jq -r ".inbounds[0].tls.server_name" "$CONFIG_FILE")
# 输入新的domain # 输入新的domain
local domain local DOMAIN
read -p "请输入域名[当前域名: $old_domain]: " domain read -p "请输入域名[当前域名: $OLD_DOMAIN]: " DOMAIN
# 如果输入为空,退出脚本 # 如果输入为空,退出脚本
if [[ -z "$domain" ]]; then if [[ -z "$DOMAIN" ]]; then
echo "输入域名为空,退出脚本" echo "输入域名为空,退出脚本"
exit 1 exit 1
fi fi
# 修改server_name # 修改server_name
modify_json_file "$config_file" ".inbounds[0].tls.server_name" "$domain" modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.server_name" "$DOMAIN"
# 是否存在acme域名, 存在则修改 # 是否存在acme域名, 存在则修改
local acme_exists=$(jq -r 'has("inbounds") and (.inbounds[0] | has("tls")) and (.inbounds[0].tls | has("acme"))' "$config_file") local ACME_EXISTS=$(jq -r 'has("inbounds") and (.inbounds[0] | has("tls")) and (.inbounds[0].tls | has("acme"))' "$CONFIG_FILE")
if [[ "$acme_exists" == "true" ]]; then if [[ "$ACME_EXISTS" == "true" ]]; then
modify_json_file "$config_file" ".inbounds[0].tls.acme.domain[0]" "$domain" modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.acme.domain[0]" "$DOMAIN"
fi fi
echo "修改域名成功" echo "修改域名成功"
+4 -4
View File
@@ -2,15 +2,15 @@
# 更新密码的函数 # 更新密码的函数
update_password() { update_password() {
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_file="$script_dir/../config/config.json" local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
# 生成一个长度为16的随机密码 # 生成一个长度为16的随机密码
local new_password=$(gen_password 16) local NEW_PASSWORD=$(gen_password 16)
# 修改密码 # 修改密码
sed -i 's/你的密码/'"$new_password"'/g' $config_file sed -i 's/你的密码/'"$NEW_PASSWORD"'/g' $CONFIG_FILE
echo "设置密码成功" echo "设置密码成功"
} }
+35 -35
View File
@@ -8,27 +8,27 @@
# $2: 结束端口(默认 65535) # $2: 结束端口(默认 65535)
# $3: 最大随机尝试次数(默认 100) # $3: 最大随机尝试次数(默认 100)
find_free_port() { find_free_port() {
local start="${1:-10001}" local START="${1:-10001}"
local max="${2:-65535}" local MAX="${2:-65535}"
local attempts="${3:-100}" local ATTEMPTS="${3:-100}"
# ------------------------------------------------------------ # ------------------------------------------------------------
# 收集当前正在监听的端口(TCP + UDP) # 收集当前正在监听的端口(TCP + UDP)
# 优先使用 ss,其次 netstat # 优先使用 ss,其次 netstat
# ------------------------------------------------------------ # ------------------------------------------------------------
local used_ports raw local USED_PORTS RAW
if command -v ss >/dev/null 2>&1; then if command -v ss >/dev/null 2>&1; then
# ss 输出示例: # ss 输出示例:
# LISTEN 0 128 0.0.0.0:22 # LISTEN 0 128 0.0.0.0:22
raw=$(ss -lntu 2>/dev/null || true) RAW=$(ss -lntu 2>/dev/null || true)
used_ports=$(printf "%s\n" "$raw" \ USED_PORTS=$(printf "%s\n" "$RAW" \
| awk '{print $5}' \ | awk '{print $5}' \
| sed -E 's/.*[:]//g') | sed -E 's/.*[:]//g')
elif command -v netstat >/dev/null 2>&1; then elif command -v netstat >/dev/null 2>&1; then
# netstat 输出示例: # netstat 输出示例:
# tcp 0 0 0.0.0.0:22 # tcp 0 0 0.0.0.0:22
raw=$(netstat -lntu 2>/dev/null || true) RAW=$(netstat -lntu 2>/dev/null || true)
used_ports=$(printf "%s\n" "$raw" \ USED_PORTS=$(printf "%s\n" "$RAW" \
| awk '{print $4}' \ | awk '{print $4}' \
| sed -E 's/.*[:]//g') | sed -E 's/.*[:]//g')
else else
@@ -40,12 +40,12 @@ find_free_port() {
# 将已占用端口存入关联数组,便于 O(1) 判断 # 将已占用端口存入关联数组,便于 O(1) 判断
# 需要 bash 4+ # 需要 bash 4+
# ------------------------------------------------------------ # ------------------------------------------------------------
declare -A used_map declare -A USED_MAP
local p local P
for p in $used_ports; do for P in $USED_PORTS; do
# 过滤非数字字段(如 *、::: # 过滤非数字字段(如 *、:::
if [[ $p =~ ^[0-9]+$ ]]; then if [[ $P =~ ^[0-9]+$ ]]; then
used_map["$p"]=1 USED_MAP["$P"]=1
fi fi
done done
@@ -53,14 +53,14 @@ find_free_port() {
# 随机尝试若干次 # 随机尝试若干次
# 每次随机生成一个端口,只要未被监听就立即返回 # 每次随机生成一个端口,只要未被监听就立即返回
# ------------------------------------------------------------ # ------------------------------------------------------------
local port i local PORT I
for ((i=0; i<attempts; i++)); do for ((I=0; I<ATTEMPTS; I++)); do
# 在 [start, max] 范围内生成随机端口 # 在 [start, max] 范围内生成随机端口
port=$(( RANDOM % (max - start + 1) + start )) PORT=$(( RANDOM % (MAX - START + 1) + START ))
# 如果端口不在已监听表中,则认为可用 # 如果端口不在已监听表中,则认为可用
if [[ -z "${used_map[$port]}" ]]; then if [[ -z "${USED_MAP[$PORT]}" ]]; then
echo "$port" echo "$PORT"
return 0 return 0
fi fi
done done
@@ -69,7 +69,7 @@ find_free_port() {
# 多次随机尝试后仍未找到可用端口 # 多次随机尝试后仍未找到可用端口
# 通常意味着端口范围过小或已被大量占用 # 通常意味着端口范围过小或已被大量占用
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "Error: no free port found after $attempts random attempts." >&2 echo "Error: no free port found after $ATTEMPTS random attempts." >&2
return 1 return 1
} }
@@ -172,34 +172,34 @@ port_manage() {
# update_port 8080 # update_port 8080
# ========================================== # ==========================================
update_port(){ update_port(){
local port=$1 local PORT=$1
# 如果没有提供端口参数,则自动查找一个随机空闲端口 # 如果没有提供端口参数,则自动查找一个随机空闲端口
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)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_dir="$script_dir/../config" local CONFIG_DIR="$SCRIPT_DIR/../config"
modify_json_file "$config_dir/config.json" ".inbounds[0].listen_port" "$port" modify_json_file "$CONFIG_DIR/config.json" ".inbounds[0].listen_port" "$PORT"
port_manage allow "$port" port_manage allow "$PORT"
echo "设置端口成功" echo "设置端口成功"
} }
# 通过交互方式更新端口 # 通过交互方式更新端口
ask_update_port(){ ask_update_port(){
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
local config_file="$script_dir/../config/config.json" local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
local current_port=$(get_listen_port) local CURRENT_PORT=$(get_listen_port)
local new_port=$(ask_update "请输入新的端口号" "$current_port") local NEW_PORT=$(ask_update "请输入新的端口号" "$CURRENT_PORT")
update_port "$new_port" update_port "$NEW_PORT"
} }
# 获取当前配置的监听端口 # 获取当前配置的监听端口
get_listen_port(){ get_listen_port(){
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
local config_file="$script_dir/../config/config.json" local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
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 -25
View File
@@ -2,53 +2,53 @@
print_share_link() { print_share_link() {
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径 local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_dir=$(readlink -f "$script_dir/../config") local CONFIG_DIR=$(readlink -f "$SCRIPT_DIR/../config")
# 检查jq是否安装 # 检查jq是否安装
check_jq check_jq
config_file="$config_dir/config.json" 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")
if [ "$uuid" = "你的UUID" ] || [ -z "$uuid" ] || [[ "$uuid" == null ]]; then if [ "$UUID" = "你的UUID" ] || [ -z "$UUID" ] || [[ "$UUID" == null ]]; then
red "error: 配置有误, 请重新生成配置" red "error: 配置有误, 请重新生成配置"
exit 1 exit 1
fi fi
# 读取配置文件内容 # 读取配置文件内容
local config=$(cat "$config_file") local CONFIG=$(cat "$CONFIG_FILE")
# 提取所需信息 # 提取所需信息
uuid=$(echo "$config" | jq -r '.inbounds[0].users[0].uuid') UUID=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].uuid')
local sni=$(echo "$config" | jq -r '.inbounds[0].tls.server_name') local SNI=$(echo "$CONFIG" | jq -r '.inbounds[0].tls.server_name')
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 password=$(echo "$config" | jq -r '.inbounds[0].users[0].password') local PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].password')
local congestion_control=$(echo "$config" | jq -r '.inbounds[0].congestion_control') local CONGESTION_CONTROL=$(echo "$CONFIG" | jq -r '.inbounds[0].congestion_control')
local allowInsecure=1 # 是否跳过证书验证,1表示跳过,0表示不跳过 local ALLOW_INSECURE=1 # 是否跳过证书验证,1表示跳过,0表示不跳过
local insecure=1 # 是否允许不安全连接,1表示允许,0表示不允许 local INSECURE=1 # 是否允许不安全连接,1表示允许,0表示不允许
# 检查是否使用ACME申请证书 # 检查是否使用ACME申请证书
if jq -e '.inbounds[0].tls.acme' "$config_dir/config.json" > /dev/null 2>&1; then if jq -e '.inbounds[0].tls.acme' "$CONFIG_DIR/config.json" > /dev/null 2>&1; then
allowInsecure=0 # 不跳过证书验证 ALLOW_INSECURE=0 # 不跳过证书验证
insecure=0 INSECURE=0
fi fi
# 构建分享链接 # 构建分享链接
local share_link="tuic://$uuid:$password@$ipv4:$port?sni=$sni&alpn=h3&insecure=$insecure&allowInsecure=$allowInsecure&congestion_control=$congestion_control#Tuic节点" local SHARE_LINK="tuic://$UUID:$PASSWORD@$IPV4:$PORT?sni=$SNI&alpn=h3&insecure=$INSECURE&allowInsecure=$ALLOW_INSECURE&congestion_control=$CONGESTION_CONTROL#Tuic节点"
# 输出分享链接 # 输出分享链接
echo -e "\033[32m" echo -e "\033[32m"
echo "IPV4: $ipv4" echo "IPV4: $IPV4"
echo "port: $port" echo "port: $PORT"
echo "uuid: $uuid" echo "uuid: $UUID"
echo "password: $password" echo "password: $PASSWORD"
echo "sni: $sni" echo "sni: $SNI"
echo "congestion_control(拥塞控制算法): $congestion_control" echo "congestion_control(拥塞控制算法): $CONGESTION_CONTROL"
echo "" echo ""
echo "分享链接: $share_link" echo "分享链接: $SHARE_LINK"
echo -e "\033[0m" echo -e "\033[0m"
} }
+6 -6
View File
@@ -2,26 +2,26 @@
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文件路径
# 检查是否存在 docker-compose.yml 文件 # 检查是否存在 docker-compose.yml 文件
if [ ! -f $compose_file ]; then if [ ! -f $COMPOSE_FILE ]; then
echo "Error: docker-compose.yml 文件不存在." echo "Error: docker-compose.yml 文件不存在."
exit 1 exit 1
fi fi
echo "正在关闭容器.." echo "正在关闭容器.."
docker compose -f $compose_file down docker compose -f $COMPOSE_FILE down
echo "正在更新镜像.." echo "正在更新镜像.."
docker compose -f $compose_file pull docker compose -f $COMPOSE_FILE pull
echo "正在删除未使用的镜像..." echo "正在删除未使用的镜像..."
docker image prune -f docker image prune -f
echo "正在启动容器.." echo "正在启动容器.."
docker compose -f $compose_file up -d docker compose -f $COMPOSE_FILE up -d
} }
+5 -5
View File
@@ -1,15 +1,15 @@
#!/bin/bash #!/bin/bash
run() { run() {
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"
# 如果容器已经启动, 则先停止容器 # 如果容器已经启动, 则先停止容器
if docker compose -f "$compose_file" ps | grep -q "Up"; then if docker compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then
docker compose -f "$compose_file" down docker compose -f "$COMPOSE_FILE" down
fi fi
# 启动docker容器 # 启动docker容器
docker compose -f "$compose_file" up -d docker compose -f "$COMPOSE_FILE" up -d
} }
+6 -6
View File
@@ -2,25 +2,25 @@
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文件路径
# 检查是否存在 docker-compose.yml 文件 # 检查是否存在 docker-compose.yml 文件
if [ ! -f $compose_file ]; then if [ ! -f $COMPOSE_FILE ]; then
echo "Error: docker-compose.yml 文件不存在." echo "Error: docker-compose.yml 文件不存在."
exit 1 exit 1
fi fi
echo "正在关闭容器.." echo "正在关闭容器.."
docker compose -f $compose_file down docker compose -f $COMPOSE_FILE down
echo "正在更新镜像.." echo "正在更新镜像.."
docker compose -f $compose_file pull docker compose -f $COMPOSE_FILE pull
echo "正在删除未使用的镜像..." echo "正在删除未使用的镜像..."
docker image prune -f docker image prune -f
echo "正在启动容器.." echo "正在启动容器.."
docker compose -f $compose_file up -d docker compose -f $COMPOSE_FILE up -d
} }