FROM ubuntu:jammy AS builder ENV NODE_ENV="production" RUN set -ex; \ export DEBIAN_FRONTEND=noninteractive; \ apt-get -qq update; \ apt-get -y --no-install-recommends install \ build-essential \ ca-certificates \ curl \ gnupg \ pkg-config \ xvfb \ libglfw3-dev \ libuv1-dev \ libjpeg-turbo8 \ libicu70 \ libcairo2-dev \ libpango1.0-dev \ libjpeg-dev \ libgif-dev \ librsvg2-dev \ gir1.2-rsvg-2.0 \ librsvg2-2 \ librsvg2-common \ libcurl4-openssl-dev \ libpixman-1-dev \ libpixman-1-0; \ apt-get -y --purge autoremove; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN mkdir -p /etc/apt/keyrings; \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list; \ apt-get -qq update; \ apt-get install -y nodejs; \ npm i -g npm@latest; \ apt-get -y remove curl gnupg; \ apt-get -y --purge autoremove; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app COPY package-lock.json /usr/src/app RUN npm config set maxsockets 1; \ npm config set fetch-retries 5; \ npm config set fetch-retry-mintimeout 100000; \ npm config set fetch-retry-maxtimeout 600000; \ npm ci --omit=dev; \ chown -R root:root /usr/src/app; FROM ubuntu:jammy AS final ENV \ NODE_ENV="production" \ CHOKIDAR_USEPOLLING=1 \ CHOKIDAR_INTERVAL=500 RUN set -ex; \ export DEBIAN_FRONTEND=noninteractive; \ groupadd -r node; \ useradd -r -g node node; \ apt-get -qq update; \ apt-get -y --no-install-recommends install \ ca-certificates \ curl \ gnupg \ xvfb \ libglfw3 \ libuv1 \ libjpeg-turbo8 \ libicu70 \ libcairo2 \ libgif7 \ libopengl0 \ libpixman-1-0 \ libcurl4 \ librsvg2-2 \ libpango-1.0-0; \ apt-get -y --purge autoremove; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN mkdir -p /etc/apt/keyrings; \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list; \ apt-get -qq update; \ apt-get install -y nodejs; \ npm i -g npm@latest; \ apt-get -y remove curl gnupg; \ apt-get -y --purge autoremove; \ apt-get clean; \ rm -rf /var/lib/apt/lists/*; COPY --from=builder /usr/src/app /usr/src/app COPY . /usr/src/app RUN mkdir -p /data && chown node:node /data VOLUME /data WORKDIR /data EXPOSE 8080 USER node:node ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"] HEALTHCHECK CMD node /usr/src/app/src/healthcheck.js