Files
web/Dockerfile

58 lines
1.6 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多段构建 - 第一阶段:构建应用
# pnpm-lock.yaml 为 lockfileVersion 9需要 pnpm v9要求 Node >= 18
FROM node:18-alpine AS builder
WORKDIR /app
# 可选:使用哪种包管理器构建(默认 pnpm也可传 npm
ARG PKG_MANAGER=pnpm
# 可选:镜像加速(例如 https://registry.npmmirror.com
ARG NPM_REGISTRY=https://registry.npmmirror.com
ENV CI=true
# 先复制依赖清单,最大化缓存命中
COPY package.json ./
COPY package-lock.json* pnpm-lock.yaml* yarn.lock* ./
RUN if [ -n "$NPM_REGISTRY" ]; then npm config set registry "$NPM_REGISTRY"; fi
RUN set -eux; \
if [ "$PKG_MANAGER" = "pnpm" ]; then \
npm i -g pnpm@9; \
if [ -n "$NPM_REGISTRY" ]; then pnpm config set registry "$NPM_REGISTRY"; fi; \
pnpm i --frozen-lockfile; \
elif [ "$PKG_MANAGER" = "npm" ]; then \
npm ci --no-audit --fund=false; \
else \
echo "Unsupported PKG_MANAGER=$PKG_MANAGER (use pnpm or npm)"; \
exit 1; \
fi
# 复制源代码
COPY . .
RUN set -eux; \
if [ "$PKG_MANAGER" = "pnpm" ]; then \
pnpm run build:prod; \
else \
npm run build:prod; \
fi
# 多段构建 - 第二阶段Nginx部署
FROM nginx:alpine AS final
# 复制自定义nginx配置
COPY nginx.conf /etc/nginx/nginx.conf
# 从构建阶段复制构建产物
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
# 健康检查:使用 nginx.conf 的 /health避免额外安装 curl
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -qO- http://127.0.0.1/health >/dev/null || exit 1
CMD ["nginx", "-g", "daemon off;"]