Dockerfile
ARG APP_ROOT=/opt/app-root/srcARG BASE_IMAGE=docker.io/node:20.9.0-alpine ## Build the app#FROM ${BASE_IMAGE} as app ARG APP_ROOTENV NO_UPDATE_NOTIFIER=true # NPM Permission FixRUN mkdir -p /.npmRUN chown -R 1001:0 /.npm # Build AppCOPY app ${APP_ROOT}RUN chown -R 1001:0 ${APP_ROOT}USER 1001WORKDIR ${APP_ROOT}RUN npm ci && npm run build ## Build the frontend#FROM ${BASE_IMAGE} as frontend ARG APP_ROOTENV NO_UPDATE_NOTIFIER=true # NPM Permission FixRUN mkdir -p /.npmRUN chown -R 1001:0 /.npm # Build FrontendCOPY frontend ${APP_ROOT}RUN chown -R 1001:0 ${APP_ROOT}USER 1001WORKDIR ${APP_ROOT}RUN npm ci && npm run build ## Create the final container image#FROM ${BASE_IMAGE} ARG APP_ROOTENV APP_PORT=8080 \ NO_UPDATE_NOTIFIER=true # NPM Permission FixRUN mkdir -p /.npmRUN chown -R 1001:0 /.npm # Install File StructureCOPY --from=app ${APP_ROOT}/sbin ${APP_ROOT}/sbinCOPY --from=frontend ${APP_ROOT}/dist ${APP_ROOT}/distCOPY .git ${APP_ROOT}/.gitCOPY app/config ${APP_ROOT}/configCOPY app/config ${APP_ROOT}/sbin/configCOPY app/package.json app/package-lock.json ${APP_ROOT}WORKDIR ${APP_ROOT} # Install ApplicationRUN chown -R 1001:0 ${APP_ROOT}USER 1001RUN npm ci --omit=dev EXPOSE ${APP_PORT}CMD ["node", "./sbin/bin/www"]