diff options
Diffstat (limited to 'Dockerfile')
| -rw-r--r-- | Dockerfile | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f68a80a --- /dev/null +++ b/Dockerfile | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | FROM node:18-alpine AS base | ||
| 2 | |||
| 3 | # Install dependencies only when needed | ||
| 4 | FROM base AS deps | ||
| 5 | # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. | ||
| 6 | RUN apk add --no-cache libc6-compat | ||
| 7 | WORKDIR /app | ||
| 8 | |||
| 9 | # Install dependencies based on the preferred package manager | ||
| 10 | COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ | ||
| 11 | RUN \ | ||
| 12 | if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ | ||
| 13 | elif [ -f package-lock.json ]; then npm ci; \ | ||
| 14 | elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \ | ||
| 15 | else echo "Lockfile not found." && exit 1; \ | ||
| 16 | fi | ||
| 17 | |||
| 18 | |||
| 19 | # Rebuild the source code only when needed | ||
| 20 | FROM base AS builder | ||
| 21 | WORKDIR /app | ||
| 22 | COPY --from=deps /app/node_modules ./node_modules | ||
| 23 | COPY . . | ||
| 24 | |||
| 25 | # Next.js collects completely anonymous telemetry data about general usage. | ||
| 26 | # Learn more here: https://nextjs.org/telemetry | ||
| 27 | # Uncomment the following line in case you want to disable telemetry during the build. | ||
| 28 | # ENV NEXT_TELEMETRY_DISABLED 1 | ||
| 29 | |||
| 30 | RUN yarn build | ||
| 31 | |||
| 32 | # If using npm comment out above and use below instead | ||
| 33 | # RUN npm run build | ||
| 34 | |||
| 35 | # Production image, copy all the files and run next | ||
| 36 | FROM base AS runner | ||
| 37 | WORKDIR /app | ||
| 38 | |||
| 39 | ENV NODE_ENV production | ||
| 40 | # Uncomment the following line in case you want to disable telemetry during runtime. | ||
| 41 | # ENV NEXT_TELEMETRY_DISABLED 1 | ||
| 42 | |||
| 43 | RUN addgroup --system --gid 1001 nodejs | ||
| 44 | RUN adduser --system --uid 1001 nextjs | ||
| 45 | |||
| 46 | COPY --from=builder /app/public ./public | ||
| 47 | |||
| 48 | # Automatically leverage output traces to reduce image size | ||
| 49 | # https://nextjs.org/docs/advanced-features/output-file-tracing | ||
| 50 | COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ | ||
| 51 | COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static | ||
| 52 | |||
| 53 | USER nextjs | ||
| 54 | |||
| 55 | EXPOSE 3000 | ||
| 56 | |||
| 57 | ENV PORT 3000 | ||
| 58 | |||
| 59 | CMD ["node", "server.js"] | ||
