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