FROM node:20-alpine AS builder WORKDIR /app # Install pnpm and configure registry RUN npm config set registry https://registry.npmmirror.com && \ npm install -g pnpm && \ pnpm config set registry https://registry.npmmirror.com # Copy workspace files COPY pnpm-workspace.yaml package.json pnpm-lock.yaml tsconfig.base.json ./ COPY packages/shared ./packages/shared COPY packages/server ./packages/server # Install dependencies RUN pnpm install --frozen-lockfile # Build shared package first WORKDIR /app/packages/shared RUN pnpm build # Build server WORKDIR /app/packages/server RUN pnpm build # Production stage FROM node:20-alpine AS production WORKDIR /app RUN npm config set registry https://registry.npmmirror.com && \ npm install -g pnpm && \ pnpm config set registry https://registry.npmmirror.com # Copy package files COPY --from=builder /app/pnpm-workspace.yaml ./ COPY --from=builder /app/package.json ./ COPY --from=builder /app/pnpm-lock.yaml ./ COPY --from=builder /app/packages/server/package.json ./packages/server/ COPY --from=builder /app/packages/shared ./packages/shared # Install production dependencies only RUN pnpm install --prod --frozen-lockfile # Copy built files COPY --from=builder /app/packages/server/dist ./packages/server/dist COPY --from=builder /app/packages/server/src/lua ./packages/server/lua COPY --from=builder /app/packages/server/config ./packages/config ENV NODE_ENV=production ENV PORT=3000 EXPOSE 3000 WORKDIR /app/packages/server CMD ["node", "dist/index.js"]