29 lines
1.1 KiB
Docker
29 lines
1.1 KiB
Docker
|
|
# 前端镜像:一次构建同时产出内网包与外网包
|
|||
|
|
# 构建上下文 = 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
|