# syntax=docker/dockerfile:1 FROM node:20-alpine AS builder WORKDIR /app RUN corepack enable COPY package.json yarn.lock .yarnrc.yml ./ COPY .yarn/releases ./.yarn/releases RUN yarn install --immutable COPY . . # NEXT_PUBLIC_* are inlined at build time; MEDUSA_BACKEND_URL is read by # next.config.js (image hosts) and by pages fetched during build, so the # backend must be reachable at this URL while building. ARG MEDUSA_BACKEND_URL ARG NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY ARG NEXT_PUBLIC_BASE_URL ARG NEXT_PUBLIC_DEFAULT_REGION=vn ARG NEXT_PUBLIC_IMAGE_HOSTS ARG NEXT_PUBLIC_STRIPE_KEY ARG NEXT_PUBLIC_MEDUSA_PAYMENTS_PUBLISHABLE_KEY ARG NEXT_PUBLIC_MEDUSA_PAYMENTS_ACCOUNT_ID ENV MEDUSA_BACKEND_URL=$MEDUSA_BACKEND_URL \ NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY=$NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY \ NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL \ NEXT_PUBLIC_DEFAULT_REGION=$NEXT_PUBLIC_DEFAULT_REGION \ NEXT_PUBLIC_IMAGE_HOSTS=$NEXT_PUBLIC_IMAGE_HOSTS \ NEXT_PUBLIC_STRIPE_KEY=$NEXT_PUBLIC_STRIPE_KEY \ NEXT_PUBLIC_MEDUSA_PAYMENTS_PUBLISHABLE_KEY=$NEXT_PUBLIC_MEDUSA_PAYMENTS_PUBLISHABLE_KEY \ NEXT_PUBLIC_MEDUSA_PAYMENTS_ACCOUNT_ID=$NEXT_PUBLIC_MEDUSA_PAYMENTS_ACCOUNT_ID \ NEXT_TELEMETRY_DISABLED=1 RUN yarn build FROM node:20-alpine WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 # Full node_modules on purpose: next.config.js -> check-env-variables.js # requires ansi-colors (a devDependency) at startup. COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/package.json /app/next.config.js /app/check-env-variables.js ./ EXPOSE 8082 CMD ["node_modules/.bin/next", "start", "-p", "8082"]