FROM node:16 as builder ARG BACKEND_URL ENV BACKEND_URL=${BACKEND_URL} ARG SIIBRA_API_ENDPOINTS ENV SIIBRA_API_ENDPOINTS=${SIIBRA_API_ENDPOINTS:-https://siibra-api-stable.apps.hbp.eu/v3_0,https://siibra-api-stable.apps.jsc.hbp.eu/v3_0} ARG STRICT_LOCAL ENV STRICT_LOCAL=${STRICT_LOCAL:-false} ARG KIOSK_MODE ENV KIOSK_MODE=${KIOSK_MODE:-false} ARG MATOMO_URL ENV MATOMO_URL=${MATOMO_URL} ARG MATOMO_ID ENV MATOMO_ID=${MATOMO_ID} ARG EXPERIMENTAL_FEATURE_FLAG ENV EXPERIMENTAL_FEATURE_FLAG=${EXPERIMENTAL_FEATURE_FLAG:-false} ARG ENABLE_LEAP_MOTION ENV ENABLE_LEAP_MOTION=${ENABLE_LEAP_MOTION:-false} # mkdir, and copy package.json and package-lock.json and npm i # to effectively use the caching layer RUN mkdir /iv WORKDIR /iv COPY ./package.json /iv/ COPY ./package-lock.json /iv/ RUN npm i COPY . /iv/ # angular 12 echo the env var into src/environments/environment.prod.ts RUN node ./src/environments/parseEnv.js RUN npm run build RUN node third_party/matomo/processMatomo.js # RUN npm run build-storybook # gzipping container FROM ubuntu:22.04 as compressor RUN apt upgrade -y && apt update && apt install brotli RUN mkdir /iv COPY --from=builder /iv/dist/aot /iv # COPY --from=builder /iv/storybook-static /iv/storybook-static # Remove duplicated assets. Use symlink instead. # WORKDIR /iv/storybook-static RUN rm -rf ./assets RUN ln -s ../assets ./assets WORKDIR /iv RUN for f in $(find . -type f); do gzip < $f > $f.gz && brotli < $f > $f.br; done # prod container FROM node:16-alpine ENV NODE_ENV=production RUN apk --no-cache add ca-certificates RUN mkdir /iv-app WORKDIR /iv-app # Copy common folder COPY --from=builder /iv/common /common # Copy the express server COPY --from=builder /iv/deploy . # Copy built siibra explorer COPY --from=compressor /iv ./public RUN chown -R node:node /iv-app USER node RUN npm i EXPOSE 8080 ENV PORT 8080 ENTRYPOINT [ "node", "server.js" ]