From a3e048b949c1ad75e495b5b9a22ffdf2f258c031 Mon Sep 17 00:00:00 2001 From: svefnz Date: Tue, 7 Jul 2026 23:47:56 +0800 Subject: [PATCH] fix: reuse existing Caddy binary and preserve Caddyfile on install --- src/caddy.sh | 8 +++++++- src/core.sh | 13 +++++++++---- src/init.sh | 3 ++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/caddy.sh b/src/caddy.sh index a910c6e..66f4a2d 100644 --- a/src/caddy.sh +++ b/src/caddy.sh @@ -3,7 +3,12 @@ caddy_config() { case $1 in new) mkdir -p $is_caddy_dir $is_caddy_dir/sites $is_caddy_conf - cat >$is_caddyfile <<-EOF + if [[ -f $is_caddyfile ]]; then + [[ ! $(grep -F "$is_caddy_conf/*.conf" $is_caddyfile) ]] && { + echo -e "\nimport $is_caddy_conf/*.conf" >>$is_caddyfile + } + else + cat >$is_caddyfile <<-EOF # caddy configuration # { admin off @@ -13,6 +18,7 @@ caddy_config() { import $is_caddy_conf/*.conf import $is_caddy_dir/sites/*.conf EOF + fi ;; *ws* | *http*) cat >${is_caddy_site_file} <<<" diff --git a/src/core.sh b/src/core.sh index 828960a..22318d9 100644 --- a/src/core.sh +++ b/src/core.sh @@ -1293,13 +1293,18 @@ get() { is_host_dns=$(_wget -qO- --header="accept: application/dns-json" "https://one.one.one.one/dns-query?name=$host&type=$is_dns_type") ;; install-caddy) - _green "\n安装 Caddy 实现自动配置 TLS.\n" - load download.sh - download caddy + if [[ -f $is_caddy_bin || $(type -P caddy) ]]; then + [[ ! -f $is_caddy_bin ]] && is_caddy_bin=$(type -P caddy) + _green "\n检测到系统已安装 Caddy (${is_caddy_bin}),将直接使用现有版本。\n" + else + _green "\n安装 Caddy 实现自动配置 TLS.\n" + load download.sh + download caddy + fi load systemd.sh install_service caddy &>/dev/null is_caddy=1 - _green "安装 Caddy 成功.\n" + _green "Caddy 配置成功.\n" ;; reinstall) is_install_sh=$(cat $is_sh_dir/install.sh) diff --git a/src/init.sh b/src/init.sh index fd5e059..00e6b23 100644 --- a/src/init.sh +++ b/src/init.sh @@ -85,7 +85,8 @@ is_sh_dir=$is_core_dir/sh is_sh_repo=$author/$is_core is_pkg="wget unzip tar qrencode bash" is_config_json=$is_core_dir/config.json -is_caddy_bin=/usr/local/bin/caddy +is_caddy_bin=$(type -P caddy) +[[ ! $is_caddy_bin ]] && is_caddy_bin=/usr/local/bin/caddy is_caddy_dir=/etc/caddy is_caddy_repo=caddyserver/caddy is_caddyfile=$is_caddy_dir/Caddyfile