## 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 && corepack prepare pnpm@9.6.0 --activate 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 COPY ./certs ./certs COPY pnpm-lock.yaml ./ RUN pnpm fetch # COPY pnpm-lock.yaml .npmrc package.json . COPY ./services/next ./services/next COPY ./packages/types ./packages/types # COPY ./packages/strapi ./packages/strapi # COPY ./packages/image ./packages/image # COPY ./packages/utils ./packages/utils RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm install --recursive --frozen-lockfile --prefer-offline FROM install AS dev WORKDIR /app/services/next CMD ["pnpm", "run", "dev"] FROM install AS build RUN pnpm run -r build # RUN pnpm --filter=next deploy --prod /prod/next ## using `pnpm deploy` doesn't work and I haven't worked out why RUN echo "next we are next we are" RUN ls -lash /app 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/services/next/package.json /app/services/next/pnpm-lock.yaml ./ RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile COPY --chown=node:node --from=build /app/services/next/public ./public COPY --chown=node:node --from=build /app/services/next/.next/standalone ./ COPY --chown=node:node --from=build /app/services/next/.next/static ./.next/static ENV TZ=UTC ENV NODE_ENV=production ENV HOSTNAME="0.0.0.0" CMD [ "dumb-init", "node", "server.js" ]