# ################################################################ # ### Base image ### # ################################################################ FROM node:16-alpine as base WORKDIR /opt COPY . . WORKDIR /opt/backend ARG NODE_ENV=production ENV NODE_ENV ${NODE_ENV} RUN npm i npm@latest -g RUN chown node:node -R /opt USER node # ################################################################ # ### development image ### # ################################################################ FROM base as development RUN npm install --quiet --unsafe-perm --no-progress --no-audit --include=dev CMD npm run dev # ################################################################ # ### backend build image ### # ################################################################ FROM base as backendbuild RUN npm install --quiet --unsafe-perm --no-progress --no-audit --include=dev RUN npx tsc -p ./tsconfig.json # ################################################################ # ### frontend build image ### # ################################################################ FROM base as frontendbuild WORKDIR /opt/frontend RUN npm install --quiet --unsafe-perm --no-progress --no-audit --include=dev RUN npm run build # ################################################################ # ### production image ### # ################################################################ FROM base as production COPY --from=backendbuild --chown=node:node /opt/backend/dist/ /opt/backend/dist/ COPY --from=frontendbuild --chown=node:node /opt/frontend/dist/ /opt/frontend/dist/ RUN npm install --quiet --unsafe-perm --no-progress --no-audit --omit=dev CMD node --es-module-specifier-resolution=node dist/backend/src/app.js