mirror of
https://git.cloudron.io/cloudron/mastodon-app.git
synced 2024-11-28 19:21:12 +00:00
simplify Dockerfile
This commit is contained in:
parent
0b578dd5f1
commit
89fd0089a7
1 changed files with 53 additions and 163 deletions
216
Dockerfile
216
Dockerfile
|
@ -1,99 +1,56 @@
|
||||||
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4 as build
|
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4 as base
|
||||||
|
|
||||||
RUN mkdir -p /app/code /app/pkg
|
FROM base AS build
|
||||||
WORKDIR /app/code
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
# common deps to build libvips and ffmpeg
|
||||||
apt install -y imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \
|
RUN apt update && \
|
||||||
g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \
|
apt-get install -y --no-install-recommends autoconf automake libgdbm-dev libglib2.0-dev libgmp-dev libicu-dev libidn-dev libpq-dev libssl-dev libtool \
|
||||||
bison build-essential libssl-dev libyaml-dev libreadline6-dev \
|
meson nasm pkg-config shared-mime-info xz-utils libcgif-dev libexif-dev libexpat1-dev libgirepository1.0-dev libheif-dev libimagequant-dev libjpeg-turbo8-dev \
|
||||||
zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
|
liblcms2-dev liborc-dev libpng-dev libtiff-dev libwebp-dev libdav1d-dev liblzma-dev libmp3lame-dev libopus-dev libsnappy-dev libvorbis-dev libvpx-dev libx264-dev libx265-dev
|
||||||
nginx redis-server redis-tools postgresql postgresql-contrib \
|
|
||||||
libidn11-dev libicu-dev libjemalloc-dev libjemalloc2 patchelf
|
|
||||||
|
|
||||||
# Install build tools and bundler dependencies from APT
|
###### libvips compilation
|
||||||
RUN apt-get install -y --no-install-recommends \
|
FROM build AS libvips
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
libgdbm-dev \
|
|
||||||
libglib2.0-dev \
|
|
||||||
libgmp-dev \
|
|
||||||
libicu-dev \
|
|
||||||
libidn-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libtool \
|
|
||||||
meson \
|
|
||||||
nasm \
|
|
||||||
pkg-config \
|
|
||||||
shared-mime-info \
|
|
||||||
xz-utils \
|
|
||||||
# libvips components
|
|
||||||
libcgif-dev \
|
|
||||||
libexif-dev \
|
|
||||||
libexpat1-dev \
|
|
||||||
libgirepository1.0-dev \
|
|
||||||
libheif-dev \
|
|
||||||
libimagequant-dev \
|
|
||||||
libjpeg-turbo8-dev \
|
|
||||||
liblcms2-dev \
|
|
||||||
liborc-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libtiff-dev \
|
|
||||||
libwebp-dev \
|
|
||||||
# ffmpeg components
|
|
||||||
libdav1d-dev \
|
|
||||||
liblzma-dev \
|
|
||||||
libmp3lame-dev \
|
|
||||||
libopus-dev \
|
|
||||||
libsnappy-dev \
|
|
||||||
libvorbis-dev \
|
|
||||||
libvpx-dev \
|
|
||||||
libx264-dev \
|
|
||||||
libx265-dev
|
|
||||||
|
|
||||||
# Apt update install non-dev versions of necessary components
|
ARG VIPS_VERSION=8.15.3
|
||||||
RUN apt-get install -y --no-install-recommends \
|
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download
|
||||||
libexpat1 \
|
|
||||||
libglib2.0-0 \
|
|
||||||
libicu70 \
|
|
||||||
libidn12 \
|
|
||||||
libpq5 \
|
|
||||||
libreadline8 \
|
|
||||||
libssl3 \
|
|
||||||
libyaml-0-2 \
|
|
||||||
# libvips components
|
|
||||||
libcgif0 \
|
|
||||||
libexif12 \
|
|
||||||
libheif1 \
|
|
||||||
libimagequant0 \
|
|
||||||
libjpeg62 \
|
|
||||||
libjpeg-turbo8 \
|
|
||||||
liblcms2-2 \
|
|
||||||
liborc-0.4-0 \
|
|
||||||
libpng16-16 \
|
|
||||||
libtiff5 \
|
|
||||||
libwebp7 \
|
|
||||||
libwebpdemux2 \
|
|
||||||
libwebpmux3 \
|
|
||||||
# ffmpeg components
|
|
||||||
libdav1d5 \
|
|
||||||
libmp3lame0 \
|
|
||||||
libopencore-amrnb0 \
|
|
||||||
libopencore-amrwb0 \
|
|
||||||
libopus0 \
|
|
||||||
libsnappy1v5 \
|
|
||||||
libtheora0 \
|
|
||||||
libvorbis0a \
|
|
||||||
libvorbisenc2 \
|
|
||||||
libvorbisfile3 \
|
|
||||||
libvpx7 \
|
|
||||||
libx264-163 \
|
|
||||||
libx265-199
|
|
||||||
|
|
||||||
RUN rm -rf /var/cache/apt /var/lib/apt/lists
|
RUN mkdir -p /usr/local/libvips/src
|
||||||
|
RUN curl -L ${VIPS_URL}/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz | tar xJ --strip-components 1 -C /usr/local/libvips/src/
|
||||||
|
|
||||||
# install rbenv since we need ruby 3.3.5
|
WORKDIR /usr/local/libvips/src
|
||||||
|
|
||||||
|
RUN meson setup build --prefix /usr/local/libvips --libdir=lib -Ddeprecated=false -Dintrospection=disabled -Dmodules=disabled -Dexamples=false
|
||||||
|
RUN cd build && ninja && ninja install
|
||||||
|
|
||||||
|
###### ffmpeg compilation
|
||||||
|
FROM build AS ffmpeg
|
||||||
|
|
||||||
|
ARG FFMPEG_VERSION=7.1
|
||||||
|
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/local/ffmpeg/src
|
||||||
|
RUN curl -L ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz | tar xJ --strip-components 1 -C /usr/local/ffmpeg/src/
|
||||||
|
|
||||||
|
WORKDIR /usr/local/ffmpeg/src
|
||||||
|
|
||||||
|
RUN ./configure --prefix=/usr/local/ffmpeg --toolchain=hardened --disable-debug \
|
||||||
|
--disable-devices --disable-doc --disable-ffplay --disable-network --disable-static \
|
||||||
|
--enable-ffmpeg --enable-ffprobe --enable-gpl --enable-libdav1d --enable-libmp3lame \
|
||||||
|
--enable-libopus --enable-libsnappy --enable-libvorbis --enable-libvpx \
|
||||||
|
--enable-libwebp --enable-libx264 --enable-libx265 --enable-shared --enable-version3 && \
|
||||||
|
make -j$(nproc) && \
|
||||||
|
make install
|
||||||
|
|
||||||
|
##### Mastodon
|
||||||
|
FROM base AS mastodon
|
||||||
|
|
||||||
|
RUN apt update && \
|
||||||
|
apt-get install -y --no-install-recommends libexpat1 libglib2.0-0 libicu70 libidn12 libidn-dev libpq5 libreadline8 libssl3 libyaml-0-2 libcgif0 libexif12 libheif1 libimagequant0 libjpeg62 \
|
||||||
|
libjpeg-turbo8 liblcms2-2 liborc-0.4-0 libpng16-16 libtiff5 libwebp7 libwebpdemux2 libwebpmux3 libdav1d5 libmp3lame0 libopencore-amrnb0 libopencore-amrwb0 libopus0 libsnappy1v5 libtheora0 \
|
||||||
|
libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7 libx264-163 libx265-199 && \
|
||||||
|
rm -rf /var/cache/apt /var/lib/apt/lists
|
||||||
|
|
||||||
|
# rbenv since we need specific ruby
|
||||||
RUN mkdir -p /usr/local/rbenv && curl -LSs "https://github.com/rbenv/rbenv/archive/refs/tags/v1.3.0.tar.gz" | tar -xz -C /usr/local/rbenv --strip-components 1 -f -
|
RUN mkdir -p /usr/local/rbenv && curl -LSs "https://github.com/rbenv/rbenv/archive/refs/tags/v1.3.0.tar.gz" | tar -xz -C /usr/local/rbenv --strip-components 1 -f -
|
||||||
ENV PATH /usr/local/rbenv/bin:$PATH
|
ENV PATH /usr/local/rbenv/bin:$PATH
|
||||||
ENV RBENV_ROOT /home/cloudron/rbenv
|
ENV RBENV_ROOT /home/cloudron/rbenv
|
||||||
|
@ -110,66 +67,8 @@ RUN mkdir -p /usr/local/node-${NODE_VERSION} && \
|
||||||
curl -L https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz | tar zxf - --strip-components 1 -C /usr/local/node-${NODE_VERSION}
|
curl -L https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz | tar zxf - --strip-components 1 -C /usr/local/node-${NODE_VERSION}
|
||||||
ENV PATH /usr/local/node-${NODE_VERSION}/bin:$PATH
|
ENV PATH /usr/local/node-${NODE_VERSION}/bin:$PATH
|
||||||
|
|
||||||
# Create temporary libvips specific build layer from build layer
|
RUN mkdir -p /app/code /app/pkg
|
||||||
FROM build AS libvips
|
WORKDIR /app/code
|
||||||
|
|
||||||
# libvips version
|
|
||||||
ARG VIPS_VERSION=8.15.3
|
|
||||||
# libvips download URL
|
|
||||||
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download
|
|
||||||
|
|
||||||
RUN mkdir -p /usr/local/libvips/src
|
|
||||||
# Download and extract libvips source code
|
|
||||||
RUN curl -L ${VIPS_URL}/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz | tar xJ --strip-components 1 -C /usr/local/libvips/src/
|
|
||||||
|
|
||||||
WORKDIR /usr/local/libvips/src
|
|
||||||
|
|
||||||
# Configure and compile libvips
|
|
||||||
RUN meson setup build --prefix /usr/local/libvips --libdir=lib -Ddeprecated=false -Dintrospection=disabled -Dmodules=disabled -Dexamples=false
|
|
||||||
RUN cd build && ninja && ninja install
|
|
||||||
|
|
||||||
# Create temporary ffmpeg specific build layer from build layer
|
|
||||||
FROM build AS ffmpeg
|
|
||||||
|
|
||||||
# ffmpeg version
|
|
||||||
ARG FFMPEG_VERSION=7.1
|
|
||||||
# ffmpeg download URL
|
|
||||||
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
|
||||||
|
|
||||||
RUN mkdir -p /usr/local/ffmpeg/src
|
|
||||||
# Download and extract ffmpeg source code
|
|
||||||
RUN curl -L ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz | tar xJ --strip-components 1 -C /usr/local/ffmpeg/src/
|
|
||||||
|
|
||||||
WORKDIR /usr/local/ffmpeg/src
|
|
||||||
|
|
||||||
# Configure and compile ffmpeg
|
|
||||||
RUN ./configure \
|
|
||||||
--prefix=/usr/local/ffmpeg \
|
|
||||||
--toolchain=hardened \
|
|
||||||
--disable-debug \
|
|
||||||
--disable-devices \
|
|
||||||
--disable-doc \
|
|
||||||
--disable-ffplay \
|
|
||||||
--disable-network \
|
|
||||||
--disable-static \
|
|
||||||
--enable-ffmpeg \
|
|
||||||
--enable-ffprobe \
|
|
||||||
--enable-gpl \
|
|
||||||
--enable-libdav1d \
|
|
||||||
--enable-libmp3lame \
|
|
||||||
--enable-libopus \
|
|
||||||
--enable-libsnappy \
|
|
||||||
--enable-libvorbis \
|
|
||||||
--enable-libvpx \
|
|
||||||
--enable-libwebp \
|
|
||||||
--enable-libx264 \
|
|
||||||
--enable-libx265 \
|
|
||||||
--enable-shared \
|
|
||||||
--enable-version3 && \
|
|
||||||
make -j$(nproc) && \
|
|
||||||
make install
|
|
||||||
|
|
||||||
FROM build
|
|
||||||
|
|
||||||
# renovate: datasource=github-releases depName=tootsuite/mastodon versioning=semver extractVersion=^v(?<version>.+)$
|
# renovate: datasource=github-releases depName=tootsuite/mastodon versioning=semver extractVersion=^v(?<version>.+)$
|
||||||
ARG MASTODON_VERSION=4.3.0
|
ARG MASTODON_VERSION=4.3.0
|
||||||
|
@ -179,24 +78,17 @@ ENV NODE_ENV production
|
||||||
ARG RAILS_SERVE_STATIC_FILES="true"
|
ARG RAILS_SERVE_STATIC_FILES="true"
|
||||||
ARG RUBY_YJIT_ENABLE="1"
|
ARG RUBY_YJIT_ENABLE="1"
|
||||||
|
|
||||||
ENV \
|
ENV MALLOC_CONF "narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0"
|
||||||
# Optimize jemalloc 5.x performance
|
ENV MASTODON_USE_LIBVIPS true
|
||||||
MALLOC_CONF="narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0" \
|
|
||||||
# Enable libvips, should not be changed
|
|
||||||
MASTODON_USE_LIBVIPS=true \
|
|
||||||
# Sidekiq will touch tmp/sidekiq_process_has_started_and_will_begin_processing_jobs to indicate it is ready. This can be used for a readiness check in Kubernetes
|
|
||||||
MASTODON_SIDEKIQ_READY_FILENAME=sidekiq_process_has_started_and_will_begin_processing_jobs
|
|
||||||
|
|
||||||
# Copy libvips components to layer
|
|
||||||
COPY --from=libvips /usr/local/libvips/bin /usr/local/bin
|
COPY --from=libvips /usr/local/libvips/bin /usr/local/bin
|
||||||
COPY --from=libvips /usr/local/libvips/lib /usr/local/lib
|
COPY --from=libvips /usr/local/libvips/lib /usr/local/lib
|
||||||
|
|
||||||
# Copy ffpmeg components to layer
|
|
||||||
COPY --from=ffmpeg /usr/local/ffmpeg/bin /usr/local/bin
|
COPY --from=ffmpeg /usr/local/ffmpeg/bin /usr/local/bin
|
||||||
COPY --from=ffmpeg /usr/local/ffmpeg/lib /usr/local/lib
|
COPY --from=ffmpeg /usr/local/ffmpeg/lib /usr/local/lib
|
||||||
|
|
||||||
|
# Smoketest media processors
|
||||||
RUN ldconfig && \
|
RUN ldconfig && \
|
||||||
# Smoketest media processors
|
|
||||||
vips -v && \
|
vips -v && \
|
||||||
ffmpeg -version && \
|
ffmpeg -version && \
|
||||||
ffprobe -version
|
ffprobe -version
|
||||||
|
@ -215,11 +107,9 @@ RUN corepack enable && \
|
||||||
RUN yarn workspaces focus --production @mastodon/mastodon
|
RUN yarn workspaces focus --production @mastodon/mastodon
|
||||||
RUN yarn install
|
RUN yarn install
|
||||||
|
|
||||||
# Use Ruby on Rails to create Mastodon assets
|
|
||||||
RUN ldconfig && \
|
RUN ldconfig && \
|
||||||
SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile && \
|
SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile && \
|
||||||
# Cleanup temporary files
|
rm -rf /app/code/tmp
|
||||||
rm -rf /app/code/tmp;
|
|
||||||
|
|
||||||
# Precompile bootsnap code for faster Rails startup
|
# Precompile bootsnap code for faster Rails startup
|
||||||
RUN bundle exec bootsnap precompile --gemfile app/ lib/
|
RUN bundle exec bootsnap precompile --gemfile app/ lib/
|
||||||
|
|
Loading…
Reference in a new issue