From 04410904820c17a1ba8eb3a0547e509706eac0a1 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Thu, 14 Sep 2023 08:17:28 +0200 Subject: [PATCH] refactor: polish dockerfiles (#51546) --- {docker/web => client/serve}/pm2-start.sh | 0 {docker/web => client/serve}/serve.json | 0 {docker/web => client/serve}/serve.sh | 0 docker/api/Dockerfile | 13 ++++++++----- docker/new-api/Dockerfile | 11 +++++++---- docker/web/Dockerfile | 10 ++++++---- 6 files changed, 21 insertions(+), 13 deletions(-) rename {docker/web => client/serve}/pm2-start.sh (100%) rename {docker/web => client/serve}/serve.json (100%) rename {docker/web => client/serve}/serve.sh (100%) diff --git a/docker/web/pm2-start.sh b/client/serve/pm2-start.sh similarity index 100% rename from docker/web/pm2-start.sh rename to client/serve/pm2-start.sh diff --git a/docker/web/serve.json b/client/serve/serve.json similarity index 100% rename from docker/web/serve.json rename to client/serve/serve.json diff --git a/docker/web/serve.sh b/client/serve/serve.sh similarity index 100% rename from docker/web/serve.sh rename to client/serve/serve.sh diff --git a/docker/api/Dockerfile b/docker/api/Dockerfile index d9dd8ef599a..fb46fbfa64d 100644 --- a/docker/api/Dockerfile +++ b/docker/api/Dockerfile @@ -1,17 +1,20 @@ # bookworm was only released on 10-6-2023, so is a little too new. FROM node:18-bullseye AS builder -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" # global installs need root permissions, so have to happen before we switch to # the node user RUN npm i -g pnpm@8 # node images create a non-root user that we can use USER node WORKDIR /home/node/build -COPY --chown=node:node . . -# TODO: figure out why the cache is getting invalidated. Is it in part because -# we're not ignoring THIS file? Or do we need corepack? +COPY --chown=node:node *.* . +COPY --chown=node:node api-server/ api-server/ +COPY --chown=node:node shared/ shared/ +COPY --chown=node:node tools/ tools/ +COPY --chown=node:node curriculum/ curriculum/ +# TODO: AFAIK it's just the intro translations. Those should be folded into the +# curriculum and then we can remove this. +COPY --chown=node:node client/ client/ # We have to prevent pnpm from deduping peer dependencies because otherwise it # will install all of the packages, not just api-server. Also, pnpm deploy is diff --git a/docker/new-api/Dockerfile b/docker/new-api/Dockerfile index b6c8950c7e7..4e208fb4645 100644 --- a/docker/new-api/Dockerfile +++ b/docker/new-api/Dockerfile @@ -7,9 +7,7 @@ RUN npm i -g pnpm@8 USER node WORKDIR /home/node/build -COPY --chown=node:node package.json . -COPY --chown=node:node pnpm*.yaml . -COPY --chown=node:node tsconfig*.json . +COPY --chown=node:node *.* . COPY --chown=node:node api/ api/ COPY --chown=node:node shared/ shared/ COPY --chown=node:node tools/ tools/ @@ -39,7 +37,12 @@ COPY --chown=node:node pnpm*.yaml . COPY --chown=node:node api/ api/ COPY --chown=node:node shared/ shared/ RUN npm i -g pnpm@8 -RUN pnpm install --prod --ignore-scripts -F=shared -F=api + +# Weirdly this config does not seem necessary for the new api (the same number +# of deps are installed in both cases), but I'm including it just for +# consistency. +RUN pnpm config set dedupe-peer-dependents false +RUN pnpm install --prod --ignore-scripts -F=shared -F=api --frozen-lockfile # While we want to ignore scripts generally, we do need to generate the prisma # client. Note: npx is the simplest way to generate the client without us having # to have prisma as a prod dependency. diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile index b2a267ea856..16a29b67c86 100644 --- a/docker/web/Dockerfile +++ b/docker/web/Dockerfile @@ -7,7 +7,11 @@ RUN npm i -g pnpm@8 USER node WORKDIR /home/node/build -COPY --chown=node:node . . +COPY --chown=node:node *.* . +COPY --chown=node:node client/ client/ +COPY --chown=node:node shared/ shared/ +COPY --chown=node:node tools/ tools/ +COPY --chown=node:node curriculum/ curriculum/ ARG HOME_LOCATION ARG API_LOCATION @@ -43,9 +47,7 @@ RUN npm i -g serve@13 pm2@4 USER node WORKDIR /home/node/client COPY --from=builder /home/node/build/client/public/ public -COPY --from=builder /home/node/build/docker/web/serve.sh serve.sh -COPY --from=builder /home/node/build/docker/web/pm2-start.sh pm2-start.sh -COPY --from=builder /home/node/build/docker/web/serve.json serve.json +COPY --from=builder /home/node/build/client/serve/ ./ ENTRYPOINT [ "./pm2-start.sh" ] CMD [ "8000" ]