From fc35ee0f3d0cb6fe3e1925d1132d1deddd25fc0b Mon Sep 17 00:00:00 2001 From: Abel Luck Date: Fri, 2 Jun 2023 11:07:55 +0000 Subject: [PATCH] metamigo-api(Dockerfile): use turbo prune --docker --- apps/metamigo-api/Dockerfile | 89 ++++++++++++++++-------------------- docker-compose.yml | 61 ++++++++++++------------ 2 files changed, 71 insertions(+), 79 deletions(-) diff --git a/apps/metamigo-api/Dockerfile b/apps/metamigo-api/Dockerfile index 95eddf6..c543ca8 100644 --- a/apps/metamigo-api/Dockerfile +++ b/apps/metamigo-api/Dockerfile @@ -1,60 +1,51 @@ -FROM node:20-bullseye as builder +FROM node:20 as base -ARG METAMIGO_DIR=/opt/metamigo -RUN mkdir -p ${METAMIGO_DIR}/ -WORKDIR ${METAMIGO_DIR} -COPY package.json tsconfig.json ${METAMIGO_DIR}/ -COPY . ${METAMIGO_DIR}/ -RUN npm install -RUN npm run build -# RUN npx --no-install tsc --build --verbose +FROM base AS builder +ARG APP_DIR=/opt/metamigo-api +RUN mkdir -p ${APP_DIR}/ +RUN npm i -g turbo +WORKDIR ${APP_DIR} +COPY . . +RUN turbo prune --scope=metamigo-api --docker -RUN rm -Rf ./node_modules -FROM node:20-bullseye as clean -ARG METAMIGO_DIR=/opt/metamigo +FROM base AS installer +ARG APP_DIR=/opt/metamigo-api +WORKDIR ${APP_DIR} +COPY .gitignore .gitignore +COPY --from=builder ${APP_DIR}/out/json/ . +COPY --from=builder ${APP_DIR}/out/package-lock.json ./package-lock.json +RUN npm ci --omit=dev -COPY --from=builder ${METAMIGO_DIR} ${METAMIGO_DIR}/ - -RUN rm -Rf ./node_modules - -FROM node:20-bullseye as pristine -LABEL maintainer="Abel Luck " +COPY --from=builder ${APP_DIR}/out/full/ . +RUN npm i -g turbo +RUN turbo run build --filter=metamigo-api +FROM base AS runner +ARG APP_DIR=/opt/metamigo-api +WORKDIR ${APP_DIR}/ +ARG BUILD_DATE +ARG VERSION +LABEL maintainer="Darren Clarke " +LABEL org.label-schema.build-date=$BUILD_DATE +LABEL org.label-schema.version=$VERSION +ENV APP_DIR ${APP_DIR} RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ - apt-get install -y --no-install-recommends --fix-missing \ - postgresql-client dumb-init ffmpeg - -ARG METAMIGO_DIR=/opt/metamigo -ENV METAMIGO_DIR ${METAMIGO_DIR} -RUN mkdir -p ${METAMIGO_DIR} -RUN chown -R node:node ${METAMIGO_DIR}/ - -COPY docker-entrypoint.sh /docker-entrypoint.sh -RUN chmod +x /docker-entrypoint.sh - -COPY --from=clean ${METAMIGO_DIR}/ ${METAMIGO_DIR}/ - -WORKDIR ${METAMIGO_DIR} + apt-get install -y --no-install-recommends \ + dumb-init +RUN mkdir -p ${APP_DIR} +RUN chown -R node ${APP_DIR}/ USER node - +WORKDIR ${APP_DIR} +COPY --from=installer ${APP_DIR}/node_modules/ ./node_modules/ +COPY --from=installer ${APP_DIR}/apps/metamigo-api/ ./apps/metamigo-api/ +COPY --from=installer ${APP_DIR}/package.json ./package.json +USER root +WORKDIR ${APP_DIR}/apps/metamigo-api/ +RUN chmod +x docker-entrypoint.sh +USER node EXPOSE 3000 -EXPOSE 3001 -EXPOSE 3002 ENV PORT 3000 ENV NODE_ENV production - -ARG BUILD_DATE -ARG VCS_REF -ARG VCS_URL="https://gitlab.com/digiresilience/link/metamigo" -ARG VERSION -LABEL org.label-schema.schema-version="1.0" -LABEL org.label-schema.name="digiresilience.org/link/metamigo" -LABEL org.label-schema.description="part of CDR Link" -LABEL org.label-schema.build-date=$BUILD_DATE -LABEL org.label-schema.vcs-url=$VCS_URL -LABEL org.label-schema.vcs-ref=$VCS_REF -LABEL org.label-schema.version=$VERSION - -ENTRYPOINT ["/docker-entrypoint.sh"] +ENTRYPOINT ["/opt/metamigo-api/apps/metamigo-api/docker-entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index f8a0deb..448138c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -162,18 +162,37 @@ services: volumes: - zammad-data:/opt/zammad - # metamigo-api: - # build: ./apps/metamigo-api - # container_name: metamigo-api - # restart: ${RESTART} - # command: [ "api" ] - # expose: - # - "3001" - # ports: - # - 127.0.0.1:8004:3001 - # environment: *common-metamigo-variables - # volumes: - # - ./signald:/signald + + metamigo-postgresql: + build: ./docker/postgresql + container_name: metamigo-postgresql + restart: ${RESTART} + volumes: + - metamigo-data:/var/lib/postgresql/data + - ./scripts/bootstrap-metamigo.sh:/docker-entrypoint-initdb.d/bootstrap-metamigo.sh + environment: + <<: *common-metamigo-variables + POSTGRES_PASSWORD: ${METAMIGO_DATABASE_ROOT_PASSWORD} + POSTGRES_USER: "root" + POSTGRES_DB: "metamigo" + ports: + - 127.0.0.1:5433:5432 + + metamigo-api: + build: + context: . + dockerfile: ./apps/metamigo-api/Dockerfile + container_name: metamigo-api + restart: ${RESTART} + command: [ "api" ] + ports: + - 127.0.0.1:8004:3001 + environment: *common-metamigo-variables + volumes: + - ./signald:/signald + depends_on: + - metamigo-postgresql + - signald # metamigo-frontend: # build: ./apps/metamigo-frontend @@ -196,22 +215,6 @@ services: # command: [ "worker" ] # environment: *common-metamigo-variables - # metamigo-postgresql: - # build: ./docker/postgresql - # restart: ${RESTART} - # volumes: - # - metamigo-data:/var/lib/postgresql/data - # - ./scripts/bootstrap-metamigo.sh:/docker-entrypoint-initdb.d/bootstrap-metamigo.sh - # environment: - # <<: *common-metamigo-variables - # POSTGRES_PASSWORD: ${METAMIGO_DATABASE_ROOT_PASSWORD} - # POSTGRES_USER: "root" - # POSTGRES_DB: "metamigo" - # expose: - # - "5432" - # ports: - # - 127.0.0.1:5433:5432 - signald: container_name: signald build: ./docker/signald @@ -260,8 +263,6 @@ services: build: context: . dockerfile: ./apps/leafcutter/Dockerfile - expose: - - "3000" ports: - "8004:3000" environment: