Files
admin-web/Dockerfile
T

39 lines
1.4 KiB
Docker
Raw Normal View History

2026-08-24 14:21:43 +08:00
# 构建 Vue 静态文件。CI 通过构建参数切换到内网基础镜像,
# 本地开发仍可使用 Docker Hub 默认值。
ARG NODE_IMAGE=node:22-alpine
ARG NGINX_IMAGE=nginx:1.27-alpine
FROM ${NODE_IMAGE} AS build
WORKDIR /app
2026-11-06 12:52:05 +08:00
# 为类型检查和打包留出原生内存余量,容器总内存由构建入口限制为 3GiB。
ENV NODE_OPTIONS=--max-old-space-size=2048
2026-07-30 21:40:19 +08:00
# Corepack 与 pnpm 依赖均通过 npmmirror 下载,避免构建时访问 npm 官方源过慢。
ENV COREPACK_NPM_REGISTRY=https://registry.npmmirror.com
ENV NPM_CONFIG_REGISTRY=https://registry.npmmirror.com
RUN corepack enable
COPY package.json pnpm-lock.yaml ./
COPY shared/package.json ./shared/package.json
2026-07-30 21:40:19 +08:00
# package.json 和 lock 文件未变化时,这一层会由 Docker 自动复用,
# 因此不会重复下载 pnpm 依赖。
RUN pnpm config set registry https://registry.npmmirror.com && \
2026-07-30 21:25:20 +08:00
pnpm install --frozen-lockfile
COPY . .
2026-08-08 10:14:07 +08:00
ARG VITE_CLIENT_WEB_URL
ENV VITE_CLIENT_WEB_URL=${VITE_CLIENT_WEB_URL}
2026-11-06 12:52:05 +08:00
# 类型检查通过后才生成静态产物。
2026-08-03 10:52:55 +08:00
RUN pnpm build
# 运行阶段:仅保留构建产物和 Nginx,不包含源码或 node_modules。
2026-08-24 14:21:43 +08:00
FROM ${NGINX_IMAGE}
COPY nginx/default.conf.template /etc/nginx/templates/default.conf.template
2026-08-08 11:33:09 +08:00
COPY docker/runtime-config.sh /docker-entrypoint.d/40-runtime-config.sh
RUN chmod +x /docker-entrypoint.d/40-runtime-config.sh
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80