跳到主要内容

部署 PC 前端

ShopTNT 8.0 PC 前端包含三个可独立发布的静态应用:买家 PC 端、商家管理端和平台管理端。8.0 已不再使用旧版多工程目录,也没有 deploy.shbuild:prod 命令。

部署边界

本文提供可由源码验证的构建、产物和 Nginx 配置原则,不提供服务器账号、SSH 上传命令或固定生产目录。源码获取、制品上传、证书和服务重载必须使用部署环境已经批准的流程。

1. 确认源码版本

在 BBC 8.0 前端源码根目录确认分支和提交:

git branch --show-current
git rev-parse HEAD

分支应为 8.0。记录提交哈希,后续构建、发布和回滚都应能追溯到该提交。不要从附近的旧版目录或无关仓库推断发布源码。

2. 配置生产环境

生产构建读取仓库根目录的 .env.production。至少确认以下配置与目标环境一致:

VITE_API_GATEWAY 或 VITE_API_BASE、VITE_API_BUYER、VITE_API_SELLER、VITE_API_ADMIN
VITE_DOMAIN_PC、VITE_DOMAIN_MOBILE、VITE_DOMAIN_SELLER、VITE_DOMAIN_ADMIN
VITE_BASE_PC、VITE_BASE_SELLER、VITE_BASE_ADMIN
VITE_ASSETS_PC、VITE_ASSETS_SELLER、VITE_ASSETS_ADMIN
VITE_DISTRIBUTION、VITE_I18N、VITE_IM、VITE_LIVEVIDEO

VITE_* 会写入浏览器产物,只能放公开配置,不能包含服务器密码、数据库密码、私钥或令牌。三端分别使用独立域名时,VITE_BASE_* 通常留空;部署到同一域名子路径时,构建路径必须和 Nginx location 完全一致。

3. 安装依赖并构建

仓库声明使用 pnpm@11.7.0

corepack enable
corepack prepare pnpm@11.7.0 --activate
test "$(pnpm --version)" = "11.7.0"
pnpm install --frozen-lockfile
pnpm typecheck
pnpm lint
pnpm locale:check
pnpm build

任一质量检查或构建命令非零退出都必须停止发布。pnpm build 使用 production mode 构建全部三端。产物位于:

apps/pc/dist
apps/seller/dist
apps/admin/dist

构建结束后确认三个入口和版本文件都存在:

test -s apps/pc/dist/index.html
test -s apps/pc/dist/version
test -s apps/seller/dist/index.html
test -s apps/seller/dist/version
test -s apps/admin/dist/index.html
test -s apps/admin/dist/version

任一命令非零退出都必须停止发布。Vite 的大分包提示是容量警告,但编译错误、缺少环境变量或缺少产物不能忽略。

4. 发布静态产物

只发布三个 dist 目录中的内容,不要把源码、.env.productionnode_modules.git 放进 Web 根目录。

推荐让每次发布拥有独立、不可变的版本目录,并在验证完成后切换当前版本,例如:

/var/www/shop-tnt/releases/<发布批次>/pc
/var/www/shop-tnt/releases/<发布批次>/seller
/var/www/shop-tnt/releases/<发布批次>/admin
/var/www/shop-tnt/current -> /var/www/shop-tnt/releases/<发布批次>

这里的路径只是目录布局示例。实际上传、备份和切换命令以部署平台为准。切换时应保证同一端的 index.htmlversionassets/ 同批生效,避免新旧资源混合。

5. 配置 Nginx

以下示例只描述静态站点和 SPA 刷新回退;域名、TLS 证书、缓存、日志和 API 代理按实际环境补充。

独立域名

三端使用独立域名时,每个站点的 root 指向对应产物目录:

server {
listen 80;
server_name seller.example.com;

root /var/www/shop-tnt/current/seller;
index index.html;

location / {
try_files $uri $uri/ /index.html;
}
}

买家 PC 端和平台管理端使用相同结构,分别指向 pcadmin 目录。

同域名子路径

如果买家 PC 端位于根路径,商家端和平台端分别位于 /seller//admin/,生产环境应配置:

VITE_BASE_PC=
VITE_BASE_SELLER=seller
VITE_BASE_ADMIN=admin

同域名发布时先准备一个组合 Web 根目录,例如把买家 PC 端产物内容放入 current/webroot,把 Seller、Admin 产物内容分别放入 current/webroot/sellercurrent/webroot/admin,再配置:

server {
listen 80;
server_name www.example.com;

root /var/www/shop-tnt/current/webroot;
index index.html;

location / {
try_files $uri $uri/ /index.html;
}

location /seller/ {
try_files $uri $uri/ /seller/index.html;
}

location /admin/ {
try_files $uri $uri/ /admin/index.html;
}
}

修改配置后先执行:

nginx -t

只有语法检查成功后,才使用当前服务器既有的服务管理方式重载 Nginx。不要在不清楚发行版、安装路径和权限模型时照搬固定的重启命令。

6. 上线验证

发布后逐端检查:

  1. 首页、登录页和至少一个二级页面返回 200。
  2. 二级页面直接打开和刷新都不会返回 Nginx 404。
  3. JS、CSS、字体、图片及 version 文件返回 200。
  4. API 请求指向正确环境,没有 CORS、Mixed Content 或连续 401。
  5. Admin、Seller 菜单与当前账号权限和功能开关一致。
  6. 页面源代码或构建资源中没有本机地址、测试域名或敏感信息。

构建通过只证明能生成静态文件,不等于登录、菜单、接口和关键业务流程已经验收。

7. 回滚

回滚时切回上一批已经验证的完整三端制品,再执行 nginx -t 和同样的访问检查。不要只回滚 index.html,也不要把旧 HTML 与新 assets/ 混合使用。