FROM node:20-alpine AS base WORKDIR /app RUN apk add --no-cache libc6-compat FROM base AS deps COPY package.json pnpm-lock.yaml* pnpm-workspace.yaml* /app/ COPY apps/web/package.json /app/apps/web/ COPY packages/shared/package.json /app/packages/shared/ COPY packages/ui/package.json /app/packages/ui/ COPY packages/plugin-sdk/package.json /app/packages/plugin-sdk/ RUN npm install -g pnpm \ && if [ -f pnpm-lock.yaml ]; then \ pnpm install --frozen-lockfile; \ else \ pnpm install --no-frozen-lockfile; \ fi FROM base AS builder COPY --from=deps /app /app COPY . /app RUN npm install -g pnpm && pnpm --filter @nexadash/web build FROM base AS runner ENV NODE_ENV=production RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs COPY --from=builder /app/apps/web/public /app/apps/web/public COPY --from=builder /app/apps/web/.next/standalone /app/apps/web/ COPY --from=builder /app/apps/web/.next/static /app/apps/web/.next/static COPY --from=builder /app/apps/web/healthcheck.js /app/apps/web/healthcheck.js USER nextjs EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" WORKDIR /app/apps/web CMD ["node", "server.js"]