79 lines
2.2 KiB
Docker
79 lines
2.2 KiB
Docker
### ALPINE MULTI-STAGE
|
|
# Build stage for libraries
|
|
FROM node:22-alpine AS builder
|
|
|
|
# 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
|
|
COPY package*.json ./
|
|
RUN npm install -g typescript
|
|
RUN npm install
|
|
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# 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
|
|
|
|
CMD ["sh", "-c", "redis-server --daemonize yes && pm2-runtime ecosystem.config.cjs"]
|