From 94db891a0730b46bba7abd246b906e30db3c642b Mon Sep 17 00:00:00 2001 From: Fayorg Date: Wed, 6 Dec 2023 01:36:09 +0100 Subject: [PATCH] fix: fixing docker build issues --- .dockerignore | 2 -- Dockerfile | 37 ++++++++++++++++++++++++++----------- next.config.js | 6 ++++-- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/.dockerignore b/.dockerignore index 3c487cf..534f3d9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1 @@ -.next/ -node_modules/ .env.example \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f479900..d9dd4d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,48 @@ -FROM node:18-alpine AS deps +FROM node:18-alpine AS base + +# 1. Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. RUN apk add --no-cache libc6-compat + WORKDIR /app -COPY package.json package-lock.json* ./ + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ RUN \ - if [ -f package-lock.json ]; then npm ci; \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \ else echo "Lockfile not found." && exit 1; \ fi -FROM node:18-alpine AS builder + +# 2. Rebuild the source code only when needed +FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . -ENV NEXT_TELEMETRY_DISABLED 1 - RUN npx prisma generate RUN npm run build -FROM node:18-alpine AS runner +# 3. Production image, copy all the files and run next +FROM base AS runner WORKDIR /app -ENV NODE_ENV production +ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED 1 -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 -COPY --from=builder /app/next.config.js ./ +# COPY --from=builder /app/public ./public + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + USER nextjs EXPOSE 3000 diff --git a/next.config.js b/next.config.js index 767719f..29f15a9 100644 --- a/next.config.js +++ b/next.config.js @@ -1,4 +1,6 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {} +const nextConfig = { + output: 'standalone', +}; -module.exports = nextConfig +module.exports = nextConfig;