# Primary image FROM ruby:3.4.4 USER root # apt caching & install packages RUN rm -f /etc/apt/apt.conf.d/docker-clean; \ echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache RUN \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ apt-get install --no-install-recommends --no-install-suggests -y \ libblas-dev liblapack-dev # preinstall gems that take a long time to install RUN MAKE="make -j12" gem install bundler -v '2.6.7' RUN MAKE="make -j12" gem install rice -v '4.3.3' RUN MAKE="make -j12" gem install faiss -v '0.3.2' RUN MAKE="make -j12" gem install rails_live_reload -v '0.3.6' RUN bundle config --global frozen 1 # set up nodejs 18.x deb repo RUN mkdir -p /etc/apt/keyrings && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" \ | tee /etc/apt/sources.list.d/nodesource.list RUN \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ apt-get install --no-install-recommends --no-install-suggests -y \ ca-certificates \ curl \ gnupg \ nodejs \ libpq-dev \ ffmpeg \ ffmpegthumbnailer \ abiword \ pdftohtml \ libreoffice # Install vips dependencies RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ apt-get install --no-install-recommends --no-install-suggests -qqy \ automake \ gtk-doc-tools \ gobject-introspection \ libgirepository1.0-dev \ libglib2.0-dev \ libexpat1-dev \ libjpeg-dev \ libpng-dev \ libtiff5-dev \ libwebp-dev \ libheif-dev \ libexif-dev \ liblcms2-dev \ libxml2-dev \ libfftw3-dev \ liborc-0.4-dev \ libcgif-dev \ libjxl-dev \ libopenjp2-7-dev \ meson \ ninja-build # Install imagemagick from source RUN cd /tmp && \ wget -qO- https://imagemagick.org/archive/releases/ImageMagick-7.1.2-1.tar.xz | tar -xJ && \ cd ImageMagick-7.1.2-1 && \ ./configure && \ make -j$(nproc) && \ make install && \ ldconfig && \ cd / && \ rm -rf /tmp/ImageMagick-7.1.2-1* # Install vips from source RUN cd /tmp && \ wget -qO- https://github.com/libvips/libvips/releases/download/v8.17.1/vips-8.17.1.tar.xz | tar -xJ && \ cd vips-8.17.1 && \ meson setup build --prefix=/usr/local -Dcgif=enabled && \ cd build && \ ninja && \ ninja install && \ ldconfig && \ cd / && \ rm -rf /tmp/vips-8.17.1* WORKDIR /usr/src/app COPY Gemfile Gemfile.lock ./ COPY gems/has_aux_table ./gems/has_aux_table RUN ls -lah gems && BUNDLE_FROZEN=true MAKE="make -j$(nproc)" bundle install --jobs $(nproc) # install js dependencies COPY package.json yarn.lock ./ RUN npm install -g yarn RUN rails yarn:install RUN yarn COPY . . # precompile assets RUN RAILS_ENV=production bin/rails assets:precompile RUN mkdir -p tmp/pids # build user scripts RUN yarn build:user-scripts # create user with id=1000 gid=1000 RUN groupadd -g 1000 app && \ useradd -m -d /home/app -s /bin/bash -u 1000 -g 1000 app RUN chown -R app:app /usr/src/app USER app CMD /bin/bash