FROM nginx:alpine # Static showcase image. Keep the existing site, demos, contracts and test entrypoints. COPY nginx.conf /etc/nginx/conf.d/default.conf COPY site/ /usr/share/nginx/html/site/ COPY frameworks/ /usr/share/nginx/html/frameworks/ # 移动端平台实现 + PC×uni-app 端实现(两轴:平台 pc|mobile × 端 css|html|jsx|vue2|vue3|uniapp,见 PLATFORMS.md) COPY frameworks-mobile/ /usr/share/nginx/html/frameworks-mobile/ COPY frameworks-uniapp-pc/ /usr/share/nginx/html/frameworks-uniapp-pc/ COPY .design_library/ /usr/share/nginx/html/.design_library/ COPY tests/ /usr/share/nginx/html/tests/ COPY sitemap.xml /usr/share/nginx/html/sitemap.xml # 版本清单:站点根在部署前缀下时 URL 是 /versions.json(站点根由 pathname 反推) COPY versions.json /usr/share/nginx/html/versions.json # 历史版本文档站快照(tools/snapshot-site.mjs 产出):仓库根的 / 目录, # URL 形如 /1.4.1/site/…。 # # ⚠️ 必须逐版本显式写目标目录,不能用通配 `COPY [0-9]*.[0-9]*.[0-9]*/ /usr/share/nginx/html/`: # COPY 源带结尾斜杠时复制的是**目录内容**,通配会把每个快照的 site/、frameworks/、 # sitemap.xml 原地合并进站点根 —— 于是快照那份**旧构建**覆盖掉本次构建的根站点 # (2026-09-20 实测:镜像里 /site/data.js 的 generated 是快照那次的 05:27、根 # /frameworks/ 多出改名前的 21 个小写演示页、/site/style.css 缺新规则), # 同时 /1.4.1/ 目录根本没被建出来 → nginx 版本 location 找不到目标 → **500**。 # 归档新版本时必须在这里补一行(tools/verify-versions.mjs 会卡这条一致性)。 # # 当前仓库还没有归档任何历史版本(开发期只有当前版本,切换器按单版本降级为纯角标); # 以后跑 `npm run snapshot:site -- ` 归档后,在此补一行: # COPY /usr/share/nginx/html/ # 构建上下文可能携带 700 目录权限;统一放开静态资源可读可执行位 RUN chmod -R a+rX /usr/share/nginx/html/ EXPOSE 80 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://127.0.0.1/healthz || exit 1 CMD ["nginx", "-g", "daemon off;"]