|
@@ -1,4 +1,5 @@
|
|
|
-FROM node:18-alpine AS frontend_base
|
|
|
+# Common base image
|
|
|
+FROM node:18-alpine AS common_base
|
|
|
|
|
|
ARG UID=1000
|
|
|
ARG GID=1000
|
|
@@ -8,22 +9,41 @@ RUN deluser --remove-home node \
|
|
|
&& adduser -SD -u ${UID} musare \
|
|
|
&& adduser musare musare
|
|
|
|
|
|
-RUN mkdir -p /opt/.git /opt/types /opt/app /run/nginx \
|
|
|
+RUN mkdir -p /opt/.git /opt/types /opt/app \
|
|
|
&& chown -R musare:musare /opt/app
|
|
|
|
|
|
WORKDIR /opt/app
|
|
|
|
|
|
USER musare
|
|
|
|
|
|
-FROM frontend_base AS frontend_node_modules
|
|
|
+# 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
|
|
|
+
|
|
|
+# 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
|
|
|
|
|
|
-FROM frontend_base AS musare_frontend
|
|
|
+# Frontend build
|
|
|
+FROM common_base AS frontend_build
|
|
|
|
|
|
-ARG FRONTEND_MODE=production
|
|
|
ARG FRONTEND_PROD_DEVTOOLS=false
|
|
|
ARG MUSARE_SITENAME=Musare
|
|
|
ARG MUSARE_PRIMARY_COLOR="#03a9f4"
|
|
@@ -34,7 +54,7 @@ ARG MUSARE_DEBUG_GIT_BRANCH=true
|
|
|
ARG MUSARE_DEBUG_GIT_LATEST_COMMIT=true
|
|
|
ARG MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT=true
|
|
|
|
|
|
-ENV FRONTEND_MODE=${FRONTEND_MODE} \
|
|
|
+ENV APP_ENV=production \
|
|
|
FRONTEND_PROD_DEVTOOLS=${FRONTEND_PROD_DEVTOOLS} \
|
|
|
MUSARE_SITENAME=${MUSARE_SITENAME} \
|
|
|
MUSARE_PRIMARY_COLOR=${MUSARE_PRIMARY_COLOR} \
|
|
@@ -45,19 +65,15 @@ ENV FRONTEND_MODE=${FRONTEND_MODE} \
|
|
|
MUSARE_DEBUG_GIT_LATEST_COMMIT=${MUSARE_DEBUG_GIT_LATEST_COMMIT} \
|
|
|
MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT=${MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT}
|
|
|
|
|
|
-USER root
|
|
|
-RUN apk add nginx
|
|
|
-USER musare
|
|
|
-
|
|
|
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 sh -c '([[ "${FRONTEND_MODE}" == "development" ]] && exit 0) || npm run prod'
|
|
|
-
|
|
|
-RUN chmod u+x entrypoint.sh
|
|
|
+RUN npm run prod
|
|
|
|
|
|
-ENTRYPOINT sh /opt/app/entrypoint.sh
|
|
|
+# Frontend production image
|
|
|
+FROM nginx AS frontend
|
|
|
|
|
|
-EXPOSE 80/tcp
|
|
|
+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
|