metamigo-frontend: build and run in docker

This commit is contained in:
Abel Luck 2023-06-06 07:10:28 +00:00
parent 2f02915446
commit fd7e543d16
8 changed files with 80 additions and 101 deletions

View file

@ -1,4 +1,5 @@
node_modules
out
signald
docker-compose.yml
docker-compose.yml
README.md

View file

@ -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

View file

@ -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

View file

@ -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 <abel@guardianproject.info>"
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 <darren@redaranj.com>"
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"]

View file

@ -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

View file

@ -1,5 +1,5 @@
{
"name": "metamigo-frontend",
"name": "@digiresilience/metamigo-frontend",
"version": "0.2.0",
"private": true,
"dependencies": {

View file

@ -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

11
package-lock.json generated
View file

@ -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",