Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 72 additions & 1 deletion 8.5/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

ARG KREUZBERG_VERSION=v4.9.8
RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzberg-dev/kreuzberg.git /tmp/kreuzberg \
# v4 LTS moved to kreuzberg-lts; the old repo redirects to xberg-io/xberg which has no v4 tags
RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzberg-dev/kreuzberg-lts.git /tmp/kreuzberg \
&& cd /tmp/kreuzberg/crates/kreuzberg-php \
&& for i in 1 2 3 4 5; do \
cargo build --release && break || { \
Expand All @@ -50,6 +51,62 @@ RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzbe
done \
&& test -f /tmp/kreuzberg/target/release/libkreuzberg_php.so

# -----------------------------------------------------
# Build xberg PHP extension from Rust source
# (successor to kreuzberg, see kreuzberg migration docs)
# -----------------------------------------------------
FROM php:$PHP_VERSION-fpm AS xberg-builder

# Install build dependencies (tesseract is vendored/statically built by xberg)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
cmake \
g++ \
pkg-config \
libssl-dev \
libmagic-dev \
libuv1-dev \
libde265-dev \
libaom-dev \
libx265-dev \
libdav1d-dev \
libnuma-dev \
clang \
curl \
file \
git \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

# xberg's heic feature links system libheif >= 1.21; trixie ships 1.19
ARG LIBHEIF_VERSION=1.23.0
RUN curl -fsSL "https://github.com/strukturag/libheif/releases/download/v${LIBHEIF_VERSION}/libheif-${LIBHEIF_VERSION}.tar.gz" | tar xz -C /tmp \
&& cmake -S /tmp/libheif-${LIBHEIF_VERSION} -B /tmp/libheif-build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_INSTALL_LIBDIR=lib \
-DWITH_EXAMPLES=OFF \
-DWITH_GDK_PIXBUF=OFF \
-DBUILD_TESTING=OFF \
&& cmake --build /tmp/libheif-build -j"$(nproc)" \
&& cmake --install /tmp/libheif-build \
&& rm -rf /tmp/libheif-*

RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

ARG XBERG_VERSION=v1.0.0-rc.28
RUN git clone --depth 1 --recurse-submodules --shallow-submodules --branch ${XBERG_VERSION} https://github.com/xberg-io/xberg.git /tmp/xberg \
&& cd /tmp/xberg/crates/xberg-php \
&& for i in 1 2 3 4 5; do \
cargo build --release && break || { \
echo "cargo build failed (attempt $i), retrying in $((i*30))s..."; \
sleep $((i*30)); \
}; \
done \
&& test -f /tmp/xberg/target/release/libxberg_php.so

# -----------------------------------------------------
# App Itself
# -----------------------------------------------------
Expand Down Expand Up @@ -96,6 +153,12 @@ RUN apt-get update && apt-get install -y --no-install-recommends ${BUILD_DEPS} \
jpegoptim \
optipng \
pngquant \
# libheif codec runtimes for ext-xberg
libde265-0 \
libaom3 \
libx265-215 \
libdav1d7 \
libnuma1 \
&& rm -rf /var/lib/apt/lists/*


Expand All @@ -104,6 +167,14 @@ COPY --from=kreuzberg-builder /tmp/kreuzberg/target/release/libkreuzberg_php.so
RUN mv /tmp/kreuzberg.so $(php -r "echo ini_get('extension_dir');")/kreuzberg.so \
&& echo "#extension=kreuzberg" > $PHP_INI_DIR/conf.d/kreuzberg.ini

# Xberg PHP extension (built from Rust source), successor to kreuzberg
COPY --from=xberg-builder /tmp/xberg/target/release/libxberg_php.so /tmp/xberg.so
RUN mv /tmp/xberg.so $(php -r "echo ini_get('extension_dir');")/xberg.so \
&& echo "#extension=xberg" > $PHP_INI_DIR/conf.d/xberg.ini

# libheif >= 1.21 runtime for ext-xberg (apt ships older); resolved via LD_LIBRARY_PATH=/usr/local/lib
COPY --from=xberg-builder /usr/local/lib/libheif.so.1* /usr/local/lib/

# Install latest libvips
# @see https://github.com/dooman87/imagemagick-docker/blob/main/Dockerfile.bookworm
ARG VIPS_VERSION=8.18.2
Expand Down
Loading