FROM node:20.18-bookworm-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN apt-get update && apt-get install -y \ build-essential \ python3 \ libcairo2-dev \ libpango1.0-dev \ libjpeg-dev \ libgif-dev \ librsvg2-dev \ libexpat1 \ && rm -rf /var/lib/apt/lists/* RUN npm install -g pnpm@10.30.1 FROM base AS build WORKDIR /app COPY . . # We only need standard pnpm install now, no C++ tools needed for basic Sharp RUN pnpm install --frozen-lockfile RUN pnpm --filter @mintel/image-processor build RUN pnpm --filter image-service build FROM base WORKDIR /app # Instead of copying node_modules which contains native C++ bindings for canvas and tfjs-node, # we copy the package.json files and install natively in the final stage so the bindings are correct. COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY apps/image-service/package.json ./apps/image-service/package.json COPY packages/image-processor/package.json ./packages/image-processor/package.json RUN pnpm install --frozen-lockfile --filter image-service... COPY --from=build /app/apps/image-service/dist ./apps/image-service/dist COPY --from=build /app/packages/image-processor/dist ./packages/image-processor/dist COPY --from=build /app/packages/image-processor/models ./packages/image-processor/models EXPOSE 8080 WORKDIR /app/apps/image-service CMD ["npm", "run", "start"]