From 58597c55f32957693553024ff61ab0119bdf6fa2 Mon Sep 17 00:00:00 2001 From: Olivier Bonvalet Date: Thu, 2 Oct 2025 10:42:53 +0200 Subject: [PATCH 1/2] add first Dockerfile version (build thanks to `podman build -t gocam -f docker/Dockerfile .`) --- docker/Dockerfile | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docker/Dockerfile diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..2f13cb9 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,35 @@ +ARG NODE_IMG=20-bookworm + +FROM node:${NODE_IMG} AS nodejs + +RUN apt-get update && apt-get install -y tini &&\ + find /var/lib/apt/lists/ /var/cache/apt/archives/ -type f -delete + +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node + +WORKDIR /home/node/app +USER node + +COPY --chown=node:node package*.json ./ +RUN npm install + +COPY --chown=node:node . . + +FROM nodejs AS build-frontend +RUN npm run buildJsFrontend +RUN npm run buildCssFrontend + +FROM scratch AS frontend +COPY --from=build-frontend /home/node/app/frontend/static/ / + +FROM nodejs AS backend +RUN npm run buildJsBackend + +ENV HTTP_SERVER_PROTOCOL="http" +ENV HTTP_SERVER_HOST="0.0.0.0" +ENV HTTP_SERVER_PORT="3300" + +EXPOSE 3300 + +ENTRYPOINT [ "tini", "--" ] +CMD [ "node", "./app/backend/app.js" ] From 1c4273a31b904cbe661caa4e04f83e6f144f2cb9 Mon Sep 17 00:00:00 2001 From: Olivier Bonvalet Date: Thu, 2 Oct 2025 10:58:32 +0200 Subject: [PATCH 2/2] =?UTF-8?q?docker:=20r=C3=A9duction=20du=20poids=20de?= =?UTF-8?q?=20l'image,=20et=20activation=20du=20NODE=5FENV=20production?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/Dockerfile | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 2f13cb9..371bdbc 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,35 +1,48 @@ ARG NODE_IMG=20-bookworm -FROM node:${NODE_IMG} AS nodejs +FROM node:${NODE_IMG} AS base -RUN apt-get update && apt-get install -y tini &&\ +RUN apt-get update && apt-get install --no-install-recommends -y tini &&\ find /var/lib/apt/lists/ /var/cache/apt/archives/ -type f -delete -RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node - WORKDIR /home/node/app -USER node +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node +USER node COPY --chown=node:node package*.json ./ -RUN npm install +# == deps +FROM base AS deps +RUN npm ci + +FROM deps AS sources COPY --chown=node:node . . -FROM nodejs AS build-frontend +FROM sources AS build-frontend RUN npm run buildJsFrontend RUN npm run buildCssFrontend FROM scratch AS frontend COPY --from=build-frontend /home/node/app/frontend/static/ / -FROM nodejs AS backend +FROM build-frontend AS build-backend RUN npm run buildJsBackend +FROM base AS backend + +COPY --from=deps /home/node/app/package*.json ./ +COPY --from=deps /home/node/app/node_modules ./node_modules +RUN npm prune --omit=dev + +COPY --from=build-frontend /home/node/app/app/frontend ./app/frontend +COPY --from=build-backend /home/node/app/app/backend ./app/backend + +ENV NODE_ENV=production ENV HTTP_SERVER_PROTOCOL="http" ENV HTTP_SERVER_HOST="0.0.0.0" ENV HTTP_SERVER_PORT="3300" EXPOSE 3300 -ENTRYPOINT [ "tini", "--" ] +ENTRYPOINT [ "tini", "-g", "--" ] CMD [ "node", "./app/backend/app.js" ]