feat(deploy): 挂载 web/public 与 web/promotion 到 yh_web,支持热更新无需重建 dist

Made-with: Cursor
This commit is contained in:
whm
2026-03-22 00:58:19 +08:00
parent 122f5b8fba
commit 66b873d0b0
4 changed files with 28 additions and 3 deletions

View File

@@ -17,7 +17,18 @@ server {
add_header Cache-Control "public, immutable"; 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 # 推广素材:文件必须真实存在,禁止落到 SPA index.html否则前端误判「静态存在」、视频拿到 HTML
# 宿主机 ./web/promotion 挂载覆盖本路径,改 social 下文件无需重新 npm build
location ^~ /promotion/ { location ^~ /promotion/ {
try_files $uri =404; try_files $uri =404;
add_header Cache-Control "public, max-age=86400"; add_header Cache-Control "public, max-age=86400";

View File

@@ -28,12 +28,14 @@ services:
networks: networks:
- yh_net - yh_net
# 静态文件由脚本构建到 deploy/web/dist,挂载后替换文件即生效 # 静态文件由脚本构建到 deploy/web/dist;另挂载源码目录便于热更新(改宿主机文件即生效,无需重建 dist
web: web:
image: ${REGISTRY_MIRROR:-docker.m.daocloud.io/library/}nginx:alpine image: ${REGISTRY_MIRROR:-docker.m.daocloud.io/library/}nginx:alpine
container_name: yh_web container_name: yh_web
volumes: volumes:
- ./deploy/web/dist:/usr/share/nginx/html:ro - ./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 - ./deploy/web/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./verify-root:/verify-root:ro - ./verify-root:/verify-root:ro
networks: networks:

View File

@@ -15,6 +15,16 @@ server {
add_header Cache-Control "public, immutable"; 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/ { location ^~ /promotion/ {
try_files $uri =404; try_files $uri =404;
add_header Cache-Control "public, max-age=86400"; add_header Cache-Control "public, max-age=86400";

View File

@@ -8,6 +8,8 @@
|------|------| |------|------|
| `logo.png` | **标签页图标**`index.html``rel="icon"` / `apple-touch-icon`+ **首页与宣传册导航**`Home.vue``BrochurePage.vue` | | `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 资源。