Compare commits

...

2 Commits

Author SHA1 Message Date
whm
dfcfb477c5 fix(web): 产品视频区移除后台上传提示文案
Made-with: Cursor
2026-03-20 18:03:56 +08:00
whm
b69dde0f7e fix(deploy): 构建后同步 web/promotion 至 dist,解决 /promotion 静态 404
Made-with: Cursor
2026-03-20 17:59:13 +08:00
3 changed files with 24 additions and 2 deletions

View File

@@ -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 \

View File

@@ -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

View File

@@ -213,7 +213,7 @@
<section class="video-section" id="videos">
<div class="section-title">
<h2>产品视频</h2>
<p>视频由后台上传至 <code class="social-code">promotion/视频发布/</code>需勾选保留原文件名未上传时本地开发可走 <code class="social-code">/promotion/</code></p>
<p>以下为产品介绍视频点击即可播放</p>
</div>
<div class="video-container">
<div class="video-wrapper">