Files
lehuo/apps/api/Dockerfile
T

46 lines
2.8 KiB
Docker
Raw Normal View History

2026-08-12 14:35:12 +08:00
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
2026-08-12 14:35:12 +08:00
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
2026-08-12 14:35:12 +08:00
FROM node:24.13.0-alpine
2026-08-12 14:35:12 +08:00
WORKDIR /app
RUN apk add --no-cache tini
# Copy all node_modules from build stage
2026-08-12 14:35:12 +08:00
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
2026-08-12 14:35:12 +08:00
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
2026-08-12 14:35:12 +08:00
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", "--"]
2026-08-12 14:35:12 +08:00
CMD ["node", "apps/api/dist/main.js"]
ENV NODE_ENV=production
EXPOSE 3000