部署选号网时无本机npm则改用Docker构建

服务器可不装Node,自动用node:24-alpine镜像执行npm ci/build。
This commit is contained in:
yml2213
2026-07-16 22:32:04 +08:00
parent a0fc23647b
commit 2c1cdb0339
2 changed files with 26 additions and 10 deletions
+1 -1
View File
@@ -50,7 +50,7 @@ HFB_SHOW_DIR=../hfb_show
要求: 要求:
1. 服务器上 `hfb_show``hfb_sys` 同级目录(或 `HFB_SHOW_DIR` 指向真实路径)。 1. 服务器上 `hfb_show``hfb_sys` 同级目录(或 `HFB_SHOW_DIR` 指向真实路径)。
2. 部署机可执行 `npm`(脚本会在 build Caddy 前构建选号网 dist)。 2. 部署机有 Docker 即可;**不必安装 Node/npm**(无 npm 时脚本用 `node:24-alpine` 容器构建选号网)。
3. 选号网域名 DNS 已指向本机。 3. 选号网域名 DNS 已指向本机。
一键脚本会自动: 一键脚本会自动:
+25 -9
View File
@@ -80,6 +80,7 @@ show_help() {
选号网独立域名,A 记录指向本机;留空则不启用 选号网独立域名,A 记录指向本机;留空则不启用
HFB_SHOW_DIR=../hfb_show HFB_SHOW_DIR=../hfb_show
选号网源码目录(相对 hfb_sys 根目录或绝对路径) 选号网源码目录(相对 hfb_sys 根目录或绝对路径)
构建优先用本机 npm;没有 npm 时自动用 Docker node 镜像,服务器不必装 Node
示例: 示例:
./scripts/deploy-prod.sh ./scripts/deploy-prod.sh
@@ -277,17 +278,32 @@ prepare_show_site() {
fi fi
log_warn "使用已有 show-dist--no-build" log_warn "使用已有 show-dist--no-build"
else else
need_cmd npm # 服务器通常无本机 Node:优先本机 npm,否则用 Docker 内 node 镜像构建
log "构建选号网静态资源:${show_dir}" log "构建选号网静态资源:${show_dir}"
( if command -v npm >/dev/null 2>&1; then
cd "${show_dir}" (
if [[ -f package-lock.json ]]; then cd "${show_dir}"
npm ci if [[ -f package-lock.json ]]; then
else npm ci
npm install else
npm install
fi
npm run build
)
else
log_warn "本机无 npm,使用 Docker 镜像 node:24-alpine 构建选号网(无需安装 Node"
need_cmd docker
local npm_cmd="npm ci && npm run build"
if [[ ! -f "${show_dir}/package-lock.json" ]]; then
npm_cmd="npm install && npm run build"
fi fi
npm run build # 挂载源码目录;node_modules/dist 写在挂载卷上,与本机 npm 行为一致
) docker run --rm \
-v "${show_dir}:/app" \
-w /app \
node:24-alpine \
sh -c "${npm_cmd}"
fi
if [[ ! -d "${show_dir}/dist" ]]; then if [[ ! -d "${show_dir}/dist" ]]; then
log_error "选号网构建失败:未生成 dist/" log_error "选号网构建失败:未生成 dist/"
exit 1 exit 1