diff --git a/Dockerfile b/Dockerfile index 09f3d16..2ecfe23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,44 +1,36 @@ -FROM node:16.14.2 as client-builder +FROM node:16.14.2-alpine as client-builder -WORKDIR /usr/src/app -COPY picture-gallery-client/package*.json picture-gallery-client/ +COPY picture-gallery-client/package*.json /usr/src/app/picture-gallery-client/ WORKDIR /usr/src/app/picture-gallery-client RUN npm ci --only=production COPY picture-gallery-client . RUN npm run build-client -FROM node:16.14.2 as server-builder +RUN mkdir built && \ + mv build built && \ + mv package.minimize.docker.json built/package.json && \ + cp package-lock.json built && \ + npm --prefix built/ ci --only=production -WORKDIR /usr/src/app -COPY picture-gallery-server/package*.json picture-gallery-server/ +FROM node:16.14.2-alpine as server-builder + +COPY picture-gallery-server/package*.json /usr/src/app/picture-gallery-server/ WORKDIR /usr/src/app/picture-gallery-server RUN npm ci COPY picture-gallery-server . RUN npm run build-server -FROM node:16.14.2 +RUN mkdir built && \ + mv dist node_modules built -WORKDIR /usr/src/app +FROM node:16.14.2-alpine -COPY picture-gallery-client/package*.json picture-gallery-client/ -COPY picture-gallery-server/package*.json picture-gallery-server/ - -COPY --from=client-builder /usr/src/app/picture-gallery-client/build /usr/src/app/picture-gallery-client/build -COPY --from=server-builder /usr/src/app/picture-gallery-server/dist /usr/src/app/picture-gallery-server/dist - -RUN chown node:node -R /usr/src/app/picture-gallery-client/build && \ - chown node:node -R /usr/src/app/picture-gallery-server/dist - -# only needed for "react-inject-env" -WORKDIR /usr/src/app/picture-gallery-client -RUN npm ci --only=production - -WORKDIR /usr/src/app/picture-gallery-server -RUN npm ci --only=production +COPY --from=client-builder --chown=node:node /usr/src/app/picture-gallery-client/built /usr/src/app/picture-gallery-client/ +COPY --from=server-builder --chown=node:node /usr/src/app/picture-gallery-server/built /usr/src/app/picture-gallery-server/ VOLUME /usr/src/app/public EXPOSE 3001 USER node -# we are still in the server directory +WORKDIR /usr/src/app/picture-gallery-server CMD npm --prefix ../picture-gallery-client/ run set-environment && node dist/app.js \ No newline at end of file diff --git a/picture-gallery-client/package.minimize.docker.json b/picture-gallery-client/package.minimize.docker.json new file mode 100644 index 0000000..3267f16 --- /dev/null +++ b/picture-gallery-client/package.minimize.docker.json @@ -0,0 +1,11 @@ +{ + "name": "picture-gallery-client", + "version": "0.1.0", + "private": true, + "dependencies": { + "react-inject-env": "2.1.0" + }, + "scripts": { + "set-environment": "npx react-inject-env set" + } +}