@@ -40,7 +40,8 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
4040ENV PATH="/root/.cargo/bin:${PATH}"
4141
4242ARG KREUZBERG_VERSION=v4.9.8
43- RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzberg-dev/kreuzberg.git /tmp/kreuzberg \
43+ # v4 LTS moved to kreuzberg-lts; the old repo redirects to xberg-io/xberg which has no v4 tags
44+ RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzberg-dev/kreuzberg-lts.git /tmp/kreuzberg \
4445 && cd /tmp/kreuzberg/crates/kreuzberg-php \
4546 && for i in 1 2 3 4 5; do \
4647 cargo build --release && break || { \
@@ -50,6 +51,62 @@ RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzbe
5051 done \
5152 && test -f /tmp/kreuzberg/target/release/libkreuzberg_php.so
5253
54+ # -----------------------------------------------------
55+ # Build xberg PHP extension from Rust source
56+ # (successor to kreuzberg, see kreuzberg migration docs)
57+ # -----------------------------------------------------
58+ FROM php:$PHP_VERSION-fpm AS xberg-builder
59+
60+ # Install build dependencies (tesseract is vendored/statically built by xberg)
61+ RUN apt-get update && \
62+ apt-get install -y --no-install-recommends \
63+ cmake \
64+ g++ \
65+ pkg-config \
66+ libssl-dev \
67+ libmagic-dev \
68+ libuv1-dev \
69+ libde265-dev \
70+ libaom-dev \
71+ libx265-dev \
72+ libdav1d-dev \
73+ libnuma-dev \
74+ clang \
75+ curl \
76+ file \
77+ git \
78+ && \
79+ apt-get clean && \
80+ rm -rf /var/lib/apt/lists/*
81+
82+ # xberg's heic feature links system libheif >= 1.21; trixie ships 1.19
83+ ARG LIBHEIF_VERSION=1.23.0
84+ RUN curl -fsSL "https://github.com/strukturag/libheif/releases/download/v${LIBHEIF_VERSION}/libheif-${LIBHEIF_VERSION}.tar.gz" | tar xz -C /tmp \
85+ && cmake -S /tmp/libheif-${LIBHEIF_VERSION} -B /tmp/libheif-build \
86+ -DCMAKE_BUILD_TYPE=Release \
87+ -DCMAKE_INSTALL_PREFIX=/usr/local \
88+ -DCMAKE_INSTALL_LIBDIR=lib \
89+ -DWITH_EXAMPLES=OFF \
90+ -DWITH_GDK_PIXBUF=OFF \
91+ -DBUILD_TESTING=OFF \
92+ && cmake --build /tmp/libheif-build -j"$(nproc)" \
93+ && cmake --install /tmp/libheif-build \
94+ && rm -rf /tmp/libheif-*
95+
96+ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
97+ ENV PATH="/root/.cargo/bin:${PATH}"
98+
99+ ARG XBERG_VERSION=v1.0.0-rc.28
100+ RUN git clone --depth 1 --recurse-submodules --shallow-submodules --branch ${XBERG_VERSION} https://github.com/xberg-io/xberg.git /tmp/xberg \
101+ && cd /tmp/xberg/crates/xberg-php \
102+ && for i in 1 2 3 4 5; do \
103+ cargo build --release && break || { \
104+ echo "cargo build failed (attempt $i), retrying in $((i*30))s..." ; \
105+ sleep $((i*30)); \
106+ }; \
107+ done \
108+ && test -f /tmp/xberg/target/release/libxberg_php.so
109+
53110# -----------------------------------------------------
54111# App Itself
55112# -----------------------------------------------------
@@ -96,6 +153,12 @@ RUN apt-get update && apt-get install -y --no-install-recommends ${BUILD_DEPS} \
96153 jpegoptim \
97154 optipng \
98155 pngquant \
156+ # libheif codec runtimes for ext-xberg
157+ libde265-0 \
158+ libaom3 \
159+ libx265-215 \
160+ libdav1d7 \
161+ libnuma1 \
99162 && rm -rf /var/lib/apt/lists/*
100163
101164
@@ -104,6 +167,14 @@ COPY --from=kreuzberg-builder /tmp/kreuzberg/target/release/libkreuzberg_php.so
104167RUN mv /tmp/kreuzberg.so $(php -r "echo ini_get('extension_dir');" )/kreuzberg.so \
105168 && echo "#extension=kreuzberg" > $PHP_INI_DIR/conf.d/kreuzberg.ini
106169
170+ # Xberg PHP extension (built from Rust source), successor to kreuzberg
171+ COPY --from=xberg-builder /tmp/xberg/target/release/libxberg_php.so /tmp/xberg.so
172+ RUN mv /tmp/xberg.so $(php -r "echo ini_get('extension_dir');" )/xberg.so \
173+ && echo "#extension=xberg" > $PHP_INI_DIR/conf.d/xberg.ini
174+
175+ # libheif >= 1.21 runtime for ext-xberg (apt ships older); resolved via LD_LIBRARY_PATH=/usr/local/lib
176+ COPY --from=xberg-builder /usr/local/lib/libheif.so.1* /usr/local/lib/
177+
107178# Install latest libvips
108179# @see https://github.com/dooman87/imagemagick-docker/blob/main/Dockerfile.bookworm
109180ARG VIPS_VERSION=8.18.2
0 commit comments