FROM php:8.2-zts-bookworm AS php-base FROM golang:1.20-bookworm AS golang-base FROM php-base AS builder COPY --from=golang-base /usr/local/go/bin/go /usr/local/bin/go COPY --from=golang-base /usr/local/go /usr/local/go # This is required to link the FrankenPHP binary to the PHP binary RUN apt-get update && \ apt-get -y --no-install-recommends install \ libargon2-dev \ libcurl4-openssl-dev \ libonig-dev \ libreadline-dev \ libsodium-dev \ libsqlite3-dev \ libssl-dev \ libxml2-dev \ zlib1g-dev \ && \ apt-get clean WORKDIR /go/src/app COPY go.mod go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get RUN mkdir caddy && cd caddy COPY caddy/go.mod caddy/go.sum ./caddy/ RUN cd caddy && go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get COPY *.* ./ COPY caddy caddy COPY C-Thread-Pool C-Thread-Pool COPY internal internal COPY testdata testdata # todo: automate this? # see https://github.com/docker-library/php/blob/master/8.2/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_LDFLAGS="-lssl -lcrypto -lreadline -largon2 -lcurl -lonig -lz $PHP_LDFLAGS" CGO_CFLAGS=$PHP_CFLAGS CGO_CPPFLAGS=$PHP_CPPFLAGS RUN cd caddy/frankenphp && \ go build && \ cp frankenphp /usr/local/bin && \ cp /go/src/app/caddy/frankenphp/Caddyfile /etc/Caddyfile ENTRYPOINT ["/bin/bash","-c"] FROM php-base AS final COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ WORKDIR /app RUN mkdir -p /app/public RUN echo ' /app/public/index.php COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp COPY --from=builder /etc/Caddyfile /etc/Caddyfile COPY --from=php-base /usr/local/include/php/ /usr/local/include/php COPY --from=php-base /usr/local/lib/libphp.* /usr/local/lib COPY --from=php-base /usr/local/lib/php/ /usr/local/lib/php COPY --from=php-base /usr/local/php/ /usr/local/php COPY --from=php-base /usr/local/bin/ /usr/local/bin COPY --from=php-base /usr/src /usr/src RUN sed -i 's/php/frankenphp run/g' /usr/local/bin/docker-php-entrypoint CMD [ "--config", "/etc/Caddyfile" ]