diff --git a/Dockerfile b/Dockerfile index 4f6b62b..9ba4819 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,73 +1,28 @@ -# ============================================ -# Stage 1: Install dependencies -# ============================================ - -ARG NODE_VERSION=22-slim - -FROM node:${NODE_VERSION} AS dependencies - +FROM node:20-bookworm-slim AS base WORKDIR /app - -# Install bun to use bun.lock for dependency resolution -RUN npm install -g bun - -# Copy package-related files to leverage Docker cache -COPY package.json bun.lock* ./ - -# Install dependencies with frozen lockfile for reproducible builds -RUN --mount=type=cache,target=/root/.bun/install/cache \ - bun install --no-save --frozen-lockfile - -# ============================================ -# Stage 2: Build the Next.js application -# ============================================ - -FROM node:${NODE_VERSION} AS builder - -WORKDIR /app - -COPY --from=dependencies /app/node_modules ./node_modules -COPY . . - -ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -# Build-time env vars — override these with --build-arg or in compose.yml -ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -ARG NEXT_PUBLIC_CLERK_SIGN_IN_URL=/auth/sign-in -ARG NEXT_PUBLIC_CLERK_SIGN_UP_URL=/auth/sign-up -ARG NEXT_PUBLIC_SENTRY_DISABLED=true +FROM base AS deps +COPY package.json package-lock.json ./ +RUN npm install --no-audit --no-fund +FROM base AS builder +ENV NODE_ENV=production ENV BUILD_STANDALONE=true - +ARG NEXT_PUBLIC_SENTRY_DISABLED=true +ENV NEXT_PUBLIC_SENTRY_DISABLED=${NEXT_PUBLIC_SENTRY_DISABLED} +COPY --from=deps /app/node_modules ./node_modules +COPY . . RUN npm run build -# ============================================ -# Stage 3: Production runner -# ============================================ - -FROM node:${NODE_VERSION} AS runner - +FROM node:20-bookworm-slim AS runner WORKDIR /app - ENV NODE_ENV=production -ENV PORT=3000 -ENV HOSTNAME="0.0.0.0" ENV NEXT_TELEMETRY_DISABLED=1 - -# Copy public assets -COPY --from=builder --chown=node:node /app/public ./public - -# Create .next dir with correct permissions for prerender cache -RUN mkdir .next && chown node:node .next - -# Copy standalone output and static files -COPY --from=builder --chown=node:node /app/.next/standalone ./ -COPY --from=builder --chown=node:node /app/.next/static ./.next/static - -# Run as non-root user -USER node - +ENV PORT=3000 +ENV HOSTNAME=0.0.0.0 +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static EXPOSE 3000 - CMD ["node", "server.js"] diff --git a/docker-bun-build.log b/docker-bun-build.log new file mode 100644 index 0000000..5a8c79b Binary files /dev/null and b/docker-bun-build.log differ diff --git a/docker-node-build.log b/docker-node-build.log new file mode 100644 index 0000000..2db6163 Binary files /dev/null and b/docker-node-build.log differ