From 19379d3cf046dfba69d8265b4a131031d75d1def Mon Sep 17 00:00:00 2001 From: Guillaume Dorce Date: Fri, 26 May 2023 12:28:12 +0200 Subject: [PATCH] config for docker --- .dockerignore | 8 ++++++ Dockerfile | 73 +++++++++++++++++++++++++++++++++++++------------ next.config.mjs | 7 +---- 3 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..86f0b3b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.env +Dockerfile +.dockerignore +node_modules +npm-debug.log +README.md +.next +.git diff --git a/Dockerfile b/Dockerfile index 8cbc790..def6348 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,58 @@ -FROM node:lts-erbium +##### DEPENDENCIES +FROM --platform=linux/amd64 node:16-alpine3.17 AS deps +RUN apk add --no-cache libc6-compat openssl1.1-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager + +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml\* ./ + +RUN \ + 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 + +##### BUILDER + +FROM --platform=linux/amd64 node:16-alpine3.17 AS builder +ARG PB_API +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN \ + if [ -f yarn.lock ]; then SKIP_ENV_VALIDATION=1 yarn build; \ + elif [ -f package-lock.json ]; then SKIP_ENV_VALIDATION=1 npm run build; \ + elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && SKIP_ENV_VALIDATION=1 pnpm run build; \ + else echo "Lockfile not found." && exit 1; \ + fi + +##### RUNNER + +FROM --platform=linux/amd64 node:16-alpine3.17 AS runner +WORKDIR /app + +ENV NODE_ENV production + +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/next.config.mjs ./ +COPY --from=builder /app/public ./public +COPY --from=builder /app/package.json ./package.json + +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs +EXPOSE 19080 ENV PORT 19080 -# Create app directory -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -# Installing dependencies -COPY package*.json /usr/src/app/ -RUN npm install - -# Copying source files -COPY . /usr/src/app - -# Building app -RUN npm run build -EXPOSE 19080 - -# Running the app -CMD "npm" "start" \ No newline at end of file +CMD ["node", "server.js"] diff --git a/next.config.mjs b/next.config.mjs index 173d3a9..420929f 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -8,12 +8,6 @@ /** @type {import("next").NextConfig} */ const config = { reactStrictMode: true, - /* If trying out the experimental appDir, comment the i18n config out - * @see https://github.com/vercel/next.js/issues/41980 */ - // i18n: { - // locales: ["fr"], - // defaultLocale: "fr", - // }, images: { remotePatterns: [ { @@ -22,5 +16,6 @@ const config = { } ], }, + output: "standalone" }; export default config;