static-builder.Dockerfile 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # syntax=docker/dockerfile:1
  2. FROM golang-base
  3. ARG FRANKENPHP_VERSION='dev'
  4. ARG PHP_VERSION='8.2'
  5. ARG PHP_EXTENSIONS='bcmath,calendar,ctype,curl,dba,dom,exif,filter,fileinfo,gd,iconv,intl,mbstring,mbregex,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,pgsql,phar,posix,readline,redis,session,simplexml,sockets,sqlite3,tokenizer,xml,xmlreader,xmlwriter,zip,zlib,apcu'
  6. RUN apk update; \
  7. apk add --no-cache \
  8. autoconf \
  9. automake \
  10. bash \
  11. binutils \
  12. bison \
  13. build-base \
  14. cmake \
  15. curl \
  16. file \
  17. flex \
  18. g++ \
  19. gcc \
  20. git \
  21. jq \
  22. libgcc \
  23. libstdc++ \
  24. linux-headers \
  25. m4 \
  26. make \
  27. php82 \
  28. php82-common \
  29. php82-curl \
  30. php82-dom \
  31. php82-mbstring \
  32. php82-openssl \
  33. php82-pcntl \
  34. php82-phar \
  35. php82-posix \
  36. php82-sodium \
  37. php82-tokenizer \
  38. php82-xml \
  39. php82-xmlwriter \
  40. pkgconfig \
  41. wget \
  42. xz ; \
  43. ln -sf /usr/bin/php82 /usr/bin/php
  44. # https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
  45. ENV COMPOSER_ALLOW_SUPERUSER=1
  46. ENV PATH="${PATH}:/root/.composer/vendor/bin"
  47. COPY --from=composer/composer:2-bin --link /composer /usr/bin/composer
  48. WORKDIR /static-php-cli
  49. RUN git clone --depth=1 https://github.com/crazywhalecc/static-php-cli . && \
  50. composer install --no-cache --no-dev --classmap-authoritative
  51. RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./bin/spc download --with-php=$PHP_VERSION --all
  52. RUN ./bin/spc build --build-embed --enable-zts "$PHP_EXTENSIONS"
  53. ENV PATH="/static-php-cli/buildroot/bin:/static-php-cli/buildroot/usr/bin:$PATH"
  54. WORKDIR /go/src/app
  55. COPY go.mod go.sum ./
  56. RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get
  57. RUN mkdir caddy && cd caddy
  58. COPY caddy/go.mod caddy/go.sum ./caddy/
  59. RUN cd caddy && go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get
  60. COPY *.* ./
  61. COPY caddy caddy
  62. COPY C-Thread-Pool C-Thread-Pool
  63. RUN cd caddy/frankenphp && \
  64. CGO_CFLAGS="$(/static-php-cli/buildroot/bin/php-config --includes | sed s#-I/#-I/static-php-cli/buildroot/#g)" \
  65. CGO_LDFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $(/static-php-cli/buildroot/bin/php-config --ldflags) $(/static-php-cli/buildroot/bin/php-config --libs | sed -e 's/-lgcc_s//g')" \
  66. LIBPHP_VERSION="$(/static-php-cli/buildroot/bin/php-config --version)" \
  67. go build -buildmode=pie -tags "cgo netgo osusergo static_build" -ldflags "-linkmode=external -extldflags -static-pie -s -w -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $LIBPHP_VERSION Caddy'" && \
  68. ./frankenphp version