支持同机双域名部署选号网hfb_show
Caddy按CADDY_SHOW_DOMAIN托管选号网静态并反代API;一键脚本可构建hfb_show并写入配置。
This commit is contained in:
+104
-1
@@ -75,6 +75,12 @@ show_help() {
|
||||
PROD_READY_TIMEOUT=120
|
||||
等待服务就绪秒数
|
||||
|
||||
选号网(hfb_show,可选,写在 backend/.env):
|
||||
CADDY_SHOW_DOMAIN=show.example.com
|
||||
选号网独立域名,A 记录指向本机;留空则不启用
|
||||
HFB_SHOW_DIR=../hfb_show
|
||||
选号网源码目录(相对 hfb_sys 根目录或绝对路径)
|
||||
|
||||
示例:
|
||||
./scripts/deploy-prod.sh
|
||||
./scripts/deploy-prod.sh --no-build
|
||||
@@ -209,8 +215,100 @@ compose_user_cmd() {
|
||||
export_caddy_env() {
|
||||
export CADDY_DOMAIN
|
||||
export CADDY_EMAIL
|
||||
export CADDY_SHOW_DOMAIN
|
||||
CADDY_DOMAIN="$(require_env CADDY_DOMAIN)"
|
||||
CADDY_EMAIL="$(require_env CADDY_EMAIL)"
|
||||
CADDY_SHOW_DOMAIN="$(env_value CADDY_SHOW_DOMAIN || true)"
|
||||
export CADDY_SHOW_DOMAIN
|
||||
}
|
||||
|
||||
# 准备选号网静态资源与 Caddy 站点配置(可选)
|
||||
prepare_show_site() {
|
||||
local conf_dir="${ROOT_DIR}/deploy/caddy/conf.d"
|
||||
local show_dist="${ROOT_DIR}/deploy/caddy/show-dist"
|
||||
local show_tmpl="${ROOT_DIR}/deploy/caddy/show.caddy.tmpl"
|
||||
local show_conf="${conf_dir}/show.caddy"
|
||||
local show_dir show_domain
|
||||
|
||||
mkdir -p "${conf_dir}"
|
||||
rm -f "${show_conf}"
|
||||
|
||||
show_domain="$(env_value CADDY_SHOW_DOMAIN || true)"
|
||||
if [[ -z "${show_domain}" ]]; then
|
||||
log "未配置 CADDY_SHOW_DOMAIN,跳过选号网站点"
|
||||
# 保留占位页,避免 Caddy 镜像 COPY 目录为空时异常
|
||||
if [[ ! -f "${show_dist}/index.html" ]]; then
|
||||
mkdir -p "${show_dist}"
|
||||
printf '%s\n' '<!doctype html><title>show disabled</title>' >"${show_dist}/index.html"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "${show_domain}" == http://* || "${show_domain}" == https://* || "${show_domain}" == */* ]]; then
|
||||
log_error "CADDY_SHOW_DOMAIN 只填写域名本身,不要包含 http(s):// 或路径,当前值:${show_domain}"
|
||||
exit 1
|
||||
fi
|
||||
if [[ "${show_domain}" == "${CADDY_DOMAIN}" ]]; then
|
||||
log_error "CADDY_SHOW_DOMAIN 不能与 CADDY_DOMAIN 相同"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
show_dir="$(env_value HFB_SHOW_DIR || true)"
|
||||
if [[ -z "${show_dir}" ]]; then
|
||||
show_dir="${ROOT_DIR}/../hfb_show"
|
||||
elif [[ "${show_dir}" != /* ]]; then
|
||||
show_dir="${ROOT_DIR}/${show_dir}"
|
||||
fi
|
||||
|
||||
if [[ ! -d "${show_dir}" ]]; then
|
||||
log_error "已配置 CADDY_SHOW_DOMAIN,但找不到选号网目录:${show_dir}"
|
||||
log_error "请设置 HFB_SHOW_DIR,或把仓库放在与 hfb_sys 同级的 hfb_show"
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f "${show_dir}/package.json" ]]; then
|
||||
log_error "选号网目录无效(缺少 package.json):${show_dir}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${NO_BUILD}" == "1" ]]; then
|
||||
if [[ ! -f "${show_dist}/index.html" ]] || grep -q '选号网静态资源尚未构建' "${show_dist}/index.html" 2>/dev/null; then
|
||||
log_error "--no-build 时需要已有 deploy/caddy/show-dist 构建产物,请先完整部署一次"
|
||||
exit 1
|
||||
fi
|
||||
log_warn "使用已有 show-dist(--no-build)"
|
||||
else
|
||||
need_cmd npm
|
||||
log "构建选号网静态资源:${show_dir}"
|
||||
(
|
||||
cd "${show_dir}"
|
||||
if [[ -f package-lock.json ]]; then
|
||||
npm ci
|
||||
else
|
||||
npm install
|
||||
fi
|
||||
npm run build
|
||||
)
|
||||
if [[ ! -d "${show_dir}/dist" ]]; then
|
||||
log_error "选号网构建失败:未生成 dist/"
|
||||
exit 1
|
||||
fi
|
||||
rm -rf "${show_dist}"
|
||||
mkdir -p "${show_dist}"
|
||||
cp -a "${show_dir}/dist/." "${show_dist}/"
|
||||
log_success "选号网 dist 已同步到 deploy/caddy/show-dist"
|
||||
fi
|
||||
|
||||
if [[ ! -f "${show_tmpl}" ]]; then
|
||||
log_error "缺少 ${show_tmpl}"
|
||||
exit 1
|
||||
fi
|
||||
# 域名仅允许主机名字符,避免注入 Caddyfile
|
||||
if [[ ! "${show_domain}" =~ ^[A-Za-z0-9.-]+$ ]]; then
|
||||
log_error "CADDY_SHOW_DOMAIN 含非法字符:${show_domain}"
|
||||
exit 1
|
||||
fi
|
||||
sed "s/__CADDY_SHOW_DOMAIN__/${show_domain}/g" "${show_tmpl}" >"${show_conf}"
|
||||
log_success "已启用选号网站点:https://${show_domain}"
|
||||
}
|
||||
|
||||
public_url() {
|
||||
@@ -351,6 +449,8 @@ main() {
|
||||
validate_env
|
||||
export_caddy_env
|
||||
prepare_log_dir
|
||||
# 选号网需在 build caddy 之前准备 show-dist 与 conf.d
|
||||
prepare_show_site
|
||||
|
||||
log "检查 Docker Compose 配置..."
|
||||
compose config >/dev/null
|
||||
@@ -379,7 +479,7 @@ main() {
|
||||
log "构建后端镜像..."
|
||||
compose build backend
|
||||
|
||||
log "构建 Caddy 镜像(含前端静态资源)..."
|
||||
log "构建 Caddy 镜像(含主站 + 选号网静态资源)..."
|
||||
compose build caddy
|
||||
|
||||
log "启动生产服务..."
|
||||
@@ -405,6 +505,9 @@ main() {
|
||||
fi
|
||||
|
||||
log_success "部署完成:$(public_url)"
|
||||
if [[ -n "$(env_value CADDY_SHOW_DOMAIN || true)" ]]; then
|
||||
log_success "选号网:https://$(env_value CADDY_SHOW_DOMAIN)"
|
||||
fi
|
||||
log "常用命令:$(compose_user_cmd) logs -f caddy backend"
|
||||
|
||||
if [[ "${FOLLOW_LOGS}" == "1" ]]; then
|
||||
|
||||
Reference in New Issue
Block a user