From a2b896916e1052f40429861321e064573ad48a1a Mon Sep 17 00:00:00 2001 From: Maieul BOYER Date: Mon, 4 Aug 2025 14:21:42 +0200 Subject: [PATCH] feat(infra): Added way to run custom commands for different services - new `EXTRA_FILES` docker build args to specify directory to be copied at /extra - run `${SERVICE}/entrypoint.sh` as docker entry point - added src/empty folder to so if EXTRA_FILES isn't set => use empty folder (since no conditional COPY) --- docker-compose.yml | 14 +++++++++----- src/.dockerignore | 3 ++- src/Dockerfile | 18 ++++++++++++++---- src/empty/.gitkeep | 0 src/icons/entrypoint.sh | 10 ++++++++++ src/icons/extra/.gitkeep | 0 6 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 src/empty/.gitkeep create mode 100644 src/icons/entrypoint.sh create mode 100644 src/icons/extra/.gitkeep diff --git a/docker-compose.yml b/docker-compose.yml index 98fcb3b..dd1c958 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,19 +19,20 @@ services: volumes: # if you need to share files with nginx, you do it here. - images-volume:/volumes/icons + # - static-volume:/volumes/static environment: # this can stay the same for developpement. This is an alias to `localhost` - NGINX_DOMAIN=local.maix.me - # an example of an micro service. this one basically only does this: - # - handle uploading of icons - # - write icons to shared volume allowing nginx to serve them (does it better than if we did it in the service) + ############### + # ICONS # + ############### icons: - # build is a bit strange: it has two parts - build: + build: context: ./src/ args: - SERVICE=icons + #- EXTRA_FILES=icons/extra container_name: icons restart: always networks: @@ -42,6 +43,9 @@ services: environment: - USER_ICONS_STORE=/store - DATABASE_DIR=/database + + volumes: images-volume: sqlite-volume: + static-volume: diff --git a/src/.dockerignore b/src/.dockerignore index d74745c..20cec97 100644 --- a/src/.dockerignore +++ b/src/.dockerignore @@ -1,4 +1,5 @@ **/node_modules **/dist -@shared/src/database/init.sql.ts **/Dockerfile +.gitkeep +.dockerignore diff --git a/src/Dockerfile b/src/Dockerfile index 35a734a..bc7d4e0 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,4 +1,7 @@ -FROM guergeiro/pnpm:22-10-alpine as builder +FROM node:22-alpine as pnpm_base +RUN npm install --global pnpm@10.14.0; + +FROM pnpm_base as builder ARG SERVICE @@ -6,6 +9,7 @@ WORKDIR /build COPY @shared/package.json /build/@shared/ COPY ${SERVICE}/package.json /build/service/ COPY tsconfig.base.json pnpm-workspace.yaml package.json /build/ +COPY ${SERVICE}/entrypoint.sh /build/ RUN pnpm install; @@ -19,15 +23,21 @@ RUN cd /build/service && \ cp /build/@shared/package.json /dist/@shared/ && \ cp /build/service/package.json /dist/service/ && \ cp /build/package.json /dist/ && \ - cp /build/pnpm-lock.yaml /dist/; + cp /build/pnpm-lock.yaml /dist/ && \ + cp /build/entrypoint.sh /dist/ && \ + chmod +x /dist/entrypoint.sh; -FROM guergeiro/pnpm:22-10-alpine +FROM pnpm_base WORKDIR /src +ARG EXTRA_FILES=empty COPY --from=builder /dist /src - RUN pnpm install --prod --frozen-lockfile; +COPY ${EXTRA_FILES} /extra +RUN echo "${EXTRA_FILES}"; +ENTRYPOINT [ "/src/entrypoint.sh" ] + CMD ["node", "/src/run.cjs"] diff --git a/src/empty/.gitkeep b/src/empty/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/icons/entrypoint.sh b/src/icons/entrypoint.sh new file mode 100644 index 0000000..4a3dac4 --- /dev/null +++ b/src/icons/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +set -e +set -x +# do anything here + +cp -r /extra /files + +# run the CMD [ ... ] from the dockerfile +exec "$@" diff --git a/src/icons/extra/.gitkeep b/src/icons/extra/.gitkeep new file mode 100644 index 0000000..e69de29