diff --git a/.dockerignore b/.dockerignore index 0a4a7e7..923dc15 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ node_modules out signald -docker-compose.yml \ No newline at end of file +docker-compose.yml +README.md \ No newline at end of file diff --git a/README.md b/README.md index ea26582..8b961f0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Local dev with docker-compose -* Create `link-stack/.env` from Bitwarden `root .env for link-stack` +* Create `link-stack/.env` from Bitwarden `.env for root of link-stack` * Run local dev with docker-compose: ``` git clone ... @@ -18,7 +18,6 @@ Or for local dev of a single app * Create `link-stack/apps/metamigo-frontend/.metamigo.local.json` from Bitwarden `.metamigo.local.json for link-stack/apps/metamigo/frontend` * Build locally for development: ``` - make build npm install turbo --concurrency 30 build turbo --concurrency 30 dev diff --git a/apps/metamigo-cli/docker-entrypoint.sh b/apps/metamigo-cli/docker-entrypoint.sh index 9d0ce79..13f558f 100644 --- a/apps/metamigo-cli/docker-entrypoint.sh +++ b/apps/metamigo-cli/docker-entrypoint.sh @@ -8,9 +8,6 @@ if [[ "$1" == "api" ]]; then elif [[ "$1" == "worker" ]]; then echo "docker-entrypoint: starting worker" exec dumb-init ./cli worker -elif [[ "$1" == "frontend" ]]; then - echo "docker-entrypoint: starting frontend" - exec dumb-init yarn workspace @app/frontend start elif [[ "$1" == "cli" ]]; then echo "docker-entrypoint: starting frontend" shift 1 diff --git a/apps/metamigo-frontend/Dockerfile b/apps/metamigo-frontend/Dockerfile index 0be6c17..9963dd8 100644 --- a/apps/metamigo-frontend/Dockerfile +++ b/apps/metamigo-frontend/Dockerfile @@ -1,61 +1,52 @@ -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}/ +FROM base AS builder +ARG APP_DIR=/opt/metamigo-frontend +RUN mkdir -p ${APP_DIR}/ +RUN npm i -g turbo +WORKDIR ${APP_DIR} +COPY . . +RUN turbo prune --scope=@digiresilience/metamigo-frontend --docker -RUN npm --no-install tsc --build --verbose -RUN npm install -RUN npm run build -RUN rm -Rf ./node_modules +FROM base AS installer +ARG APP_DIR=/opt/metamigo-frontend +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 -FROM node:20-bullseye as clean -ARG METAMIGO_DIR=/opt/metamigo - -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-frontend +FROM base AS runner +ARG APP_DIR=/opt/metamigo-frontend +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}/packages/ ./packages/ +COPY --from=installer ${APP_DIR}/apps/metamigo-frontend/ ./apps/metamigo-frontend/ +COPY --from=installer ${APP_DIR}/package.json ./package.json +USER root +WORKDIR ${APP_DIR}/apps/metamigo-frontend/ +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-frontend/apps/metamigo-frontend/docker-entrypoint.sh"] diff --git a/apps/metamigo-frontend/docker-entrypoint.sh b/apps/metamigo-frontend/docker-entrypoint.sh index 9dd4d10..27d0f10 100644 --- a/apps/metamigo-frontend/docker-entrypoint.sh +++ b/apps/metamigo-frontend/docker-entrypoint.sh @@ -1,23 +1,5 @@ #!/bin/bash + set -e - -cd ${AMIGO_DIR} - -if [[ "$1" == "api" ]]; then - echo "docker-entrypoint: starting api server" - ./cli db -- migrate - exec dumb-init ./cli api -elif [[ "$1" == "worker" ]]; then - echo "docker-entrypoint: starting worker" - exec dumb-init ./cli worker -elif [[ "$1" == "frontend" ]]; then - echo "docker-entrypoint: starting frontend" - exec dumb-init yarn workspace @app/frontend start -elif [[ "$1" == "cli" ]]; then - echo "docker-entrypoint: starting frontend" - shift 1 - exec ./cli "$@" -else - echo "docker-entrypoint: missing argument, one of: api, worker, frontend, cli" - exit 1 -fi +echo "starting leafcutter" +exec dumb-init npm run start diff --git a/apps/metamigo-frontend/package.json b/apps/metamigo-frontend/package.json index 13386d4..a8681c1 100644 --- a/apps/metamigo-frontend/package.json +++ b/apps/metamigo-frontend/package.json @@ -1,5 +1,5 @@ { - "name": "metamigo-frontend", + "name": "@digiresilience/metamigo-frontend", "version": "0.2.0", "private": true, "dependencies": { diff --git a/docker-compose.yml b/docker-compose.yml index 09e81b5..dbdca61 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -194,26 +194,32 @@ services: - metamigo-postgresql - signald - # metamigo-frontend: - # build: ./apps/metamigo-frontend - # container_name: metamigo-frontend - # restart: ${RESTART} - # command: [ "frontend" ] - # expose: - # - "3000" - # ports: - # - 127.0.0.1:8002:3000 - # environment: - # <<: *common-metamigo-variables - # VIRTUAL_HOST: ${METAMIGO_VIRTUAL_HOST} - # VIRTUAL_PORT: 3000 + metamigo-frontend: + build: + context: . + dockerfile: ./apps/metamigo-frontend/Dockerfile + container_name: metamigo-frontend + restart: ${RESTART} + command: [ "frontend" ] + expose: + - "3000" + ports: + - 127.0.0.1:8002:3000 + depends_on: + - metamigo-api + environment: + <<: *common-metamigo-variables + VIRTUAL_HOST: ${METAMIGO_VIRTUAL_HOST} + VIRTUAL_PORT: 3000 - # metamigo-worker: - # build: ./apps/metamigo-worker - # container_name: metamigo-worker - # restart: ${RESTART} - # command: [ "worker" ] - # environment: *common-metamigo-variables + metamigo-worker: + build: ./apps/metamigo-worker + container_name: metamigo-worker + restart: ${RESTART} + command: [ "worker" ] + environment: *common-metamigo-variables + depends_on: + - metamigo-api signald: container_name: signald diff --git a/package-lock.json b/package-lock.json index f563f14..90cbb59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -444,12 +444,14 @@ } }, "apps/metamigo-cli": { + "name": "@digiresilience/metamigo-cli", "version": "0.2.0", "license": "AGPL-3.0-or-later", "dependencies": { "@digiresilience/metamigo-api": "*", "@digiresilience/metamigo-config": "*", "@digiresilience/metamigo-db": "*", + "@digiresilience/metamigo-worker": "*", "@digiresilience/montar": "*", "commander": "^10.0.1", "graphile-migrate": "^1.4.1", @@ -473,6 +475,7 @@ } }, "apps/metamigo-frontend": { + "name": "@digiresilience/metamigo-frontend", "version": "0.2.0", "dependencies": { "@apollo/client": "^3.7.14", @@ -2308,6 +2311,10 @@ "resolved": "packages/metamigo-db", "link": true }, + "node_modules/@digiresilience/metamigo-frontend": { + "resolved": "apps/metamigo-frontend", + "link": true + }, "node_modules/@digiresilience/metamigo-worker": { "resolved": "apps/metamigo-worker", "link": true @@ -15024,10 +15031,6 @@ "node": ">= 8" } }, - "node_modules/metamigo-frontend": { - "resolved": "apps/metamigo-frontend", - "link": true - }, "node_modules/micromark": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",