66 lines
2.3 KiB
Docker
66 lines
2.3 KiB
Docker
## 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
|
|
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
|
|
# COPY --chown=node:node --from=install /app/package.json /app/pnpm-lock.yaml ./
|
|
# RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
|
|
# COPY --from=install /app /app # i think this is duplicate
|
|
# can't get these to work because errors like "/prod/next/.next/standalone": not found
|
|
# as if pnpm is not copying the build artifacts.
|
|
# also this makes the build REALLY slow (adds ~10mins to build time)
|
|
# RUN pnpm deploy --filter=@futureporn/next --prod /prod/next
|
|
# RUN pnpm deploy --filter=@futureporn/link2cid --prod /prod/link2cid
|
|
|
|
# FROM deps as release
|
|
# # ENV NEXT_SHARP_PATH=/app/node_modules/sharp
|
|
# ENV NODE_ENV=production
|
|
# WORKDIR /app
|
|
# COPY --from=build /app/public ./public
|
|
# COPY --from=build /app/.next/standalone ./
|
|
# COPY --from=build /app/.next/static ./.next/static
|
|
# CMD [ "dumb-init", "node", "server.js" ]
|
|
|
|
|
|
|
|
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" ]
|
|
|