# 构建阶段 FROM crpi-jlsdxetsdmy4ckxh.cn-shenzhen.personal.cr.aliyuncs.com/zsq_proxy/node:22-alpine AS build WORKDIR /app # 关键:切换 Alpine 软件源到阿里云(大幅提升下载速度) RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 安装编译工具:使用 build-base 元包(gcc/g++/make 等) + python3 + openssl RUN apk add --no-cache python3 build-base openssl && rm -rf /var/cache/apk/* # 安装 pnpm 并配置镜像源 RUN npm install -g pnpm && \ pnpm config set registry https://registry.npmmirror.com # 复制依赖文件 COPY package*.json pnpm-lock.yaml ./ # 使用 --config 参数允许执行构建脚本 RUN pnpm install --frozen-lockfile --config.enable-pre-post-scripts=true COPY . . # 生成 Prisma Client(构建时需要) RUN npx prisma generate # 构建项目 RUN pnpm build # 生产阶段 FROM crpi-jlsdxetsdmy4ckxh.cn-shenzhen.personal.cr.aliyuncs.com/zsq_proxy/node:22-alpine AS production WORKDIR /app # 同样切换源,保证后续如有 apk 操作也能快速下载 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 安装 dumb-init 和 openssl RUN apk add --no-cache dumb-init openssl && rm -rf /var/cache/apk/* # 复制环境变量文件 COPY .env ./ # 直接从构建阶段复制已安装的依赖和构建产物 COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/dist ./dist COPY package*.json ./ # 如果运行时需要 Prisma Client,复制过去 COPY --from=build /app/node_modules/.prisma ./node_modules/.prisma COPY --from=build /app/prisma ./prisma EXPOSE 3003 ENTRYPOINT ["dumb-init", "--"] CMD ["sh", "-c", "set -a; . ./.env; node dist/main"]