Files
redux-scraper/Dockerfile
2025-08-16 04:44:04 +00:00

122 lines
3.4 KiB
Docker

# 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