FROM node:22-alpine AS base ENV PNPM_HOME="/usr/local/pnpm" ENV PATH="${PNPM_HOME}:${PATH}" RUN corepack enable && corepack prepare pnpm@latest --activate RUN pnpm add -g turbo@^2.5 ARG NEXTAUTH_SECRET ARG NEXTAUTH_HUB_SECRET ARG NEXTAUTH_COOKIE_PREFIX ARG NEXT_PUBLIC_DISPATCH_SERVER_URL ARG NEXTAUTH_URL ARG NEXT_PUBLIC_HUB_URL ARG NEXT_PUBLIC_PUBLIC_URL ARG NEXT_PUBLIC_SERVICE_ID ARG DATABASE_URL ARG NEXT_PUBLIC_LIVEKIT_URL ARG LIVEKIT_API_KEY ARG LIVEKIT_API_SECRET ENV NEXTAUTH_SECRET=${NEXTAUTH_SECRET} ENV NEXTAUTH_HUB_SECRET=${NEXTAUTH_HUB_SECRET} ENV NEXTAUTH_COOKIE_PREFIX=${NEXTAUTH_COOKIE_PREFIX} ENV NEXT_PUBLIC_DISPATCH_SERVER_URL=${NEXT_PUBLIC_DISPATCH_SERVER_URL} ENV NEXTAUTH_URL=${NEXTAUTH_URL} ENV NEXT_PUBLIC_HUB_URL=${NEXT_PUBLIC_HUB_URL} ENV NEXT_PUBLIC_PUBLIC_URL=${NEXT_PUBLIC_PUBLIC_URL} ENV NEXT_PUBLIC_SERVICE_ID=${NEXT_PUBLIC_SERVICE_ID} ENV DATABASE_URL=${DATABASE_URL} ENV NEXT_PUBLIC_LIVEKIT_URL=${NEXT_PUBLIC_LIVEKIT_URL} ENV LIVEKIT_API_KEY=${LIVEKIT_API_KEY} ENV LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET} FROM base AS builder RUN apk update RUN apk add --no-cache libc6-compat WORKDIR /usr/app COPY . . RUN cat .env.prod RUN turbo prune dispatch --docker FROM base AS installer RUN apk update RUN apk add --no-cache libc6-compat WORKDIR /usr/app COPY --from=builder /usr/app/out/json/ . RUN pnpm install --frozen-lockfile # Build the project COPY --from=builder /usr/app/out/full/ . COPY --from=builder /usr/app/.env.prod ./apps/dispatch/.env RUN cat ./apps/dispatch/.env RUN ls ./apps/dispatch -alR RUN turbo run build FROM base AS runner WORKDIR /usr/app # Don't run production as root RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs USER nextjs # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=installer --chown=nextjs:nodejs /usr/app/apps/dispatch/ ./ # Expose the application port EXPOSE 3001 CMD ["pnpm", "run", "start"]