diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index d5ff885..eb62d37 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -1,44 +1,56 @@ -FROM node:22-alpine AS base +ARG NODE_VERSION=22 +ARG PROJECT=web + +# Alpine image +FROM node:${NODE_VERSION}-alpine AS alpine +RUN apk update +RUN apk add --no-cache libc6-compat + +FROM alpine AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" -RUN apk add --no-cache libc6-compat && \ +RUN apk add --no-cache libc6-compat openssl && \ corepack enable && \ pnpm install turbo dotenv-cli --global - -FROM base AS builder -RUN apk add --no-cache openssl + +FROM base AS pruner +ARG PROJECT WORKDIR /app COPY . . -RUN turbo prune --scope=web --docker - -FROM base AS installer -WORKDIR /app - -COPY .gitignore .gitignore -# COPY reset.d.ts reset.d.ts # only if you're using ts-reset library -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -COPY --from=builder /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml -RUN pnpm install --prod --frozen-lockfile +RUN turbo prune --scope=${PROJECT} --docker + +FROM base AS builder +WORKDIR /app + +COPY --from=pruner /app/out/json/ . +COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml +COPY --from=pruner /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml + +RUN --mount=type=cache,id=pnpm,target=~/.pnpm-store pnpm install --prod --frozen-lockfile + +COPY --from=pruner /app/out/full/ . -COPY --from=builder /app/out/full/ . COPY turbo.json turbo.json COPY .env .env - -RUN dotenv -e .env turbo run build --filter=web - -FROM base AS runner -WORKDIR /app - + +RUN dotenv -e .env turbo run build --filter=${PROJECT}... +RUN --mount=type=cache,id=pnpm,target=~/.pnpm-store pnpm prune --prod --no-optional +RUN rm -rf ./**/*/src + +FROM alpine AS runner +ARG PROJECT + RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs USER nextjs - -COPY --from=installer /app/apps/web/next.config.js . -COPY --from=installer /app/apps/web/package.json . - -COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/standalone ./ -COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static -COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public - -CMD node apps/web/server.js \ No newline at end of file + +WORKDIR /app +COPY --from=builder /app/apps/${PROJECT}/next.config.js . +COPY --from=builder /app/apps/${PROJECT}/package.json . + +COPY --from=builder --chown=nextjs:nodejs /app/apps/${PROJECT}/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/apps/${PROJECT}/.next/static ./apps/${PROJECT}/.next/static +COPY --from=builder --chown=nextjs:nodejs /app/apps/${PROJECT}/public ./apps/${PROJECT}/public +WORKDIR /app/apps/${PROJECT} + +CMD node server.js