# 使用 Node.js 官方镜像作为基础镜像 FROM node:20-alpine AS base # 设置 npm 和 pnpm 镜像源为 npm 官方镜像 ENV PNPM_REGISTRY=https://registry.npmjs.org ENV npm_config_registry=https://registry.npmjs.org # 安装 pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # 设置工作目录 WORKDIR /app # 依赖安装阶段 FROM base AS deps # 复制包管理文件 COPY package.json pnpm-lock.yaml ./ # 安装依赖(使用 npm 官方镜像源) # 替换 lockfile 中的内部镜像 URL 为 npm 官方镜像 RUN sed -i.bak 's|https://pkgs.d.xiaomi.net:443/artifactory/api/npm/mi-npm/|https://registry.npmjs.org/|g' pnpm-lock.yaml && \ rm -f pnpm-lock.yaml.bak && \ pnpm config set registry https://registry.npmjs.org && \ pnpm install --frozen-lockfile # 构建阶段 FROM base AS builder # 复制依赖 COPY --from=deps /app/node_modules ./node_modules # 复制源代码 COPY . . # 构建应用 RUN pnpm build # 运行阶段 FROM base AS runner WORKDIR /app ENV NODE_ENV=production # 禁用 Next.js 遥测 ENV NEXT_TELEMETRY_DISABLED=1 # 创建非 root 用户 RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs # 复制必要的文件 COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static # 设置正确的权限 RUN chown -R nextjs:nodejs /app USER nextjs # 暴露端口 EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" # 启动应用 CMD ["node", "server.js"]