FROM node:24-alpine AS base WORKDIR /app RUN apk add --no-cache openssl RUN npm install -g npm@11.7.0 ENV NPM_CONFIG_UPDATE_NOTIFIER=false ENV NEXT_TELEMETRY_DISABLED=1 FROM base AS deps COPY package.json package-lock.json* ./ RUN --mount=type=cache,target=/root/.npm \ if [ -f package-lock.json ]; then npm ci; else npm install; fi FROM base AS builder COPY --from=deps /app/node_modules ./node_modules COPY prisma ./prisma RUN --mount=type=cache,target=/root/.npm npx prisma generate COPY . . RUN --mount=type=cache,target=/root/.npm \ --mount=type=cache,target=/app/.next/cache \ if [ ! -d node_modules/@fullcalendar/core ]; then npm install; fi RUN --mount=type=cache,target=/app/.next/cache npx next build FROM base AS runner ENV NODE_ENV=production COPY --from=builder /app/.next ./.next COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/next.config.js ./next.config.js COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/public ./public EXPOSE 3000 CMD ["sh", "-c", "npm run prisma:deploy && npm run start"]