IO-3151 Package Update and Optimizations
This commit is contained in:
141
Dockerfile
141
Dockerfile
@@ -1,86 +1,77 @@
|
||||
FROM node:20
|
||||
### ALPINE MULTI-STAGE
|
||||
# Build stage for libraries
|
||||
FROM node:22-alpine AS builder
|
||||
|
||||
# Create app directory
|
||||
# Install build dependencies
|
||||
RUN apk add --no-cache \
|
||||
bash wget build-base autoconf automake cmake libtool pkgconf \
|
||||
libjpeg-turbo-dev libpng-dev libwebp-dev tiff-dev libde265-dev \
|
||||
ruby ruby-dev
|
||||
|
||||
# Replace source built libde265 and libheif with installed libraries in next release
|
||||
# libheif-dev libde265-dev x265-dev
|
||||
|
||||
# Build libde265
|
||||
WORKDIR /build/libde265
|
||||
RUN wget https://github.com/strukturag/libde265/archive/v1.0.15.tar.gz \
|
||||
&& tar -xvf v1.0.15.tar.gz \
|
||||
&& cd libde265-1.0.15 \
|
||||
&& cmake . \
|
||||
&& make \
|
||||
&& make install
|
||||
|
||||
# Build libheif
|
||||
WORKDIR /build/libheif
|
||||
RUN wget https://github.com/strukturag/libheif/archive/v1.19.7.tar.gz \
|
||||
&& tar -xvf v1.19.7.tar.gz \
|
||||
&& cd libheif-1.19.7 \
|
||||
&& cmake --preset=release . \
|
||||
&& make \
|
||||
&& make install
|
||||
|
||||
# Build ImageMagick
|
||||
WORKDIR /build/imagemagick
|
||||
RUN wget https://download.imagemagick.org/archive/releases/ImageMagick-7.1.1-44.tar.xz \
|
||||
&& tar -xvf ImageMagick-7.1.1-44.tar.xz \
|
||||
&& cd ImageMagick-7.1.1-44 \
|
||||
&& ./configure --with-heic=yes --with-webp=yes \
|
||||
&& make \
|
||||
&& make install
|
||||
|
||||
# Node.js application build stage
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Install app dependencies
|
||||
# A wildcard is used to ensure both package.json AND package-lock.json are copied
|
||||
# where available (npm@5+)
|
||||
COPY package*.json ./
|
||||
|
||||
RUN npm install -g typescript
|
||||
RUN npm install
|
||||
# If you are building your code for production
|
||||
# RUN npm ci --only=production
|
||||
|
||||
# Bundle app source
|
||||
COPY . .
|
||||
|
||||
RUN apt -y update
|
||||
RUN apt install -y wget
|
||||
|
||||
RUN apt install -y lsb-release curl gpg
|
||||
RUN curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
|
||||
RUN chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
|
||||
RUN echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
|
||||
RUN apt update
|
||||
RUN apt install -y redis
|
||||
|
||||
# PNG ,JPG ,Tiff & WebP support
|
||||
# Consider adding more support with testing https://gist.github.com/hurricup/e14ae5bc47705fca6b1680e7a1fb6580
|
||||
RUN apt install -y libjpeg-dev
|
||||
RUN apt install -y libpng-dev
|
||||
RUN apt install -y libtiff-dev
|
||||
RUN apt install -y libwebp-dev
|
||||
|
||||
# Install HEIF support (libheic-dev Package does not exist on 16.04)
|
||||
RUN apt -y install libde265-dev
|
||||
RUN apt -y install pkg-config m4 libtool automake autoconf cmake
|
||||
|
||||
RUN wget https://github.com/strukturag/libde265/archive/v1.0.15.tar.gz
|
||||
RUN tar -xvf v1.0.15.tar.gz
|
||||
WORKDIR /usr/src/app/libde265-1.0.15/
|
||||
RUN cmake .
|
||||
RUN make
|
||||
RUN make install
|
||||
RUN ./autogen.sh
|
||||
RUN ./configure
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
RUN wget https://github.com/strukturag/libheif/archive/v1.18.2.tar.gz
|
||||
RUN tar -xvf v1.18.2.tar.gz
|
||||
WORKDIR /usr/src/app/libheif-1.18.2/
|
||||
RUN cmake --preset=release .
|
||||
RUN make
|
||||
RUN make install
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Install ruby 2.3.0 for ImageMagick
|
||||
RUN apt -y install -y build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev
|
||||
RUN apt -y install -y ruby-full && ruby -v
|
||||
|
||||
# Install ImageMagick
|
||||
# RUN apt-get install imagemagick -y
|
||||
|
||||
# # Install ImageMagick with WEBP and HEIC support
|
||||
RUN wget https://download.imagemagick.org/archive/releases/ImageMagick-7.1.1-37.tar.xz
|
||||
RUN tar -xvf ImageMagick-7.1.1-37.tar.xz
|
||||
WORKDIR /usr/src/app/ImageMagick-7.1.1-37/
|
||||
RUN ./configure --with-heic=yes --with-webp=yes
|
||||
RUN make
|
||||
RUN make install
|
||||
RUN ldconfig /usr/local/lib
|
||||
RUN identify --version
|
||||
|
||||
|
||||
RUN apt update && apt install -y ghostscript graphicsmagick \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
RUN npm run build
|
||||
|
||||
RUN npm install pm2 -g
|
||||
# Final stage
|
||||
FROM node:22-alpine
|
||||
|
||||
# Install runtime dependencies only
|
||||
RUN apk add --no-cache \
|
||||
bash redis ghostscript graphicsmagick imagemagick \
|
||||
libjpeg-turbo libpng libwebp tiff
|
||||
|
||||
# Copy built libraries from builder
|
||||
COPY --from=builder /usr/local/lib/ /usr/local/lib/
|
||||
COPY --from=builder /usr/local/bin/ /usr/local/bin/
|
||||
COPY --from=builder /usr/local/include/ /usr/local/include/
|
||||
|
||||
# Update library cache
|
||||
RUN ldconfig /usr/local/lib
|
||||
|
||||
RUN npm install -g pm2
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Copy built application from builder
|
||||
COPY --from=builder /usr/src/app/dist ./dist
|
||||
COPY --from=builder /usr/src/app/node_modules ./node_modules
|
||||
COPY --from=builder /usr/src/app/.env.production ./.env.production
|
||||
COPY --from=builder /usr/src/app/ecosystem.config.cjs ./ecosystem.config.cjs
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
|
||||
Reference in New Issue
Block a user