All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 6m41s
- Dockerfile: multi-stage Next.js standalone build with pnpm + prisma - k8s manifests: single web deployment + Traefik ingress + LE TLS - Gitea workflow: build/push to Volcano CR, deploy to K3s, log-center failure reporting - next.config: enable standalone output for slim container image Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.8 KiB
Docker
54 lines
1.8 KiB
Docker
# syntax=docker/dockerfile:1
|
||
# ───────────── 1. deps:安装依赖(含 prisma generate via postinstall) ─────────────
|
||
FROM node:20-alpine AS deps
|
||
RUN apk add --no-cache libc6-compat openssl
|
||
WORKDIR /app
|
||
|
||
RUN corepack enable && corepack prepare pnpm@latest --activate \
|
||
&& pnpm config set registry https://registry.npmmirror.com
|
||
|
||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||
COPY prisma ./prisma
|
||
RUN pnpm install --frozen-lockfile
|
||
|
||
# ───────────── 2. builder:Next.js 构建(standalone 产物) ─────────────
|
||
FROM node:20-alpine AS builder
|
||
RUN apk add --no-cache libc6-compat openssl
|
||
WORKDIR /app
|
||
|
||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||
|
||
COPY --from=deps /app/node_modules ./node_modules
|
||
COPY . .
|
||
|
||
ENV NEXT_TELEMETRY_DISABLED=1
|
||
RUN pnpm build
|
||
|
||
# ───────────── 3. runner:最小运行时镜像 ─────────────
|
||
FROM node:20-alpine AS runner
|
||
RUN apk add --no-cache libc6-compat openssl
|
||
WORKDIR /app
|
||
|
||
ENV NODE_ENV=production
|
||
ENV NEXT_TELEMETRY_DISABLED=1
|
||
ENV PORT=3000
|
||
ENV HOSTNAME=0.0.0.0
|
||
|
||
RUN addgroup --system --gid 1001 nodejs \
|
||
&& adduser --system --uid 1001 nextjs
|
||
|
||
# Next.js standalone 输出 + 静态资源 + public
|
||
COPY --from=builder /app/public ./public
|
||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||
|
||
# Prisma:生成的 client + schema(运行时 db:push / 迁移可能用到)
|
||
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma
|
||
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma
|
||
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
|
||
|
||
USER nextjs
|
||
EXPOSE 3000
|
||
|
||
CMD ["node", "server.js"]
|