Files
threetwo-core-service/Dockerfile
2025-02-25 15:36:44 -05:00

93 lines
2.1 KiB
Docker

# Stage 1: Build Stage (Builder)
FROM node:21-alpine3.18 AS builder
# Set environment variables for build
ENV NPM_CONFIG_LOGLEVEL=warn
ENV NODE_ENV=production
# Set the working directory
WORKDIR /core-services
# Install build dependencies using apk
RUN apk update && apk add --no-cache \
bash \
wget \
imagemagick \
python3 \
xvfb \
build-base \
g++ \
python3-dev \
p7zip \
curl \
git \
glib \
cairo-dev \
pango-dev \
icu-dev \
pkgconfig
# Install libvips from source
RUN wget https://github.com/libvips/libvips/releases/download/v8.13.0/vips-8.13.0.tar.gz \
&& tar -zxvf vips-8.13.0.tar.gz \
&& cd vips-8.13.0 \
&& ./configure --disable-python \
&& make -j$(nproc) \
&& make install \
&& cd .. \
&& rm -rf vips-8.13.0.tar.gz vips-8.13.0
# Install unrar directly from RARLAB
RUN wget https://www.rarlab.com/rar/rarlinux-x64-621.tar.gz \
&& tar -zxvf rarlinux-x64-621.tar.gz \
&& cp rar/unrar /usr/bin/ \
&& rm -rf rarlinux-x64-621.tar.gz rar
# Copy application configuration files to build environment
COPY package.json package-lock.json ./
COPY moleculer.config.ts ./
COPY tsconfig.json ./
# Install application dependencies
RUN npm install
# Install sharp with platform-specific binaries
RUN npm install sharp --build-from-source
# Install global dependencies
RUN npm install -g typescript ts-node
# Stage 2: Final Stage (Run Environment)
FROM node:21-alpine3.18 AS runtime
# 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
# Command to run the application
CMD ["npm", "start"]