FROM node:24-alpine AS build WORKDIR /workspace ARG VITE_API_BASE_URL="" ARG VITE_KEYCLOAK_ISSUER="" ARG VITE_KEYCLOAK_CLIENT_ID="fieldlens" ARG FIELDLENS_VERSION="dev" ENV VITE_API_BASE_URL=$VITE_API_BASE_URL ENV VITE_KEYCLOAK_ISSUER=$VITE_KEYCLOAK_ISSUER ENV VITE_KEYCLOAK_CLIENT_ID=$VITE_KEYCLOAK_CLIENT_ID ENV VITE_APP_VERSION=$FIELDLENS_VERSION COPY package.json ./ COPY apps/api/package.json apps/api/package.json COPY apps/web/package.json apps/web/package.json COPY packages/contracts/package.json packages/contracts/package.json COPY packages/fieldlens-core/package.json packages/fieldlens-core/package.json RUN npm install COPY . . RUN npm run verify RUN npm prune --omit=dev FROM node:24-alpine AS runtime WORKDIR /app ENV NODE_ENV=production ENV PORT=3000 ENV STATIC_DIR=/app/web COPY --from=build /workspace/package.json /app/package.json COPY --from=build /workspace/node_modules /app/node_modules COPY --from=build /workspace/apps/api/package.json /app/apps/api/package.json COPY --from=build /workspace/apps/api/dist /app/apps/api/dist COPY --from=build /workspace/packages/contracts/package.json /app/packages/contracts/package.json COPY --from=build /workspace/packages/contracts/dist /app/packages/contracts/dist COPY --from=build /workspace/apps/web/dist /app/web USER node EXPOSE 3000 HEALTHCHECK --interval=15s --timeout=3s --start-period=20s --retries=5 \ CMD wget -qO- http://127.0.0.1:3000/api/health/live >/dev/null || exit 1 CMD ["node", "apps/api/dist/server.js"]