FROM node:14-alpine as builder # build application and add additional files WORKDIR /ghostfolio # only add basic files without application itself to avoid rebuilding layers when package.json, etc. did not change COPY ./package.json package.json COPY ./yarn.lock yarn.lock COPY ./prisma/schema.prisma prisma/schema.prisma RUN yarn # see https://github.com/nrwl/nx/issues/6586 for further details COPY ./decorate-angular-cli.js decorate-angular-cli.js RUN node decorate-angular-cli.js COPY ./angular.json angular.json COPY ./nx.json nx.json COPY ./replace.build.js replace.build.js COPY ./jest.preset.js jest.preset.js COPY ./jest.config.js jest.config.js COPY ./tsconfig.base.json tsconfig.base.json COPY ./libs libs COPY ./apps apps RUN yarn build:all # Prepare dist image with additional node_modules WORKDIR /ghostfolio/dist/apps/api # package.json was generated by build process, however the yarn.lock need to be used from the original to ensure same versions COPY ./yarn.lock /ghostfolio/dist/apps/api/yarn.lock RUN yarn COPY prisma /ghostfolio/dist/apps/api/prisma # Overwrite generated package.json with original to ensure we have all the scripts COPY package.json /ghostfolio/dist/apps/api RUN yarn database:generate-typings # Image to start, copy everything needed from builder FROM node:14-alpine COPY --from=builder /ghostfolio/dist/apps /ghostfolio/apps WORKDIR /ghostfolio/apps/api EXPOSE 3333 CMD [ "node", "main" ]