ARG DEVELOPMENT= FROM ubuntu:jammy AS base RUN apt-get update \ && DEBIAN_FRONTEND=NONINTERACTIVE apt-get upgrade -y RUN DEBIAN_FRONTEND=NONINTERACTIVE apt-get install -y \ wget # Upgrade Node RUN wget -qO- https://deb.nodesource.com/setup_18.x | bash - RUN DEBIAN_FRONTEND=NONINTERACTIVE apt-get install -y \ nodejs # Install the latest npm and npx RUN npm install --global npm@latest FROM base AS production RUN DEBIAN_FRONTEND=NONINTERACTIVE apt-get install -y \ git WORKDIR /website COPY /*.json /website/ RUN npm upgrade && npm install COPY /.babelrc /*.html /*.js /website/ COPY /src /website/src COPY /frontend /website/frontend RUN npm run build RUN ls -altr /website WORKDIR /website/client COPY /client/*.json /website/client/ RUN npm upgrade && npm install COPY /client/*.js /website/client/ COPY /client/public /website/client/public COPY /client/src /website/client/src RUN npm run build RUN ls -altr /website/client RUN echo $DEVELOPMENT FROM base AS runtime1 ONBUILD COPY --from=production /website/dist /website/dist ONBUILD COPY --from=production /website/*.html /website/ ONBUILD COPY --from=production /website/client/*.html /website/client/ ONBUILD COPY --from=production /website/client/dist /website/client/dist FROM base AS runtime FROM runtime${DEVELOPMENT} RUN DEBIAN_FRONTEND=NONINTERACTIVE apt-get install -y \ pip \ libgl1 \ libglib2.0-0 \ nginx \ rsync \ less \ git \ sqlite3 \ python2 \ jhead \ jq \ nano \ shellinabox \ nginx \ curl \ less # Install deepface RUN pip install deepface RUN pip install piexif # numpy 1.24 deprecated float; deepface is still using it, so we need to # install <1.24 RUN pip install "numpy<1.24" COPY /server /website/server WORKDIR /website/server RUN npm install COPY /config/default.json /website/config/default.json COPY /ketrface /website/ketrface # Switch to bash instead of sh SHELL [ "/bin/bash", "-c" ] RUN cp /website/server/nginx.conf /etc/nginx/sites-enabled/default # If not DEVELOPMENT mode, copy production config, else development RUN \ if [[ -z "${DEVELOPMENT}" ]]; then \ echo "Building PRODUCTION" ; \ cp /website/server/production.location \ /etc/nginx/snippets/active.location ; \ else \ echo "Building DEVELOPMENT" ; \ cp /website/server/development.location \ /etc/nginx/snippets/active.location ; \ fi # If not DEVELOPMENT mode, then locally build project RUN \ if [[ -z "${DEVELOPMENT}" ]]; then \ cd /website/client ; \ npm run build ; \ fi COPY /scripts /opt/scripts ENV PATH="${PATH}:/opt/scripts" # In DEVELOPMENT mode, entrypoint launches 'npm start' COPY /entrypoint.sh / CMD [ "/entrypoint.sh" ]