发布脚本更新
This commit is contained in:
@@ -337,30 +337,16 @@ npm run deploy:test
|
||||
|
||||
## 正式服上传
|
||||
|
||||
使用既有跳板机 `running.sh` 链路:
|
||||
正式服为 `root@172.104.166.87`,Supervisor 程序 `web_huakui_h5` 在 `/web_huakui/h5/app` 执行 `node start.mjs`(端口 26935,Nginx `webhuakuih5.mfcg.me` 代理到该端口,`/enkey`、`/newenkey` 直接走 Go 服务 20031)。
|
||||
|
||||
```bash
|
||||
npm run deploy:prod -- --dry-run # 只核对配置,不构建、不连接
|
||||
npm run deploy:prod -- --package-only # 检查、构建、生成运行包与 MD5,不上传
|
||||
npm run deploy:prod # 构建、上传并执行正式服 running.sh
|
||||
npm run deploy:prod # 构建、上传、切换并重启
|
||||
```
|
||||
|
||||
脚本执行 `check` → `build` → `bundle` → `bundle:linux`,生成根目录 `web_hkdj_h5.tar.gz` 和 `web_hkdj_h5.md5`(仅一行 MD5 hash)。tar 根部直接包含 `start.mjs`、`server.js`、`.next/`(含静态资源)、`public/`(含 PWA Worker/图标)、`config/production.env`、媒体密钥、必要数据及 `node_modules/`,不套 `dist/production/` 外层目录。
|
||||
脚本执行 `check` → `build` → `bundle` → `bundle:linux`,生成根目录 `web_huakui_h5.tar.gz` 和 `web_huakui_h5.md5`。tar 根部直接包含 `start.mjs`、`server.js`、`.next/`、`public/`、`config/production.env`、媒体密钥和裁剪后的 `node_modules/`,服务器无需 `npm install`。本地缺少忽略提交的 `config/secrets/m3u8.key` 时,构建前从服务器当前版本复制一份。
|
||||
|
||||
本机最低 Node.js 20.9、npm **10.9.2**,推荐 Node.js 22。正式包保留 Next standalone 已跟踪并裁剪的 `node_modules`;只在临时目录安装与 Linux 目标匹配的 Sharp/libvips 两个原生包,以替换 macOS 原生文件,版本、下载地址和 integrity 均取仓库 lockfile。最终输出为 `dist/production-linux-x64-glibc/`,包含裁剪后的 Next/React/Sharp 运行文件、`dotenv`、`@swc/helpers` 和已跟踪的 WASM 回退,不携带完整 Next 安装树、SWC 原生编译器、Playwright 或未跟踪的客户端依赖。包内无需执行 `npm install`,直接 `node start.mjs`;临时安装树不会进入发布包。
|
||||
上传到 `/web_huakui/h5/` 后,服务器校验 MD5,解压到 `app.new`,沿用当前 `app/` 中的 `config/secrets/m3u8.key` 和 `config/*.local.env`,再将 `app` 改名为 `app.prev`、`app.new` 改名为 `app`,执行 `supervisorctl restart web_huakui_h5`。随后检查本机 `/healthz`(`status=ok`)和首页;失败则把新版本移到 `app.failed`,恢复 `app.prev` 并重启。可用 `DEPLOY_HOST`、`DEPLOY_SSH_PORT`、`DEPLOY_DIR`、`DEPLOY_PROGRAM`、`DEPLOY_TARGET_ARCH`、`DEPLOY_TARGET_LIBC` 覆盖默认值。
|
||||
|
||||
默认目标为 Linux **x64/glibc**;可设置 `DEPLOY_TARGET_ARCH=x64|arm64`、`DEPLOY_TARGET_LIBC=glibc|musl`。仓库 package/lock、本机依赖及 `dist/production/` 保持独立。运行包排除 `.env*`、`*.local.env`、日志及 macOS 元数据,密钥随包提供;生产私密覆盖配置需在服务器提供,并由服务器发布脚本保留。
|
||||
|
||||
默认上传及触发命令严格对应两种端口约定:
|
||||
|
||||
```bash
|
||||
scp -P 22889 web_hkdj_h5.tar.gz web_hkdj_h5.md5 \
|
||||
server@116.212.120.2:/home/server/web_hkdj/h5/nuxt/
|
||||
ssh -p 22 server@116.212.120.2 /home/server/web_hkdj/h5/nuxt/running.sh
|
||||
```
|
||||
|
||||
可通过 `DEPLOY_JUMP_HOST`、`DEPLOY_JUMP_DIR`、`DEPLOY_SCP_PORT`、`DEPLOY_SSH_PORT` 覆盖连接参数。跳板机脚本只能按完整路径执行,不带参数或额外 shell 命令;脚本和正式机 `up_node_h5.sh` 由既有部署链路管理。同仓库使用发布锁防止并发构建/上传覆盖同名包,构建后显示压缩包体积。任何构建、上传或远端执行失败均返回非零,本地包留存;正式脚本输出保存到 `dist/production-running.*`,即使远端返回 0,出现 `BACKOFF`、`FATAL`、`ERROR` 或 `spawn error` 也会判定失败。端口和健康检查由服务器发布脚本负责。正式站 Nginx 应将页面及 Next/BFF/媒体资源代理至 `26935`,公网域名需在发布后另行验证。
|
||||
|
||||
正式机 `up_node_h5.sh` 必须完整复制隐藏目录,例如 `cp -rf "$STAGING/." "$APP_DIR/"`;使用 `$STAGING/*` 会漏掉必要的 `.next/`。覆盖前保留 `.local.env`、媒体密钥、`template/pages/sitemaps` 和 `template/pages/sitemap.xml`,服务器已有 XML 优先于包内同名文件;外置 `SITEMAP_DIR` 或挂载目录不得随版本目录删除。复制后应检查 `.next/BUILD_ID` 和 `start.mjs`,启动一次并检查 Supervisor 状态,复制或启动失败须返回非零状态。该远端脚本由既有链路管理,不包含在本仓库。
|
||||
|
||||
正式 Next 运行目录使用 `/server/web_hkdj/h5/next/`,Supervisor 的 `directory` 与更新脚本的 `APP_DIR` 必须一致;更新脚本先创建目录,再检查 `cd` 是否成功。不要直接运行在旧 Go 的目录里:Next 会优先读取根部遗留的 `static/`,遮盖新包的 `public/static/`。`start.mjs` 检测到这种混用会拒绝启动;迁移时保留服务器的本地环境覆盖和 sitemap 数据。
|
||||
本机最低 Node.js 20.9、npm **10.9.2**,推荐 Node.js 22。默认目标 Linux **x64/glibc**,只在临时目录补装目标平台的 Sharp/libvips 原生包,版本与 integrity 取自 lockfile。
|
||||
|
||||
Reference in New Issue
Block a user