From 2c1cdb03394f657b9866bfee2155a3735b20547d Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 16 Jul 2026 22:32:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E7=BD=B2=E9=80=89=E5=8F=B7=E7=BD=91?= =?UTF-8?q?=E6=97=B6=E6=97=A0=E6=9C=AC=E6=9C=BAnpm=E5=88=99=E6=94=B9?= =?UTF-8?q?=E7=94=A8Docker=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 服务器可不装Node,自动用node:24-alpine镜像执行npm ci/build。 --- deploy/README.md | 2 +- scripts/deploy-prod.sh | 34 +++++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index daf91f6..62418e2 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -50,7 +50,7 @@ HFB_SHOW_DIR=../hfb_show 要求: 1. 服务器上 `hfb_show` 与 `hfb_sys` 同级目录(或 `HFB_SHOW_DIR` 指向真实路径)。 -2. 部署机可执行 `npm`(脚本会在 build Caddy 前构建选号网 dist)。 +2. 部署机有 Docker 即可;**不必安装 Node/npm**(无 npm 时脚本用 `node:24-alpine` 容器构建选号网)。 3. 选号网域名 DNS 已指向本机。 一键脚本会自动: diff --git a/scripts/deploy-prod.sh b/scripts/deploy-prod.sh index a1d8463..ffe7eb3 100755 --- a/scripts/deploy-prod.sh +++ b/scripts/deploy-prod.sh @@ -80,6 +80,7 @@ show_help() { 选号网独立域名,A 记录指向本机;留空则不启用 HFB_SHOW_DIR=../hfb_show 选号网源码目录(相对 hfb_sys 根目录或绝对路径) + 构建优先用本机 npm;没有 npm 时自动用 Docker node 镜像,服务器不必装 Node 示例: ./scripts/deploy-prod.sh @@ -277,17 +278,32 @@ prepare_show_site() { fi log_warn "使用已有 show-dist(--no-build)" else - need_cmd npm + # 服务器通常无本机 Node:优先本机 npm,否则用 Docker 内 node 镜像构建 log "构建选号网静态资源:${show_dir}" - ( - cd "${show_dir}" - if [[ -f package-lock.json ]]; then - npm ci - else - npm install + if command -v npm >/dev/null 2>&1; then + ( + cd "${show_dir}" + if [[ -f package-lock.json ]]; then + npm ci + 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 - 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 log_error "选号网构建失败:未生成 dist/" exit 1