# 前端镜像:一次构建同时产出内网包与外网包 # 构建上下文 = frontend/ (见 frontend/.dockerignore) # 站点根:/usr/share/nginx/inside(内网)、/usr/share/nginx/outside(外网) # 由两套 nginx 容器各挂一份 conf 选择站点根,镜像只读共用 FROM node:20 AS build WORKDIR /src COPY package.json ./ RUN npm config set registry https://registry.npmmirror.com \ && npm install --no-audit --no-fund COPY . . # .env.production.local 优先级高于 .env.production,用它固化两套包的差异: # VITE_API_URL=/api —— 走同域 /api,由 nginx 反代时去掉前缀 # VITE_IS_INSIDE —— true 内网包 / false 外网包 RUN set -eux; \ printf 'VITE_API_URL=/api\nVITE_IS_INSIDE=true\n' > .env.production.local; \ npx vite build --outDir dist/inside; \ printf 'VITE_API_URL=/api\nVITE_IS_INSIDE=false\n' > .env.production.local; \ npx vite build --outDir dist/outside FROM nginx:alpine COPY --from=build /src/dist/inside /usr/share/nginx/inside COPY --from=build /src/dist/outside /usr/share/nginx/outside EXPOSE 80