diff --git a/pull-and-restart.sh b/pull-and-restart.sh index b5c94d8..117844a 100755 --- a/pull-and-restart.sh +++ b/pull-and-restart.sh @@ -288,6 +288,20 @@ echo "构建 web 前端 -> deploy/web/dist ..." run_sudo docker run --rm -v "$ROOT/web:/app" -v "$ROOT/deploy/web/dist:/out" -w /app \ "${REGISTRY_MIRROR}node:20-alpine" sh -c "rm -rf /out/* 2>/dev/null; (npm ci --legacy-peer-deps 2>/dev/null || npm install --legacy-peer-deps) && npm run build && cp -r dist/. /out/" +# 官网访问的是 Nginx 根目录 deploy/web/dist,不是源码 web/;必须把 /promotion/ 静态资源拷进 dist,否则 social、logo 等一律 404 +echo "同步 web/promotion -> deploy/web/dist/promotion(排除 .mov,大视频请走后台 API)..." +mkdir -p "$ROOT/deploy/web/dist/promotion" +if command -v rsync >/dev/null 2>&1; then + rsync -a --exclude='*.mov' --exclude='*.MOV' --exclude='_pptx_extract/' \ + "$ROOT/web/promotion/" "$ROOT/deploy/web/dist/promotion/" +else + mkdir -p "$ROOT/deploy/web/dist/promotion/social" + cp -a "$ROOT/web/promotion/social/." "$ROOT/deploy/web/dist/promotion/social/" 2>/dev/null || true + [ -f "$ROOT/web/promotion/logo.png" ] && cp -a "$ROOT/web/promotion/logo.png" "$ROOT/deploy/web/dist/promotion/" || true + [ -f "$ROOT/web/promotion/index.html" ] && cp -a "$ROOT/web/promotion/index.html" "$ROOT/deploy/web/dist/promotion/" || true + echo "提示: 未检测到 rsync,仅复制了 social/logo 等;完整 promotion 请安装 rsync 后重跑本脚本。" >&2 +fi + echo "构建 admin 前端 -> deploy/admin/dist ..." # admin 的 vite 别名 @yh-web -> ../web/src,须挂载项目根,否则容器内无 web 目录会报 BlockRenderer.vue ENOENT run_sudo docker run --rm -v "$ROOT:/repo" -v "$ROOT/deploy/admin/dist:/out" -w /repo/admin \ diff --git a/web/promotion/README.md b/web/promotion/README.md index ef1ff0c..4be3470 100644 --- a/web/promotion/README.md +++ b/web/promotion/README.md @@ -9,7 +9,15 @@ ## 生产部署 -1. **前端构建产物**(`dist/`)不包含本目录。除视频外请把需要的素材 **复制** 到站点根下 `promotion/`(如 `social/`、宣传册相关),或通过 Nginx alias。**视频**推荐仅通过后台上传到 API 存储目录,无需再拷 `.mov` 到静态服务器。 +1. **关键**:线上 Docker/Nginx 的文档根是 **`deploy/web/dist/`**,浏览器请求 `https://域名/promotion/social/xxx.png` 实际读的是 **`deploy/web/dist/promotion/social/xxx.png`**。仅把文件放在源码 **`web/promotion/`**(例如 `/www/yh_web/web/promotion/`)**不会出现**,必须同步进 `dist`(`pull-and-restart.sh` 在 `npm run build` 后会自动 `rsync web/promotion` → `deploy/web/dist/promotion`,并排除 `.mov`)。 +2. **权限**:若手动拷贝,目录建议 `755`、文件至少 `644`,避免 `root` 拥有且 `640` 导致 Nginx(非 root 用户)读不到。 +3. **视频**:推荐 **后台上传** 到 `data/uploads/.../promotion/`,由 `/api/web/sites/.../promotion-media/` 提供;勿只放在源码目录指望自动对外访问。 + +--- + +(以下为原 Nginx alias 说明,可与上面 dist 同步二选一) + +1. **前端构建产物**(`dist/`)默认不含本目录时,除脚本自动同步外,也可把素材 **复制** 到站点根下 `promotion/`,或通过 Nginx alias。**视频**推荐仅通过后台上传到 API 存储目录。 2. 或使用 Nginx: ```nginx