DEPLOY_STATIC.md 文档补强:增加 npm 镜像源与 named volume 提示 #2
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
在阿里云 ECS 上按
DEPLOY_STATIC.md"构建静态文件" 章节执行一次性容器 build 时,首次 build 卡了 5 分钟超时未结束,需要文档补强。Issue #1 已 closed(部署完成),这个是新发现的环境层问题,单独开 issue。
问题
DEPLOY_STATIC.md当前推荐的构建命令:在阿里云 ECS 上有两个实际问题:
1. 官方 npm registry 连不上(导致 build 卡死)
服务器在阿里云网络,官方
https://registry.npmjs.org/经常连不上。npm ci会持续重试到超时,体感是 build 卡住。实测对比:
curl https://registry.npmjs.org/vite→ 超时 10 秒curl https://registry.npmmirror.com/vite→ 2.3 秒完成,HTTP 200切到阿里云镜像后,
npm ci && npm run build:static整体 5 秒搞定。2.
--tmpfs /src/node_modules默认 noexec,导致 esbuild postinstall 失败之前尝试过
--tmpfs方式,esbuild 的 postinstall binary (/src/node_modules/esbuild/bin/esbuild) 会报EACCES、spawnSync EACCES。原因是
tmpfs默认 mount 选项是noexec,可执行文件没法跑。建议修改
A. 在 "构建静态文件" 章节前面加一步
B. 把
--tmpfs /src/node_modules替换成 named docker volume把:
改成:
理由:
noexec问题node_modules,npm ci 更快docker volume rm duoji-node-modules时才销毁,不会污染宿主机C. "后续更新" 章节的 build 命令也加同样修改
文档末尾的更新流程里
docker run ...那段是同样的命令,需要同步改。验证
应用文档修改后:
预期:build 整体 30 秒内完成(首次),3-5 秒完成(volume 缓存命中后)。
不需要做的事
Dockerfile.static—— 它是独立服务器场景,跟这次问题无关deploy/nginx-static.conf—— 同上(实施层反馈,跟 Issue #1 是同一个上下文但不同问题。Issue #1 是部署方案整体,这个是文档细节。)
建议同步补强首次构建和后续更新命令:
建议命令示例:
docker run --rm -v "$PWD":/src -v duoji-node-modules:/src/node_modules -v duoji-npm-cache:/root/.npm -w /src -e npm_config_registry=https://registry.npmmirror.com node:22-alpine sh -lc 'npm ci --no-audit --no-fund && npm run build:static'
已采纳,更新完成 ✅
按你的建议改完了,commit
fb2a346 Document npm registry mirror and Docker named volumes for builds。采纳的 5 点(对应你的建议 #1-#5):
npm_config_registry环境变量 而非npm config set,默认不传;非中国大陆环境不受影响 ✓duoji-node-modulesnamed volume 替代--tmpfs✓duoji-npm-cache到/root/.npm✓npm ci会重建 node_modules:named volume 主要解决noexec和隔离问题,缓存加速由/root/.npm卷负责 ✓docker volume rm duoji-node-modules/docker volume rm duoji-npm-cache清理方法 ✓额外补的两个点:
--no-audit --no-fund:跳过 npm 审计和赞助,加快部署速度部署验证
服务器上跑了新命令验证:
实际耗时 38 秒(npm ci 33s + build 5.7s),产物 120M,rsync 到
/var/www/duoji/后https://duoji.dbpi.com.cn/200,gdm.dbpi.com.cn和wisdomplay.dbpi.com.cn均不受影响。容器无重启(只换了静态文件)。下次更新可以走"后续更新"章节那套命令,预计 npm ci 在 volume 缓存命中后会降到几秒。