diff --git a/Dockerfile b/Dockerfile index 5282462..29a38d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,61 +1,32 @@ -# syntax=docker.io/docker/dockerfile:1 +# Use the official Node.js 20 image as the base +FROM node:20-alpine -# Base stage for Node.js -FROM node:20-alpine AS base - -# Stage 1: Install dependencies -FROM base AS deps -# Add libc6-compat for compatibility with some Node.js native modules -RUN apk add --no-cache libc6-compat +# Set working directory WORKDIR /app -# Copy dependency files +# Install pnpm +RUN corepack enable && corepack prepare pnpm@latest --activate + +# Copy only dependency files first COPY package.json pnpm-lock.yaml* ./ -# Install pnpm and dependencies -RUN corepack enable pnpm && pnpm install --frozen-lockfile +# Install dependencies with pnpm +RUN pnpm install --frozen-lockfile -# Stage 2: Build the Next.js app -FROM base AS builder -WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules +# Copy the rest of the application code COPY . . # Create a cache directory for Next.js RUN mkdir -p /app/.next/cache -# Disable telemetry during build +# Disable telemetry ENV NEXT_TELEMETRY_DISABLED=1 -# Build the Next.js app -RUN corepack enable pnpm && pnpm run build - -# Stage 3: Production image -FROM base AS runner -WORKDIR /app - -ENV NODE_ENV=production -ENV NEXT_TELEMETRY_DISABLED=1 - -# Create a non-root user -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs - -# Copy public assets -COPY --from=builder /app/public ./public - -# Copy standalone output and static files -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static - -# Copy the .next/cache for runtime caching (e.g., ISR) -COPY --from=builder --chown=nextjs:nodejs /app/.next/cache ./.next/cache - -USER nextjs +# Build the Next.js application +RUN pnpm build +# Expose port 3000 EXPOSE 3000 -ENV PORT=3000 -ENV HOSTNAME="0.0.0.0" - -CMD ["node", "server.js"] \ No newline at end of file +# Start the Next.js application +CMD ["pnpm", "start", "-p", "3000"] \ No newline at end of file