diff --git a/Dockerfile b/Dockerfile index f504aa9..1fedd97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ # Install dependencies only when needed FROM node:lts-alpine AS deps +WORKDIR /app # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \ && apk update --no-cache \ @@ -8,49 +9,55 @@ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && yarn config set registry https://registry.npmmirror.com \ && yarn config set sharp_binary_host "https://npmmirror.com/mirrors/sharp" \ && yarn config set sharp_libvips_binary_host "https://npmmirror.com/mirrors/sharp-libvips" - -WORKDIR /app COPY package.json yarn.lock ./ RUN yarn install --frozen-lockfile +# If using npm with a `package-lock.json` comment out above and use below instead +# COPY package.json package-lock.json ./ +# RUN npm ci + # Rebuild the source code only when needed -FROM node:lts-alpine AS builder +FROM node:16-alpine AS builder WORKDIR /app -COPY . . COPY --from=deps /app/node_modules ./node_modules +COPY . . RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \ && apk update --no-cache \ && apk upgrade --no-cache \ && yarn config set registry https://registry.npmmirror.com \ - && npx prisma generate \ - && yarn build && yarn install --production --ignore-scripts --prefer-offline + # && yarn build && yarn install --production --ignore-scripts --prefer-offline + && yarn build + + +# If using npm comment out above and use below instead +# RUN npm run build # Production image, copy all the files and run next -FROM node:lts-alpine AS runner +FROM node:16-alpine AS runner WORKDIR /app ENV NODE_ENV production +# Uncomment the following line in case you want to disable telemetry during runtime. +# ENV NEXT_TELEMETRY_DISABLED 1 -RUN addgroup -g 1001 -S nodejs -RUN adduser -S nextjs -u 1001 +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs # You only need to copy next.config.js if you are NOT using the default configuration COPY --from=builder /app/.env ./ -COPY --from=builder /app/next.config.js ./ +COPY --from=builder /app/next.config.mjs ./ COPY --from=builder /app/public ./public -COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next -COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json +# 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 ENV PORT 3000 -# Next.js collects completely anonymous telemetry data about general usage. -# Learn more here: https://nextjs.org/telemetry -# Uncomment the following line in case you want to disable telemetry. -# ENV NEXT_TELEMETRY_DISABLED 1 - -CMD ["node_modules/.bin/next", "start"] \ No newline at end of file +CMD ["node", "server.js"] \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index a924f8f..bf8065f 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -25,6 +25,9 @@ const composedConfig = composePlugins([ // experimental: { // reactMode: 'concurrent', // }, + experimental: { + outputStandalone: true, + }, pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'], }, ]);