1- # Base image
2- FROM node:18-alpine AS base
1+ # Stage 1: Development dependencies
2+ FROM node:18-alpine AS deps
33WORKDIR /app
44
5- # Dependencies
6- FROM base AS deps
5+ # Install dependencies needed for build
6+ RUN apk add --no-cache libc6-compat
7+
8+ # Copy package files
79COPY package.json package-lock.json ./
10+
11+ # Install dependencies
812RUN npm ci
913
10- # Builder
11- FROM base AS builder
14+ # Stage 2: Builder
15+ FROM node:18-alpine AS builder
16+ WORKDIR /app
17+
18+ # Copy dependencies from deps stage
1219COPY --from=deps /app/node_modules ./node_modules
1320COPY . .
21+
22+ # Set environment variables for build
23+ ENV NEXT_TELEMETRY_DISABLED 1
24+ ENV NODE_ENV production
25+
26+ # Build application
1427RUN npm run build
1528
16- # Runner
17- FROM base AS runner
18- ENV NODE_ENV=production
29+ # Stage 3: Production image
30+ FROM node:18-alpine AS runner
31+ WORKDIR /app
32+
33+ # Set environment variables
34+ ENV NODE_ENV production
1935ENV NEXT_TELEMETRY_DISABLED 1
2036
37+ # Create non-root user
2138RUN addgroup --system --gid 1001 nodejs
2239RUN adduser --system --uid 1001 nextjs
2340
24- COPY --from=builder /app/public ./public
41+ # Set proper permissions
42+ RUN mkdir .next
43+ RUN chown nextjs:nodejs .next
44+
45+ # Copy only necessary files
46+ COPY --from=builder --chown=nextjs:nodejs /app/public ./public
2547COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
2648COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
49+ COPY --from=builder /app/data ./data
2750
51+ # Switch to non-root user
2852USER nextjs
2953
54+ # Expose port
3055EXPOSE 3000
56+
57+ # Set hostname
3158ENV PORT 3000
3259ENV HOSTNAME "0.0.0.0"
3360
34- CMD ["node" , "server.js" ]
61+ # Start the application
62+ CMD ["node" , "server.js" ]
0 commit comments