diff --git a/8.5/Dockerfile b/8.5/Dockerfile index df8c8e3..04ae98f 100644 --- a/8.5/Dockerfile +++ b/8.5/Dockerfile @@ -15,19 +15,25 @@ RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH xcaddy build \ --with github.com/ggicci/caddy-jwt@28e0de3db362a787564352ec22e97aa743a371f3 #1.2.0 # ----------------------------------------------------- -# Build kreuzberg PHP extension from Rust source +# Build xberg PHP extension from Rust source +# (successor to kreuzberg) # ----------------------------------------------------- -FROM php:$PHP_VERSION-fpm AS kreuzberg-builder +FROM php:$PHP_VERSION-fpm AS xberg-builder -# Install build dependencies +# 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 \ - libleptonica-dev \ - libtesseract-dev \ + libmagic-dev \ + libuv1-dev \ + libde265-dev \ + libaom-dev \ + libx265-dev \ + libdav1d-dev \ + libnuma-dev \ clang \ curl \ file \ @@ -36,19 +42,33 @@ RUN apt-get update && \ 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 KREUZBERG_VERSION=v4.9.8 -RUN git clone --depth 1 --branch ${KREUZBERG_VERSION} https://github.com/kreuzberg-dev/kreuzberg.git /tmp/kreuzberg \ - && cd /tmp/kreuzberg/crates/kreuzberg-php \ +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/kreuzberg/target/release/libkreuzberg_php.so + && test -f /tmp/xberg/target/release/libxberg_php.so # ----------------------------------------------------- # App Itself @@ -96,13 +116,22 @@ 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/* -# Kreuzberg PHP extension (built from Rust source) -COPY --from=kreuzberg-builder /tmp/kreuzberg/target/release/libkreuzberg_php.so /tmp/kreuzberg.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