FROM node:20 AS base FROM base AS builder ARG APP_DIR=/opt/link RUN mkdir -p ${APP_DIR}/ RUN npm i -g turbo WORKDIR ${APP_DIR} COPY . . RUN turbo prune --scope=link --docker FROM base AS installer ARG APP_DIR=/opt/link WORKDIR ${APP_DIR} COPY .gitignore .gitignore COPY --from=builder ${APP_DIR}/out/json/ . COPY --from=builder ${APP_DIR}/out/package-lock.json ./package-lock.json RUN npm install COPY --from=builder ${APP_DIR}/out/full/ . RUN npm i -g turbo RUN turbo run build --filter=link FROM base AS runner ARG APP_DIR=/opt/link WORKDIR ${APP_DIR}/ ARG BUILD_DATE ARG VERSION LABEL maintainer="Darren Clarke " LABEL org.label-schema.build-date=$BUILD_DATE LABEL org.label-schema.version=$VERSION ENV APP_DIR ${APP_DIR} RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get install -y --no-install-recommends \ dumb-init RUN mkdir -p ${APP_DIR} RUN chown -R node ${APP_DIR}/ USER node WORKDIR ${APP_DIR} COPY --from=installer ${APP_DIR}/node_modules/ ./node_modules/ COPY --from=installer ${APP_DIR}/apps/link/ ./apps/link/ USER root RUN chmod +x ./apps/link/docker-entrypoint.sh USER node EXPOSE 3000 ENV PORT 3000 ENV NODE_ENV production ENTRYPOINT ["./apps/link/docker-entrypoint.sh"]