php-h2o.dockerfile 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. ARG UBUNTU_VERSION=24.04
  2. ARG H2O_PREFIX=/opt/h2o
  3. FROM "buildpack-deps:${UBUNTU_VERSION}" AS compile
  4. ARG H2O_VERSION=3b9b6a53cac8bcc6a25fb28df81ad295fc5f9402
  5. ARG DEBIAN_FRONTEND=noninteractive
  6. ARG H2O_PREFIX
  7. WORKDIR /tmp/h2o-build
  8. RUN apt-get install \
  9. --no-install-recommends \
  10. -qqUy \
  11. cmake \
  12. curl \
  13. g++ \
  14. libbrotli-dev \
  15. libcap-dev \
  16. libssl-dev \
  17. liburing-dev \
  18. libuv1-dev \
  19. libwslay-dev \
  20. libz-dev \
  21. make \
  22. ninja-build \
  23. pkg-config \
  24. ruby \
  25. systemtap-sdt-dev > /dev/null && \
  26. curl -LSs "https://github.com/h2o/h2o/archive/${H2O_VERSION}.tar.gz" | \
  27. tar --strip-components=1 -xz > /dev/null && \
  28. cmake \
  29. -B build \
  30. -DCMAKE_C_FLAGS="-flto=auto -march=native -mtune=native" \
  31. -DCMAKE_INSTALL_PREFIX="${H2O_PREFIX}" \
  32. -DWITH_MRUBY=on \
  33. -G Ninja \
  34. -S . > /dev/null && \
  35. cmake --build build -j > /dev/null && \
  36. cmake --install build > /dev/null
  37. FROM "ubuntu:${UBUNTU_VERSION}"
  38. ARG PHP_VERSION=8.4
  39. ENV TZ=America/Los_Angeles
  40. ARG DEBIAN_FRONTEND=noninteractive
  41. RUN apt-get install \
  42. --no-install-recommends \
  43. -qqUy \
  44. apt-utils \
  45. software-properties-common > /dev/null && \
  46. LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php && \
  47. apt-get install \
  48. --no-install-recommends \
  49. -qqUy \
  50. liburing2 \
  51. "php${PHP_VERSION}" \
  52. "php${PHP_VERSION}-cli" \
  53. "php${PHP_VERSION}-common" \
  54. "php${PHP_VERSION}-fpm" \
  55. "php${PHP_VERSION}-mysql" > /dev/null
  56. ARG H2O_PREFIX
  57. COPY --from=compile "${H2O_PREFIX}/bin/h2o" "${H2O_PREFIX}/bin/"
  58. COPY --from=compile "${H2O_PREFIX}/share" "${H2O_PREFIX}/share/"
  59. COPY deploy/conf "/etc/php/${PHP_VERSION}/fpm/"
  60. RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" \
  61. "/etc/php/${PHP_VERSION}/fpm/php-fpm.conf"; fi;
  62. COPY deploy/h2o.conf "${H2O_PREFIX}/etc/"
  63. COPY *.php /var/www/
  64. EXPOSE 8080
  65. ARG BENCHMARK_ENV
  66. ARG TFB_TEST_DATABASE
  67. ARG TFB_TEST_NAME
  68. CMD sed -i "s/num-threads: x/num-threads: $((2 * $(nproc)))/g" /opt/h2o/etc/h2o.conf && \
  69. service php8.4-fpm start && \
  70. /opt/h2o/bin/h2o -c /opt/h2o/etc/h2o.conf