## Important! Build context is the ROOT of the project. ## this keeps the door open for future possibility of shared code between pnpm workspace packages FROM node:20-slim AS base FROM base AS deps ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable WORKDIR /app FROM deps AS install ARG NEXT_PUBLIC_SITE_URL=https://futureporn.net ARG NEXT_PUBLIC_STRAPI_URL=https://portal.futureporn.net ARG NEXT_PUBLIC_UPPY_COMPANION_URL=https://uppy.futureporn.net ENV NEXT_PUBLIC_SITE_URL ${NEXT_PUBLIC_SITE_URL} ENV NEXT_PUBLIC_STRAPI_URL ${NEXT_PUBLIC_STRAPI_URL} ENV NEXT_PUBLIC_UPPY_COMPANION_URL ${NEXT_PUBLIC_UPPY_COMPANION_URL} ENV NEXT_TELEMETRY_DISABLED 1 ENV NODE_EXTRA_CA_CERTS "/app/letsencrypt-stg-root-x1.pem" COPY pnpm-lock.yaml ./ RUN pnpm fetch COPY ./packages/next /app RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm install FROM install AS dev CMD ["pnpm", "run", "dev"] FROM install AS build RUN pnpm run build FROM deps AS next RUN apt-get update && apt-get install -y -qq --no-install-recommends dumb-init COPY --chown=node:node --from=build /app/package.json /app/pnpm-lock.yaml ./ RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile COPY --chown=node:node --from=build /app/public ./public COPY --chown=node:node --from=build /app/.next/standalone ./ COPY --chown=node:node --from=build /app/.next/static ./.next/static ENV TZ=UTC ENV NODE_ENV=production ENV HOSTNAME="0.0.0.0" CMD [ "dumb-init", "node", "server.js" ]