Dockerfile.prod 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # Install dependencies only when needed
  2. FROM node:alpine AS deps
  3. # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
  4. RUN apk add --no-cache libc6-compat
  5. RUN npm install -g pnpm
  6. WORKDIR /app
  7. # 复制 pnpm 相关文件
  8. COPY package.json pnpm-lock.yaml* ./
  9. COPY .npmrc .npmrc
  10. # 使用 pnpm 安装依赖
  11. RUN pnpm install --frozen-lockfile
  12. # Rebuild the source code only when needed
  13. FROM node:alpine AS builder
  14. WORKDIR /app
  15. # 安装 pnpm
  16. RUN npm install -g pnpm
  17. # 复制依赖
  18. COPY --from=deps /app/node_modules ./node_modules
  19. COPY . .
  20. # 使用构建参数
  21. ARG MONGODB_URI
  22. ENV MONGODB_URI=$MONGODB_URI
  23. # 使用 pnpm 构建
  24. RUN pnpm build
  25. # Production image, copy all the files and run next
  26. FROM node:alpine AS runner
  27. WORKDIR /app
  28. ENV NODE_ENV production
  29. RUN addgroup -g 1001 -S nodejs
  30. RUN adduser -S nextjs -u 1001
  31. # 复制必要文件
  32. COPY --from=builder /app/public ./public
  33. COPY --from=builder /app/package.json ./package.json
  34. COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
  35. COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
  36. USER nextjs
  37. EXPOSE 3000
  38. ENV PORT 3000
  39. ENV NEXT_TELEMETRY_DISABLED 1
  40. CMD ["node", "server.js"]