Files
frontend-miniapp/docs/H5_DEPLOYMENT_GUIDE.md
lyf 8fed715235
Some checks failed
CI / verify (push) Has been cancelled
chore: sync latest project updates
2026-07-03 14:42:38 +08:00

206 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# H5 部署说明
最后更新2026-06-12
## 目标环境
- 域名https://guide.whaoyue.com/
- SSH 连接别名:`自然博物馆-测试服务器`
- 服务器 IP`1.92.206.90`
- 站点宿主目录:`/dmdata/nginx/html/guide`
- Nginx 配置:`/dmdata/nginx/conf.d/guide.whaoyue.com.conf`
- Nginx 容器:`nginx-server`
- H5 构建目录:`dist/build/h5`
说明Nginx 容器内站点根目录为 `/usr/share/nginx/html/guide`,宿主机对应目录为 `/dmdata/nginx/html/guide`
## 本地构建
在项目根目录执行:
```powershell
pnpm install
pnpm type-check
pnpm build:h5
```
`pnpm build:h5` 会先执行 `uni build -p h5`,再执行 `scripts/copy-h5-nav-assets.cjs`,把 `static/nav-assets` 复制到 `dist/build/h5/static/nav-assets`
构建后重点检查:
```powershell
Get-ChildItem -LiteralPath 'dist\build\h5\static\nav-assets\app_nav_assets_v2_clean_20260611_093623' -Recurse -File |
Measure-Object Length -Sum |
Select-Object Count,Sum
```
当前导航模型资源包应包含 `25` 个文件,文件总字节数约 `26811587`
## 部署步骤
生成部署包:
```powershell
New-Item -ItemType Directory -Force -Path '.tmp' | Out-Null
$archive = '.tmp\museum-guide-h5.tar.gz'
if (Test-Path -LiteralPath $archive) { Remove-Item -LiteralPath $archive -Force }
tar -C 'dist\build\h5' -czf $archive .
```
上传到服务器:
```powershell
scp -o BatchMode=yes '.tmp\museum-guide-h5.tar.gz' '自然博物馆-测试服务器:/tmp/museum-guide-h5.tar.gz'
```
替换线上站点:
```powershell
ssh -o BatchMode=yes '自然博物馆-测试服务器' 'set -e
SITE=/dmdata/nginx/html/guide
ARCHIVE=/tmp/museum-guide-h5.tar.gz
TS=$(date +%Y%m%d%H%M%S)
BACKUP_DIR=/dmdata/nginx/html/_backups
[ "$SITE" = "/dmdata/nginx/html/guide" ]
test -f "$ARCHIVE"
mkdir -p "$SITE" "$BACKUP_DIR"
tar -C "$SITE" -czf "$BACKUP_DIR/guide-before-deploy-$TS.tar.gz" .
find "$SITE" -mindepth 1 -maxdepth 1 ! -name ".well-known" -exec rm -rf -- {} +
tar -C "$SITE" -xzf "$ARCHIVE"
mkdir -p "$SITE/.well-known/acme-challenge"
chown -R root:root "$SITE"
docker exec nginx-server nginx -t
docker exec nginx-server nginx -s reload
printf "backup=%s\n" "$BACKUP_DIR/guide-before-deploy-$TS.tar.gz"
printf "files=%s\n" "$(find "$SITE" -type f | wc -l)"
'
```
## Nginx 关键配置
`/static/nav-assets/` 必须独立配置避免模型、manifest、楼层数据缺失时落入 SPA 的 `/index.html` 回退。
```nginx
location ^~ /static/nav-assets/ {
types {
application/json json;
model/gltf-binary glb;
model/gltf+json gltf;
text/csv csv;
text/markdown md;
}
default_type application/octet-stream;
expires 30d;
add_header Cache-Control "public";
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.html;
}
```
每次修改配置后执行:
```powershell
ssh -o BatchMode=yes '自然博物馆-测试服务器' 'docker exec nginx-server nginx -t && docker exec nginx-server nginx -s reload'
```
## 部署后验证
公网资源响应:
```powershell
curl.exe -I --max-time 30 https://guide.whaoyue.com/static/nav-assets/app_nav_assets_v2_clean_20260611_093623/app_nav_manifest.json
curl.exe -I --max-time 30 https://guide.whaoyue.com/static/nav-assets/app_nav_assets_v2_clean_20260611_093623/models_by_floor/L1.glb
curl.exe -I --max-time 30 https://guide.whaoyue.com/static/nav-assets/app_nav_assets_v2_clean_20260611_093623/models_by_floor/MISSING.glb
```
预期结果:
- `app_nav_manifest.json``200``Content-Type: application/json`
- `models_by_floor/L1.glb``200``Content-Type: model/gltf-binary`
- 缺失 GLB`404`,不能返回 `index.html`
### 域名根目录校验文件
如第三方平台要求在域名根目录放置 TXT 校验文件,可上传到站点宿主目录:
```powershell
scp -o BatchMode=yes 'E:\MyWork\深圳自然馆\服务器信息\对接文档\gpL0svkeao.txt' '自然博物馆-测试服务器:/dmdata/nginx/html/guide/gpL0svkeao.txt'
```
验证:
```powershell
curl.exe -L --max-time 30 https://guide.whaoyue.com/gpL0svkeao.txt
```
当前 `gpL0svkeao.txt` 预期返回:
```text
b772216640a14171ba5655085c8523be
```
页面验证:
- 打开 https://guide.whaoyue.com/#/
- 切换到 `馆内3D`
- 首次进入应加载当前楼层模型,而不是先加载全馆 overview 模型
- 不应出现 `Unexpected token '<', "<!DOCTYPE "... is not valid JSON`
## 常见问题
### 模型请求返回 HTML
现象:
```text
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
```
原因通常是 H5 产物缺少 `static/nav-assets`,或 Nginx 未对 `/static/nav-assets/` 使用 `try_files $uri =404`
处理:
1. 确认 `pnpm build:h5` 已执行资源复制脚本。
2. 确认服务器存在 `/dmdata/nginx/html/guide/static/nav-assets/app_nav_assets_v2_clean_20260611_093623`
3. 确认 Nginx `/static/nav-assets/` 配置生效。
4. 强刷浏览器,避免继续使用旧 JS。
### 馆内 3D 首屏加载过慢
导览页已配置为 `initial-view="floor"`,进入馆内 3D 时优先加载当前楼层模型。不要在导览壳层中默认加载全馆 overview 模型,否则低性能设备可能长时间停留在 100% 或页面无响应。
### 浏览器缓存旧包
如果线上已经替换但页面仍异常,使用带参数的地址强制刷新:
```text
https://guide.whaoyue.com/?v=YYYYMMDDHHmm#/
```
## 回滚
部署脚本会在 `/dmdata/nginx/html/_backups` 下生成备份包。回滚示例:
```powershell
ssh -o BatchMode=yes '自然博物馆-测试服务器' 'set -e
SITE=/dmdata/nginx/html/guide
BACKUP=/dmdata/nginx/html/_backups/guide-before-deploy-YYYYMMDDHHmmss.tar.gz
[ "$SITE" = "/dmdata/nginx/html/guide" ]
test -f "$BACKUP"
find "$SITE" -mindepth 1 -maxdepth 1 ! -name ".well-known" -exec rm -rf -- {} +
tar -C "$SITE" -xzf "$BACKUP"
docker exec nginx-server nginx -t
docker exec nginx-server nginx -s reload
'
```
## 最近部署记录
- 2026-06-10补齐 H5 模型资源打包,新增 `/static/nav-assets/` Nginx 规则,修复模型资源请求返回 HTML 的问题。
- 2026-06-10馆内 3D 默认加载当前楼层模型,减少首屏模型解析压力。线上备份:`/dmdata/nginx/html/_backups/guide-before-floor-first-20260610033959.tar.gz`
- 2026-06-10上传域名根目录校验文件 `gpL0svkeao.txt`,公网验证地址为 `https://guide.whaoyue.com/gpL0svkeao.txt`
- 2026-06-12按 H5 模式重新打包并部署功能更新,线上资源包为 `app_nav_assets_v2_clean_20260611_093623`。验证通过:`pnpm type-check``pnpm build:h5`、Nginx `nginx -t`、manifest 200 JSON、L1.glb 200 `model/gltf-binary`、缺失 GLB 404。线上备份`/dmdata/nginx/html/_backups/guide-before-deploy-20260612032520.tar.gz`