123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- # Common base image
- FROM node:22-alpine AS common_base
- ARG UID=1000
- ARG GID=1000
- RUN deluser --remove-home node \
- && addgroup -S -g ${GID} musare \
- && adduser -SD -u ${UID} musare \
- && adduser musare musare
- RUN mkdir -p /opt/.git /opt/types /opt/app \
- && chown -R musare:musare /opt/app
- WORKDIR /opt/app
- USER musare
- # Server node modules
- FROM common_base AS server_node_modules
- COPY --chown=musare:musare --link server/package.json server/package-lock.json /opt/app/
- RUN npm install
- # Server build
- FROM common_base AS server_build
- ENV APP_ENV=production
- COPY --chown=musare:musare --link .git /opt/.git
- COPY --chown=musare:musare --link server /opt/app
- COPY --chown=musare:musare --link --from=server_node_modules /opt/app/node_modules node_modules
- RUN npm run compile
- # Server production image
- FROM common_base AS server
- COPY --from=server_build --link /opt/app /opt/app
- COPY --from=server_node_modules --link /opt/app/node_modules node_modules
- COPY --from=server_node_modules --link /opt/app/package.json /opt/app/package-lock.json /opt/app/
- ENTRYPOINT npm run migrate && npm run start
- EXPOSE 3030
- # Backend node modules
- FROM common_base AS backend_node_modules
- COPY --chown=musare:musare --link backend/package.json backend/package-lock.json /opt/app/
- RUN npm install
- # Backend production image
- FROM common_base AS backend
- ENV APP_ENV=production
- COPY --chown=musare:musare --link .git /opt/.git
- COPY --chown=musare:musare --link backend /opt/app
- COPY --chown=musare:musare --link --from=backend_node_modules /opt/app/node_modules node_modules
- ENTRYPOINT npm run prod
- EXPOSE 8080
- # Frontend node modules
- FROM common_base AS frontend_node_modules
- COPY --chown=musare:musare --link frontend/package.json frontend/package-lock.json /opt/app/
- RUN npm install
- # Frontend build
- FROM common_base AS frontend_build
- ARG FRONTEND_PROD_DEVTOOLS=false
- ARG MUSARE_SITENAME=Musare
- ARG MUSARE_PRIMARY_COLOR="#03a9f4"
- ARG MUSARE_DEBUG_VERSION=true
- ARG MUSARE_DEBUG_GIT_REMOTE=false
- ARG MUSARE_DEBUG_GIT_REMOTE_URL=false
- ARG MUSARE_DEBUG_GIT_BRANCH=true
- ARG MUSARE_DEBUG_GIT_LATEST_COMMIT=true
- ARG MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT=true
- ENV APP_ENV=production \
- FRONTEND_PROD_DEVTOOLS=${FRONTEND_PROD_DEVTOOLS} \
- MUSARE_SITENAME=${MUSARE_SITENAME} \
- MUSARE_PRIMARY_COLOR=${MUSARE_PRIMARY_COLOR} \
- MUSARE_DEBUG_VERSION=${MUSARE_DEBUG_VERSION} \
- MUSARE_DEBUG_GIT_REMOTE=${MUSARE_DEBUG_GIT_REMOTE} \
- MUSARE_DEBUG_GIT_REMOTE_URL=${MUSARE_DEBUG_GIT_REMOTE_URL} \
- MUSARE_DEBUG_GIT_BRANCH=${MUSARE_DEBUG_GIT_BRANCH} \
- MUSARE_DEBUG_GIT_LATEST_COMMIT=${MUSARE_DEBUG_GIT_LATEST_COMMIT} \
- MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT=${MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT}
- COPY --chown=musare:musare --link .git /opt/.git
- COPY --chown=musare:musare --link types /opt/types
- COPY --chown=musare:musare --link frontend /opt/app
- COPY --chown=musare:musare --from=frontend_node_modules --link /opt/app/node_modules node_modules
- RUN npm run prod
- # Frontend production image
- FROM nginx AS frontend
- COPY --chown=root:root --link frontend/nginx.prod.conf /etc/nginx/conf.d/default.conf
- COPY --from=frontend_build --chown=nginx:nginx --link /opt/app/build /usr/share/nginx/html
- EXPOSE 80
|