From a2eae27c317fe1af209e2b79d34f3bc65589c1ec Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 25 Feb 2025 15:36:44 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Added=20a=20builder=20s?= =?UTF-8?q?tep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4e819c0..f4ba138 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,14 @@ -# Use a non-ARM image (x86_64) for Node.js -FROM --platform=linux/amd64 node:21-alpine3.18 +# Stage 1: Build Stage (Builder) +FROM node:21-alpine3.18 AS builder -# Set metadata for contact -LABEL maintainer="Rishi Ghan " - -# Set environment variables +# Set environment variables for build ENV NPM_CONFIG_LOGLEVEL=warn ENV NODE_ENV=production # Set the working directory WORKDIR /core-services -# Install required dependencies using apk +# Install build dependencies using apk RUN apk update && apk add --no-cache \ bash \ wget \ @@ -46,10 +43,7 @@ RUN wget https://www.rarlab.com/rar/rarlinux-x64-621.tar.gz \ && cp rar/unrar /usr/bin/ \ && rm -rf rarlinux-x64-621.tar.gz rar -# Verify Node.js installation -RUN node -v && npm -v - -# Copy application configuration files +# Copy application configuration files to build environment COPY package.json package-lock.json ./ COPY moleculer.config.ts ./ COPY tsconfig.json ./ @@ -57,18 +51,39 @@ COPY tsconfig.json ./ # Install application dependencies RUN npm install -# Install sharp with proper platform configuration -RUN npm install --force sharp --platform=linux/amd64 +# Install sharp with platform-specific binaries +RUN npm install sharp --build-from-source # Install global dependencies RUN npm install -g typescript ts-node -# Copy the rest of the application files -COPY . . +# Stage 2: Final Stage (Run Environment) +FROM node:21-alpine3.18 AS runtime -# Build and clean up -RUN npm run build \ - && npm prune +# Set environment variables for runtime +ENV NODE_ENV=production +ENV NPM_CONFIG_LOGLEVEL=warn + +# Set the working directory +WORKDIR /core-services + +# Install runtime dependencies using apk (keep only what is needed to run the app) +RUN apk update && apk add --no-cache \ + bash \ + imagemagick \ + python3 \ + xvfb \ + p7zip \ + curl \ + git \ + glib \ + cairo-dev \ + pango-dev \ + icu-dev \ + pkgconfig + +# Copy only necessary files from the builder stage +COPY --from=builder /core-services /core-services # Expose the application's port EXPOSE 3000