FROM node:22-alpine AS build WORKDIR /app ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 RUN corepack enable COPY package.json pnpm-lock.yaml ./ RUN pnpm fetch COPY . . RUN pnpm install --frozen-lockfile --offline && pnpm run build # Every dependency is bundled into build/, so the runtime image needs no node_modules FROM node:22-alpine WORKDIR /app ENV NODE_ENV=production \ HOST=0.0.0.0 \ PORT=3000 COPY --from=build /app/build ./build COPY package.json server.js ./ USER node EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||3000)+'/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" CMD ["node", "server.js"]