# syntax = docker/dockerfile:1.2
#######################################
FROM node:18-slim AS base
#######################################
#######################################
FROM base AS deps
#######################################
WORKDIR /app
COPY package.json \
package-lock.json* \
yarn.lock* \
pnpm-lock.yaml* \
./
RUN \
if [ -f package-lock.json ]; then npm ci; \
elif [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f pnpm-lock.yaml ]; then npm add --global pnpm && pnpm i --frozen-lockfile; \
else echo "Package is missing a lockfile." && exit 1; \
fi
#######################################
FROM base AS builder
#######################################
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Uncomment to disable telemetry before building (https://nextjs.org/telemetry):
# ENV NEXT_TELEMETRY_DISABLED 1
RUN npm run build
#######################################
FROM base AS runner
#######################################
WORKDIR /app
RUN adduser --system --uid 1001 nextjs
RUN addgroup --system --gid 1001 nodejs
# Copy only necessary files to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
# [next.config.js] nextConfig must have `property: output: "standalone"`
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
USER nextjs
ENV NODE_ENV production
ENV PORT 8080
EXPOSE 8080
CMD ["node", "server.js"]