| FROM node:20-alpine AS base | |
| USER root | |
| ENV PNPM_HOME="/pnpm" | |
| ENV PATH="$PNPM_HOME:$PATH" | |
| RUN npm i -g pnpm | |
| FROM base AS builder | |
| WORKDIR /app | |
| COPY . . | |
| RUN apk update \ | |
| & pnpm add turbo -g \ | |
| & pnpx turbo prune --scope=chat --docker | |
| # Add lockfile and package.json's of isolated subworkspace | |
| FROM base AS installer | |
| WORKDIR /app | |
| # First install the dependencies (as they change less often) | |
| COPY .gitignore .gitignore | |
| COPY --from=builder /app/out/json/ . | |
| COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml | |
| RUN pnpm install | |
| # Build the project | |
| COPY ./config.yaml /app/config.yaml | |
| COPY --from=builder /app/out/full/ . | |
| RUN pnpx turbo run db:generate \ | |
| & pnpx turbo run build --filter=chat... | |
| FROM base AS runner | |
| ENV HOSTNAME=0.0.0.0 | |
| ENV PORT=3000 | |
| WORKDIR /app | |
| # Don't run production as root | |
| RUN addgroup --system --gid 1001 nodejs | |
| RUN adduser --system --uid 1001 nextjs | |
| USER nextjs | |
| COPY --from=installer /app/packages/frontend/next.config.js . | |
| COPY --from=installer /app/packages/frontend/package.json . | |
| # Automatically leverage output traces to reduce image size | |
| # https://nextjs.org/docs/advanced-features/output-file-tracing | |
| COPY --from=installer --chown=nextjs:nodejs /app/packages/frontend/.next/standalone ./ | |
| COPY --from=installer --chown=nextjs:nodejs /app/packages/frontend/.next/static ./packages/frontend/.next/static | |
| COPY --from=installer --chown=nextjs:nodejs /app/packages/frontend/public ./packages/frontend/public | |
| CMD node packages/frontend/server.js | |