#-------------------------------------------- # Stage: building TypeScript #-------------------------------------------- FROM node:18 as build-stage ENV WORKDIR=/app WORKDIR /app COPY ./package*.json ./ # instaliram pakete RUN npm i && npm cache clean --force COPY ./tsconfig.json ./ COPY ./src ./src RUN npm run build #-------------------------------------------- # Stage: instaliram produkcijski node_modules #-------------------------------------------- FROM node:18 as package-stage WORKDIR /app COPY ./package*.json ./ # instaliram SAMO produkcijske RUN npm i --only=production && npm cache clean --force #-------------------------------------------- # Stage: priprema finalnog image-a #-------------------------------------------- FROM gcr.io/distroless/nodejs:18 as assembly-stage WORKDIR /app ARG PORT="3000" ENV PORT=${PORT} # prometheus config ARG PROMETHEUS_APP_LABEL ENV PROMETHEUS_APP_LABEL=${PROMETHEUS_APP_LABEL} ARG PROMETHEUS_HISTOGRAM_BUCKETS ENV PROMETHEUS_HISTOGRAM_BUCKETS=${PROMETHEUS_HISTOGRAM_BUCKETS} # (optional) logiranje na stdout (moguće opcije: "server:server", "server:metrics", "server:healthcheck" ) ARG DEBUG ENV DEBUG=${DEBUG} # kopiram node-modules COPY --from=package-stage /app/package*.json ./ COPY --from=package-stage /app/node_modules ./node_modules # kopiram buildane datoteke COPY --from=build-stage /app/build/ ./server # server vrtim pod ograničenim "nobody" korisnikom USER nobody:nobody HEALTHCHECK --interval=30s --timeout=3s --start-period=10s \ CMD ["/nodejs/bin/node", "./server/healthcheck.js"] # pokrećem server CMD ["./server/entry.js"]