Files
2026-09-11 21:03:53 +08:00

78 lines
2.9 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.
# 基础镜像走 DaoCloud(避免 docker.1ms.run 等加速站缺 node/nginx manifest)
ARG NODE_IMAGE=docker.m.daocloud.io/library/node:20-alpine
ARG NGINX_IMAGE=docker.m.daocloud.io/library/nginx:1.27-alpine
# ---------- OA H5(mobile-oa-h5 → /oa-h5/)----------
FROM ${NODE_IMAGE} AS oa-h5-builder
ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG NODE_MAX_OLD_SPACE_SIZE=4096
ENV NODE_OPTIONS="--max-old-space-size=${NODE_MAX_OLD_SPACE_SIZE}"
ENV HUSKY=0
RUN npm config set registry "${NPM_REGISTRY}" \
&& npm config set fetch-retries 5 \
&& npm config set fetch-retry-mintimeout 60000 \
&& npm config set fetch-retry-maxtimeout 600000 \
&& npm config set fetch-timeout 600000
WORKDIR /oa-h5
COPY mobile-oa-h5/package.json mobile-oa-h5/package-lock.json ./
RUN --mount=type=cache,id=zkxw-oa-h5-npm,target=/root/.npm \
npm ci --no-audit --no-fund
COPY mobile-oa-h5/ .
# 同域 /api、/minio/zkxw + 生产服务号 AppID(见 .env.docker)
RUN npm run build -- --mode docker
# ---------- Web Admin ----------
FROM ${NODE_IMAGE} AS builder
ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG PNPM_VERSION=9.15.4
ARG NODE_MAX_OLD_SPACE_SIZE=4096
ENV NODE_OPTIONS="--max-old-space-size=${NODE_MAX_OLD_SPACE_SIZE}"
# 构建阶段须安装 devDependencies(vite 等);勿设 NODE_ENV=production
ENV HUSKY=0
# 国内机器勿用 registry.npmjs.org;先走镜像元数据,失败再直装 tarball
RUN set -eux; \
npm config set registry "${NPM_REGISTRY}"; \
npm config set fetch-retries 5; \
npm config set fetch-retry-mintimeout 60000; \
npm config set fetch-retry-maxtimeout 600000; \
npm config set fetch-timeout 600000; \
if ! npm install -g "pnpm@${PNPM_VERSION}"; then \
echo "npm 元数据安装 pnpm 失败,尝试 tarball: ${NPM_REGISTRY}/pnpm/-/pnpm-${PNPM_VERSION}.tgz"; \
npm install -g "${NPM_REGISTRY}/pnpm/-/pnpm-${PNPM_VERSION}.tgz"; \
fi; \
pnpm --version
WORKDIR /app
COPY web-admin/package.json web-admin/pnpm-lock.yaml ./
# BuildKit 缓存 pnpm store;提高 fetch 重试与超时,缓解 npmmirror ETIMEDOUT
RUN --mount=type=cache,id=zkxw-pnpm-store,target=/root/.local/share/pnpm/store \
pnpm config set registry "${NPM_REGISTRY}" \
&& pnpm config set fetch-retries 5 \
&& pnpm config set fetch-retry-mintimeout 60000 \
&& pnpm config set fetch-retry-maxtimeout 600000 \
&& pnpm config set network-timeout 600000 \
&& pnpm install --frozen-lockfile
COPY web-admin/ .
# docker 模式:esbuild 压缩 + 关闭 devtools/预压缩,降低构建内存(见 vite.config.ts)
RUN pnpm exec vite build --mode docker
FROM ${NGINX_IMAGE}
COPY deploy/docker/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /usr/share/nginx/html
COPY --from=oa-h5-builder /oa-h5/dist /usr/share/nginx/html/oa-h5
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD wget -qO- http://127.0.0.1/ || exit 1