mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-28 10:22:16 +00:00
refactor: polish dockerfiles (#51546)
This commit is contained in:
committed by
GitHub
parent
1119c21d44
commit
0441090482
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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" ]
|
||||
|
||||
Reference in New Issue
Block a user