ARG NODE_IMAGE=docker.m.daocloud.io/library/node:20-alpine FROM ${NODE_IMAGE} AS client-builder WORKDIR /build/client COPY client/package*.json ./ RUN npm ci COPY client/ ./ RUN npm run build FROM ${NODE_IMAGE} AS server-builder WORKDIR /build/server COPY server/package*.json ./ RUN npm ci COPY server/ ./ RUN npx prisma generate RUN npm run build FROM ${NODE_IMAGE} AS runtime WORKDIR /app/server ENV NODE_ENV=production ENV PORT=3000 COPY server/package*.json ./ RUN npm ci --omit=dev COPY --from=server-builder /build/server/dist ./dist COPY --from=server-builder /build/server/prisma ./prisma COPY --from=client-builder /build/client/dist ./public EXPOSE 3000 CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main"]