# Typescript Build FROM registry.odit.services/hub/library/node:14.15.1-alpine3.12 WORKDIR /app COPY package.json ./ RUN npm i -g pnpm RUN pnpm i COPY tsconfig.json ./ COPY src ./src RUN pnpm run build # final image FROM registry.odit.services/hub/library/alpine:3.13.1 WORKDIR /app RUN apk add --no-cache \ chromium \ nss \ freetype \ freetype-dev \ harfbuzz \ ca-certificates \ ttf-freefont \ nodejs \ yarn \ font-noto-emoji \ && apk add wqy-zenhei --update-cache --repository https://nl.alpinelinux.org/alpine/edge/testing # Tell Puppeteer to skip installing Chrome. We'll be using the installed package. ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser RUN addgroup -S pptruser && adduser -S -g pptruser pptruser \ && mkdir -p /home/pptruser/Downloads /app \ && chown -R pptruser:pptruser /home/pptruser \ && chown -R pptruser:pptruser /app # Run everything after as non-privileged user. USER pptruser COPY package.json ./ RUN yarn COPY --from=0 /app/dist app ENTRYPOINT ["node", "app/app.js"]