diff --git a/deploy/web/default.conf b/deploy/web/default.conf index 6da25f6..e49832f 100644 --- a/deploy/web/default.conf +++ b/deploy/web/default.conf @@ -17,7 +17,18 @@ server { add_header Cache-Control "public, immutable"; } + # web/public 挂载到 /var/www/yh-public:与 dist 根目录同 URL(如 /logo.png),优先读挂载,无则回退 dist + location ~ ^/([^/]+\.(?:png|jpe?g|gif|ico|svg|webp|webmanifest))$ { + root /var/www/yh-public; + try_files /$1 @dist_root_public; + } + location @dist_root_public { + root /usr/share/nginx/html; + try_files $uri =404; + } + # 推广素材:文件必须真实存在,禁止落到 SPA index.html(否则前端误判「静态存在」、视频拿到 HTML) + # 宿主机 ./web/promotion 挂载覆盖本路径,改 social 下文件无需重新 npm build location ^~ /promotion/ { try_files $uri =404; add_header Cache-Control "public, max-age=86400"; diff --git a/docker-compose.yml b/docker-compose.yml index 91680d9..60984fd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,12 +28,14 @@ services: networks: - yh_net - # 静态文件由脚本构建到 deploy/web/dist,挂载后替换文件即可生效 + # 静态文件由脚本构建到 deploy/web/dist;另挂载源码目录便于热更新(改宿主机文件即生效,无需重建 dist) web: image: ${REGISTRY_MIRROR:-docker.m.daocloud.io/library/}nginx:alpine container_name: yh_web volumes: - ./deploy/web/dist:/usr/share/nginx/html:ro + - ./web/promotion:/usr/share/nginx/html/promotion:ro + - ./web/public:/var/www/yh-public:ro - ./deploy/web/default.conf:/etc/nginx/conf.d/default.conf:ro - ./verify-root:/verify-root:ro networks: diff --git a/nginx/web.conf b/nginx/web.conf index f5ffd8c..e7d8eff 100644 --- a/nginx/web.conf +++ b/nginx/web.conf @@ -15,6 +15,16 @@ server { add_header Cache-Control "public, immutable"; } + # web/public 挂载 /var/www/yh-public;单段文件名同 dist 根 URL,优先挂载后回退 dist + location ~ ^/([^/]+\.(?:png|jpe?g|gif|ico|svg|webp|webmanifest))$ { + root /var/www/yh-public; + try_files /$1 @dist_root_public; + } + location @dist_root_public { + root /usr/share/nginx/html; + try_files $uri =404; + } + location ^~ /promotion/ { try_files $uri =404; add_header Cache-Control "public, max-age=86400"; diff --git a/web/public/README.md b/web/public/README.md index 2064d77..0127637 100644 --- a/web/public/README.md +++ b/web/public/README.md @@ -8,6 +8,8 @@ |------|------| | `logo.png` | **标签页图标**(`index.html` 的 `rel="icon"` / `apple-touch-icon`)+ **首页与宣传册导航**(`Home.vue`、`BrochurePage.vue`) | -更新品牌时替换本目录下的 `logo.png` 后重新构建即可(可与 `promotion/logo.png` 保持同图或分别维护)。 +更新品牌时替换本目录下的 `logo.png` 即可。 -**注意**:`public` 里的路径不要用 `src/assets` 那种写法;引用时始终用**根路径**,例如 `/logo.png`。 +**Docker 部署**:`docker-compose` 已将 **`web/public` → 容器内 `/var/www/yh-public`** 只读挂载,`deploy/web/default.conf` 中配置了「根路径下单段静态文件名优先读挂载、否则回退 `dist`」。**改宿主机 `web/public/` 内文件后无需 `npm run build`**,刷新即可(注意浏览器缓存)。 + +**注意**:引用时用**根路径** `/logo.png`,不要用 `src/assets` 的 import 方式写 public 资源。