# syntax=docker/dockerfile:1.7 FROM node:20-alpine AS base ENV PNPM_HOME=/pnpm ENV PATH=$PNPM_HOME:$PATH RUN corepack enable && corepack prepare pnpm@9.12.0 --activate RUN apk add --no-cache openssl # ---------- deps ---------- FROM base AS deps WORKDIR /app COPY package.json pnpm-workspace.yaml pnpm-lock.yaml* ./ COPY tsconfig.base.json ./ COPY packages/shared/package.json packages/shared/ COPY apps/backend/package.json apps/backend/ COPY apps/frontend/package.json apps/frontend/ # Prisma schema is needed before `prisma generate` so we copy it at this stage. COPY apps/backend/prisma apps/backend/prisma # Install only the backend workspace and its deps. RUN pnpm install --filter @family-wishlist/backend... --frozen-lockfile || \ pnpm install --filter @family-wishlist/backend... # Generate @prisma/client into node_modules so it's present in the runtime stage. RUN pnpm --filter @family-wishlist/backend prisma:generate # ---------- build ---------- FROM deps AS build WORKDIR /app COPY packages/shared packages/shared COPY apps/backend apps/backend RUN pnpm --filter @family-wishlist/shared build RUN pnpm --filter @family-wishlist/backend build # ---------- runtime ---------- FROM base AS runtime WORKDIR /app ENV NODE_ENV=production # Copy everything needed for running: hoisted node_modules (with the generated # @prisma/client inside), workspace packages, and the compiled backend. COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/package.json ./package.json COPY --from=build /app/pnpm-workspace.yaml ./pnpm-workspace.yaml COPY --from=build /app/packages ./packages COPY --from=build /app/apps/backend/node_modules ./apps/backend/node_modules COPY --from=build /app/apps/backend/dist ./apps/backend/dist COPY --from=build /app/apps/backend/prisma ./apps/backend/prisma COPY --from=build /app/apps/backend/package.json ./apps/backend/package.json COPY --from=build /app/apps/backend/scripts ./apps/backend/scripts WORKDIR /app/apps/backend EXPOSE 3000 # Apply schema (idempotent; uses `db push` so no prior migrations required) + # seed env users + start server. CMD ["sh", "-c", "pnpm exec prisma db push --accept-data-loss --skip-generate && node dist/prisma/seed.js && node dist/src/index.js"]