FROM node:24.13.0-alpine AS build WORKDIR /app RUN corepack enable RUN npm config set registry https://registry.npmmirror.com && pnpm config set registry https://registry.npmmirror.com COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.base.json ./ COPY apps/api/package.json apps/api/package.json COPY packages/contracts/package.json packages/contracts/package.json RUN pnpm install --frozen-lockfile COPY . . ENV DATABASE_URL="mysql://lehuo:***@mysql:3306/lehuo" RUN cd apps/api && pnpm run build FROM node:24.13.0-alpine WORKDIR /app RUN apk add --no-cache tini # Copy all node_modules from build stage COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/apps/api/node_modules ./apps/api/node_modules COPY --from=build /app/packages/contracts/node_modules ./packages/contracts/node_modules # Copy built artifacts COPY --from=build /app/apps/api/dist ./apps/api/dist COPY --from=build /app/apps/api/prisma ./apps/api/prisma COPY --from=build /app/apps/api/src/generated ./apps/api/src/generated COPY --from=build /app/packages/contracts/dist ./packages/contracts/dist # Create @lehuo/contracts module in node_modules RUN mkdir -p /app/node_modules/@lehuo/contracts && \ find /app/packages/contracts/dist -type f -exec cp {} /app/node_modules/@lehuo/contracts/ \; && \ echo '{"name":"@lehuo/contracts","version":"1.1.0","main":"./index.js"}' > /app/node_modules/@lehuo/contracts/package.json # Generate correct default.js for Prisma client RUN mkdir -p /app/node_modules/.prisma/client && \ echo "'use strict';" > /app/node_modules/.prisma/client/default.js && \ echo 'Object.defineProperty(exports, "__esModule", { value: true });' >> /app/node_modules/.prisma/client/default.js && \ echo 'exports.Prisma = void 0;' >> /app/node_modules/.prisma/client/default.js && \ echo 'exports.$Enums = void 0;' >> /app/node_modules/.prisma/client/default.js && \ echo 'exports.PrismaClient = void 0;' >> /app/node_modules/.prisma/client/default.js && \ echo 'const $Class = require("/app/apps/api/dist/generated/prisma/internal/class");' >> /app/node_modules/.prisma/client/default.js && \ echo 'const Prisma = require("/app/apps/api/dist/generated/prisma/internal/prismaNamespace");' >> /app/node_modules/.prisma/client/default.js && \ echo 'exports.Prisma = Prisma;' >> /app/node_modules/.prisma/client/default.js && \ echo 'const enums = require("/app/apps/api/dist/generated/prisma/enums");' >> /app/node_modules/.prisma/client/default.js && \ echo 'exports.$Enums = enums.$Enums;' >> /app/node_modules/.prisma/client/default.js && \ echo 'exports.PrismaClient = $Class.getPrismaClientClass();' >> /app/node_modules/.prisma/client/default.js ENTRYPOINT ["/sbin/tini", "--"] CMD ["node", "apps/api/dist/main.js"] ENV NODE_ENV=production EXPOSE 3000