From c328299c89d19741b0b9d991b5e1682d7902c117 Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Wed, 22 Mar 2023 07:11:51 +0000 Subject: [PATCH] Add additional Dockerfiles --- apps/leafcutter/.dockerignore | 14 +++++ apps/leafcutter/Dockerfile | 8 +-- apps/metamigo-api/.dockerignore | 14 +++++ apps/metamigo-api/Dockerfile | 60 ++++++++++++++++++ apps/metamigo-api/docker-entrypoint.sh | 23 +++++++ apps/metamigo-frontend/.dockerignore | 14 +++++ apps/metamigo-frontend/Dockerfile | 61 ++++++++++++++++++ apps/metamigo-frontend/docker-entrypoint.sh | 23 +++++++ apps/metamigo-worker/.dockerignore | 14 +++++ apps/metamigo-worker/Dockerfile | 61 ++++++++++++++++++ apps/metamigo-worker/docker-entrypoint.sh | 23 +++++++ docker-compose.yml | 68 ++++++++++++--------- docker/zammad/Dockerfile | 4 +- 13 files changed, 350 insertions(+), 37 deletions(-) create mode 100644 apps/leafcutter/.dockerignore create mode 100644 apps/metamigo-api/.dockerignore create mode 100644 apps/metamigo-api/Dockerfile create mode 100644 apps/metamigo-api/docker-entrypoint.sh create mode 100644 apps/metamigo-frontend/.dockerignore create mode 100644 apps/metamigo-frontend/Dockerfile create mode 100644 apps/metamigo-frontend/docker-entrypoint.sh create mode 100644 apps/metamigo-worker/.dockerignore create mode 100644 apps/metamigo-worker/Dockerfile create mode 100644 apps/metamigo-worker/docker-entrypoint.sh diff --git a/apps/leafcutter/.dockerignore b/apps/leafcutter/.dockerignore new file mode 100644 index 0000000..1d3a882 --- /dev/null +++ b/apps/leafcutter/.dockerignore @@ -0,0 +1,14 @@ +.git +.idea +**/node_modules +!/node_modules +**/build +**/dist +**/tmp +**/.env* +**/coverage +**/.next +**/amigo.*.json +**/.yalc +**/cypress/videos +**/cypress/screenshots diff --git a/apps/leafcutter/Dockerfile b/apps/leafcutter/Dockerfile index 38e9b0d..2f64d4d 100644 --- a/apps/leafcutter/Dockerfile +++ b/apps/leafcutter/Dockerfile @@ -1,8 +1,5 @@ -FROM public.ecr.aws/bitnami/node:16-debian-10 as builder +FROM node:18-bullseye-slim as builder LABEL maintainer="Darren Clarke " -RUN useradd -u 1001 -g root node -RUN mkdir /home/node -RUN chown -R node /home/node ARG APP_DIR=/opt/leafcutter RUN mkdir -p ${APP_DIR}/ COPY . ${APP_DIR}/ @@ -13,7 +10,7 @@ ENV NEXT_PUBLIC_NEXTAUTH_URL https://lc.digiresilience.org RUN npm install RUN npm run build -FROM public.ecr.aws/bitnami/node:16-debian-10 +FROM node:18-bullseye-slim ARG BUILD_DATE ARG VERSION LABEL maintainer="Darren Clarke " @@ -25,7 +22,6 @@ ENV APP_DIR ${APP_DIR} RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get install -y --no-install-recommends \ dumb-init -RUN useradd -u 1001 -g root node RUN mkdir -p ${APP_DIR} RUN chown -R node ${APP_DIR}/ COPY docker-entrypoint.sh /docker-entrypoint.sh diff --git a/apps/metamigo-api/.dockerignore b/apps/metamigo-api/.dockerignore new file mode 100644 index 0000000..1d3a882 --- /dev/null +++ b/apps/metamigo-api/.dockerignore @@ -0,0 +1,14 @@ +.git +.idea +**/node_modules +!/node_modules +**/build +**/dist +**/tmp +**/.env* +**/coverage +**/.next +**/amigo.*.json +**/.yalc +**/cypress/videos +**/cypress/screenshots diff --git a/apps/metamigo-api/Dockerfile b/apps/metamigo-api/Dockerfile new file mode 100644 index 0000000..973ddb5 --- /dev/null +++ b/apps/metamigo-api/Dockerfile @@ -0,0 +1,60 @@ +FROM node:18-bullseye as builder + +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 + +RUN rm -Rf ./node_modules + +FROM node:18-bullseye as clean +ARG METAMIGO_DIR=/opt/metamigo + +COPY --from=builder ${METAMIGO_DIR} ${METAMIGO_DIR}/ + +RUN rm -Rf ./node_modules + +FROM node:18-bullseye as pristine +LABEL maintainer="Abel Luck " + +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} + +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"] diff --git a/apps/metamigo-api/docker-entrypoint.sh b/apps/metamigo-api/docker-entrypoint.sh new file mode 100644 index 0000000..9dd4d10 --- /dev/null +++ b/apps/metamigo-api/docker-entrypoint.sh @@ -0,0 +1,23 @@ +#!/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 diff --git a/apps/metamigo-frontend/.dockerignore b/apps/metamigo-frontend/.dockerignore new file mode 100644 index 0000000..1d3a882 --- /dev/null +++ b/apps/metamigo-frontend/.dockerignore @@ -0,0 +1,14 @@ +.git +.idea +**/node_modules +!/node_modules +**/build +**/dist +**/tmp +**/.env* +**/coverage +**/.next +**/amigo.*.json +**/.yalc +**/cypress/videos +**/cypress/screenshots diff --git a/apps/metamigo-frontend/Dockerfile b/apps/metamigo-frontend/Dockerfile new file mode 100644 index 0000000..e8b8116 --- /dev/null +++ b/apps/metamigo-frontend/Dockerfile @@ -0,0 +1,61 @@ +FROM node:18-bullseye as builder + +ARG METAMIGO_DIR=/opt/metamigo +RUN mkdir -p ${METAMIGO_DIR}/ +WORKDIR ${METAMIGO_DIR} +COPY package.json tsconfig.json ${METAMIGO_DIR}/ +COPY . ${METAMIGO_DIR}/ + +RUN npx --no-install tsc --build --verbose +RUN npm install +RUN npm run build + +RUN rm -Rf ./node_modules + +FROM node:18-bullseye as clean +ARG METAMIGO_DIR=/opt/metamigo + +COPY --from=builder ${METAMIGO_DIR} ${METAMIGO_DIR}/ + +RUN rm -Rf ./node_modules + +FROM node:18-bullseye as pristine +LABEL maintainer="Abel Luck " + +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} + +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"] diff --git a/apps/metamigo-frontend/docker-entrypoint.sh b/apps/metamigo-frontend/docker-entrypoint.sh new file mode 100644 index 0000000..9dd4d10 --- /dev/null +++ b/apps/metamigo-frontend/docker-entrypoint.sh @@ -0,0 +1,23 @@ +#!/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 diff --git a/apps/metamigo-worker/.dockerignore b/apps/metamigo-worker/.dockerignore new file mode 100644 index 0000000..1d3a882 --- /dev/null +++ b/apps/metamigo-worker/.dockerignore @@ -0,0 +1,14 @@ +.git +.idea +**/node_modules +!/node_modules +**/build +**/dist +**/tmp +**/.env* +**/coverage +**/.next +**/amigo.*.json +**/.yalc +**/cypress/videos +**/cypress/screenshots diff --git a/apps/metamigo-worker/Dockerfile b/apps/metamigo-worker/Dockerfile new file mode 100644 index 0000000..e8b8116 --- /dev/null +++ b/apps/metamigo-worker/Dockerfile @@ -0,0 +1,61 @@ +FROM node:18-bullseye as builder + +ARG METAMIGO_DIR=/opt/metamigo +RUN mkdir -p ${METAMIGO_DIR}/ +WORKDIR ${METAMIGO_DIR} +COPY package.json tsconfig.json ${METAMIGO_DIR}/ +COPY . ${METAMIGO_DIR}/ + +RUN npx --no-install tsc --build --verbose +RUN npm install +RUN npm run build + +RUN rm -Rf ./node_modules + +FROM node:18-bullseye as clean +ARG METAMIGO_DIR=/opt/metamigo + +COPY --from=builder ${METAMIGO_DIR} ${METAMIGO_DIR}/ + +RUN rm -Rf ./node_modules + +FROM node:18-bullseye as pristine +LABEL maintainer="Abel Luck " + +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} + +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"] diff --git a/apps/metamigo-worker/docker-entrypoint.sh b/apps/metamigo-worker/docker-entrypoint.sh new file mode 100644 index 0000000..9dd4d10 --- /dev/null +++ b/apps/metamigo-worker/docker-entrypoint.sh @@ -0,0 +1,23 @@ +#!/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 diff --git a/docker-compose.yml b/docker-compose.yml index 9d46969..7bcb529 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -140,37 +140,37 @@ services: volumes: - zammad-data:/opt/zammad - # metamigo-api: - # build: ./apps/metamigo-api - # container_name: metamigo-api - # restart: ${RESTART} - # command: [ "api" ] - # expose: - # - "3001" - # environment: *common-metamigo-variables - # volumes: - # - ./signald:/signald + metamigo-api: + build: ./apps/metamigo-api + container_name: metamigo-api + restart: ${RESTART} + command: [ "api" ] + expose: + - "3001" + environment: *common-metamigo-variables + volumes: + - ./signald:/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: ./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-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 metamigo-postgresql: container_name: metamigo-postgresql @@ -227,6 +227,16 @@ services: GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID} GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET} + leafcutter: + container_name: leafcutter + build: ./apps/leafcutter + expose: + - "3000" + ports: + - "8004:3000" + environment: + ZAMMAD_PROXY_URL: ${ZAMMAD_PROXY_URL} + volumes: elasticsearch-data: driver: local diff --git a/docker/zammad/Dockerfile b/docker/zammad/Dockerfile index 6fd97a2..ac73edb 100644 --- a/docker/zammad/Dockerfile +++ b/docker/zammad/Dockerfile @@ -1,6 +1,6 @@ -FROM zammad/zammad-docker-compose:5.4.0 AS builder +FROM zammad/zammad-docker-compose:5.4.0-1 AS builder COPY auto_install ${ZAMMAD_TMP_DIR}/auto_install # RUN sed -i "s/# create install ready file/bundle exec rake zammad:package:migrate/g" contrib/docker/docker-entrypoint.sh -FROM zammad/zammad-docker-compose:5.4.0 +FROM zammad/zammad-docker-compose:5.4.0-1 COPY --from=builder ${ZAMMAD_TMP_DIR} ${ZAMMAD_TMP_DIR}