docker/Dockerfile
FROM node:18.4.0-alpine AS nodeWORKDIR /appENV NODE_ENV=productionRUN apk update \ && apk add -y --no-cache tini \ && chown -R node:node /appUSER node FROM node:18.4.0-alpine AS node_builderWORKDIR /appENV NODE_ENV=productionRUN apk update \ && apk add -y --no-cache tini python3 make g++ \ && chown -R node:node /appUSER node FROM nginx:1.23.0-alpine AS nginx FROM node_builder AS api_baseCOPY --chown=node:node package*.json yarn*.lock ./COPY --chown=node:node ./packages/api/package.json ./packages/api/package.jsonRUN yarn install --frozen-lockfile --production && yarn cache clean --force FROM api_base AS api_devENV NODE_ENV=developmentRUN yarn install --production=falseWORKDIR /app/packages/apiCOPY --chown=node:node ./packages/api ./EXPOSE 3001ENTRYPOINT ["/usr/bin/tini", "--"]CMD ["node_modules/.bin/nodemon", "src/"]HEALTHCHECK CMD curl --fail http://127.0.0.1:3001 || exit 1 FROM node AS apiARG BUILD_DATEARG VCS_REFARG BUILD_VERSIONLABEL org.label-schema.schema-version="1.0"LABEL org.label-schema.build-date=$BUILD_DATELABEL org.label-schema.name="shoutitbot/api"LABEL org.label-schema.description="Feather.js Express backend API for Shout It Telegram bot management"LABEL org.label-schema.url="https://shoutit.io/"LABEL org.label-schema.vcs-url="https://github.com/Celtech/shout-it"LABEL org.label-schema.vcs-ref=$VCS_REFLABEL org.label-schema.vendor="Shout It Ltd."LABEL org.label-schema.version=$BUILD_VERSIONLABEL org.label-schema.docker.cmd="docker run -p 3001:3001 -d shoutitbot/api"WORKDIR /app/packages/apiCOPY --chown=node:node ./packages/api ./COPY --chown=node:node --from=api_base /app/node_modules /app/node_modulesEXPOSE 3001ENTRYPOINT ["/usr/bin/tini", "--"]CMD ["node", "src/"]HEALTHCHECK CMD curl --fail http://127.0.0.1:3001 || exit 1 FROM node AS app_baseCOPY --chown=node:node package*.json yarn*.lock ./COPY --chown=node:node ./packages/app/package.json ./packages/app/package.jsonRUN yarn install --frozen-lockfile --production=false && yarn cache clean --force FROM app_base AS app_devENV NODE_ENV=developmentWORKDIR /app/packages/appCOPY --chown=node:node ./packages/app ./EXPOSE 3000ENTRYPOINT ["/usr/bin/tini", "--"]CMD ["node_modules/.bin/vite", "dev"]HEALTHCHECK CMD curl --fail http://127.0.0.1:3000 || exit 1 FROM app_base AS app_builderWORKDIR /app/packages/appCOPY --chown=node:node ./packages/app ./RUN yarn build FROM nginx AS appARG BUILD_DATEARG VCS_REFARG BUILD_VERSIONLABEL org.label-schema.schema-version="1.0"LABEL org.label-schema.build-date=$BUILD_DATELABEL org.label-schema.name="shoutitbot/app"LABEL org.label-schema.description="Vue 3 frontend web application for Shout It Telegram bot management"LABEL org.label-schema.url="https://shoutit.io/"LABEL org.label-schema.vcs-url="https://github.com/Celtech/shout-it"LABEL org.label-schema.vcs-ref=$VCS_REFLABEL org.label-schema.vendor="Shout It Ltd."LABEL org.label-schema.version=$BUILD_VERSIONLABEL org.label-schema.docker.cmd="docker run -p 3000:3000 -d shoutitbot/app"COPY ./docker/conf/nginx/nginx.conf /etc/nginx/nginx.confRUN rm -rf /usr/share/nginx/html/* && \ chown -R nginx:nginx /usr/share/nginx/html && chmod -R 755 /usr/share/nginx/html && \ chown -R nginx:nginx /var/cache/nginx && \ chown -R nginx:nginx /var/log/nginx && \ chown -R nginx:nginx /etc/nginx/conf.dRUN touch /var/run/nginx.pid && \ chown -R nginx:nginx /var/run/nginx.pidUSER nginxCOPY --chown=nginx:nginx --from=app_builder /app/packages/app/dist /usr/share/nginx/htmlEXPOSE 3000ENTRYPOINT ["nginx", "-g", "daemon off;"]HEALTHCHECK CMD curl --fail http://127.0.0.1:3000 || exit 1