# apps/frontend — Next.js (App Router), monorepo pnpm, output standalone. FROM node:24-slim AS build RUN corepack enable && corepack prepare pnpm@11.24.0 --activate WORKDIR /app COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY apps/frontend/package.json apps/frontend/package.json RUN pnpm install --frozen-lockfile --filter @b2bcall/frontend... COPY apps/frontend apps/frontend RUN pnpm --filter @b2bcall/frontend build # --- runtime ------------------------------------------------------------- FROM node:24-slim AS runtime ENV NODE_ENV=production ENV PORT=3000 ENV HOSTNAME=0.0.0.0 WORKDIR /app RUN groupadd -r b2bcall && useradd -r -g b2bcall b2bcall # next.config.ts com output:"standalone" produz uma árvore mínima com só o # necessário para rodar. Em monorepo pnpm o resultado preserva a estrutura # apps/frontend + node_modules na raiz com symlinks relativos para o pnpm # store — por isso a árvore inteira é copiada sem "achatar" os diretórios, # senão os symlinks (../../../node_modules/.pnpm/...) apontam para fora. COPY --from=build /app/apps/frontend/.next/standalone ./ COPY --from=build /app/apps/frontend/.next/static ./apps/frontend/.next/static COPY --from=build /app/apps/frontend/public ./apps/frontend/public USER b2bcall EXPOSE 3000 CMD ["node", "apps/frontend/server.js"]