From c47d0d26337a2073d17353720700cfec3cd499b4 Mon Sep 17 00:00:00 2001 From: Yadd Date: Tue, 23 Apr 2024 11:41:26 +0400 Subject: [PATCH 1/2] Decrease docker image size from 1.7 GB to 314 MB --- Dockerfile | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2efe25db8..17774d8fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,45 @@ -FROM node:18 +# Base for final image +FROM debian:bookworm-slim as node-minimal -env BASE_URL= \ +RUN apt update && \ + apt -y dist-upgrade && \ + apt -y install nodejs && \ + apt autoremove -y && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* + +# Temporary image to build app +FROM debian:bookworm-slim as builder + +RUN apt update && \ + apt -y dist-upgrade && \ + apt -y install nodejs npm && \ + apt autoremove -y && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /usr/src/app + +# COPIES +# 1. Files +COPY package*.json .njsscan *.js *.json *.mjs LICENSE ./ + +# 2. Directories +COPY .husky ./.husky/ +COPY packages ./packages/ +COPY landing /usr/src/app/landing +#COPY node_modules ./node_modules/ + +# Build and clean + +RUN npm install && npm run build && \ + rm -rf node_modules */*/node_modules && \ + npm install --production --ignore-scripts && \ + npm cache clean --force + +FROM node-minimal as tom-server + +ENV BASE_URL= \ CRON_SERVICE= \ CROWDSEC_URI= \ CROWDSEC_KEY= \ @@ -54,15 +93,11 @@ env BASE_URL= \ RATE_LIMITING_NB_REQUESTS= \ TRUSTED_PROXIES= -RUN apt update && apt -y dist-upgrade +COPY --from=1 /usr/src/app /usr/src/app/ -WORKDIR /usr/src/app +RUN ls -l /usr/src/app -COPY package*.json ./ - -COPY . . - -RUN npm install && npm run build && npm cache clean --force +WORKDIR /usr/src/app EXPOSE 3000 CMD [ "node", "/usr/src/app/server.mjs" ] From 7e342bc46498a8c2482468bb08c137be0309dc97 Mon Sep 17 00:00:00 2001 From: Yadd Date: Tue, 23 Apr 2024 12:00:00 +0400 Subject: [PATCH 2/2] Reduce federation-server Docker image --- Dockerfile | 2 - .../federated-identity-service/Dockerfile | 63 +++++++++++++------ 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/Dockerfile b/Dockerfile index 17774d8fd..5be0adb1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,8 +95,6 @@ ENV BASE_URL= \ COPY --from=1 /usr/src/app /usr/src/app/ -RUN ls -l /usr/src/app - WORKDIR /usr/src/app EXPOSE 3000 diff --git a/packages/federated-identity-service/Dockerfile b/packages/federated-identity-service/Dockerfile index f0f871e02..d0cbf4994 100644 --- a/packages/federated-identity-service/Dockerfile +++ b/packages/federated-identity-service/Dockerfile @@ -1,4 +1,45 @@ -FROM node:18 +# Base for final image +FROM debian:bookworm-slim as node-minimal + +RUN apt update && \ + apt -y dist-upgrade && \ + apt -y install nodejs && \ + apt autoremove -y && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* + +# Temporary image to build app +FROM debian:bookworm-slim as builder + +RUN apt update && \ + apt -y dist-upgrade && \ + apt -y install nodejs npm && \ + apt autoremove -y && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /usr/src/app + +# COPIES +COPY ./packages/federated-identity-service/server.mjs . +COPY ./packages/crypto ./packages/crypto +COPY ./packages/logger ./packages/logger +COPY ./packages/matrix-resolve ./packages/matrix-resolve +COPY ./packages/matrix-identity-server ./packages/matrix-identity-server +COPY ./packages/config-parser ./packages/config-parser +COPY ./packages/federated-identity-service ./packages/federated-identity-service +COPY .husky .husky +COPY lerna.json ./ +COPY tsconfig-build.json ./ +COPY rollup-template.js ./ +COPY package*.json ./ + +RUN npm install && npm run build && \ + rm -rf node_modules */*/node_modules && \ + npm install --production --ignore-scripts && \ + npm cache clean --force + +FROM node-minimal as federation-server ENV BASE_URL= \ CRON_SERVICE= \ @@ -24,25 +65,9 @@ ENV BASE_URL= \ TRUST_X_FORWARDED_FOR= \ TRUSTED_SERVERS_ADDRESSES= -RUN apt update && apt -y dist-upgrade +COPY --from=1 /usr/src/app /usr/src/app/ WORKDIR /usr/src/app -COPY ./packages/federated-identity-service/server.mjs . - -COPY ./packages/crypto ./packages/crypto -COPY ./packages/logger ./packages/logger -COPY ./packages/matrix-resolve ./packages/matrix-resolve -COPY ./packages/matrix-identity-server ./packages/matrix-identity-server -COPY ./packages/config-parser ./packages/config-parser -COPY ./packages/federated-identity-service ./packages/federated-identity-service -COPY .husky .husky -COPY lerna.json ./ -COPY tsconfig-build.json ./ -COPY rollup-template.js ./ -COPY package*.json ./ - -RUN npm install && npm run build && npm cache clean --force - EXPOSE 3000 -CMD [ "node", "/usr/src/app/server.mjs" ] +CMD [ "node", "/usr/src/app/server.mjs" ] \ No newline at end of file