114 lines
3.2 KiB
Docker
114 lines
3.2 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 vips from source
|
|
RUN cd /tmp && \
|
|
wget https://github.com/libvips/libvips/releases/download/v8.17.1/vips-8.17.1.tar.xz && \
|
|
tar -xJf vips-8.17.1.tar.xz && \
|
|
ls -la && \
|
|
cd vips-8.17.1 && \
|
|
ls -la && \
|
|
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
|