Browse Source

php-h2o: Update H2O (#7968)

Anton Kirilov 2 years ago
parent
commit
0741023821
2 changed files with 63 additions and 29 deletions
  1. 1 1
      frameworks/PHP/php/deploy/h2o.conf
  2. 62 28
      frameworks/PHP/php/php-h2o.dockerfile

+ 1 - 1
frameworks/PHP/php/deploy/h2o.conf

@@ -11,7 +11,7 @@ hosts:
   default:
     paths:
       /:
-        file.dir: /
+        file.dir: /var/www
 
 file.custom-handler:                  # handle PHP scripts
   extension: .php

+ 62 - 28
frameworks/PHP/php/php-h2o.dockerfile

@@ -1,39 +1,73 @@
-FROM ubuntu:22.04
+ARG UBUNTU_VERSION=22.04
 
-COPY ./ ./
+ARG H2O_PREFIX=/opt/h2o
 
-ENV tz=America/Los_Angeles
-ENV DEBIAN_FRONTEND noninteractive
+FROM "ubuntu:${UBUNTU_VERSION}" AS compile
 
-RUN apt-get update > /dev/null && \
-    apt-get install -yqq autoconf bison cmake curl file flex g++ git libnuma-dev libpq-dev libssl-dev \
-                     libtool libyajl-dev libz-dev make wget software-properties-common > /dev/null
+ARG H2O_VERSION=9ab3feb4d7429ddda52a3cf84bd6da0e890bd52a
 
-### Install php
-RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null
-RUN apt-get update -yqq > /dev/null && \
-    apt-get install -yqq php8.2 php8.2-common php8.2-cli php8.2-fpm php8.2-mysql  > /dev/null
+ARG DEBIAN_FRONTEND=noninteractive
+ARG H2O_PREFIX
+WORKDIR /tmp/h2o-build
+RUN apt-get -yqq update && \
+    apt-get -yqq install \
+      cmake \
+      curl \
+      g++ \
+      libbrotli-dev \
+      libcap-dev \
+      libssl-dev \
+      libtool \
+      libuv1-dev \
+      libwslay-dev \
+      libz-dev \
+      ninja-build \
+      pkg-config \
+      systemtap-sdt-dev && \
+    curl -LSs "https://github.com/h2o/h2o/archive/${H2O_VERSION}.tar.gz" | \
+      tar --strip-components=1 -xz && \
+    cmake \
+      -B build \
+      -DCMAKE_AR=/usr/bin/gcc-ar \
+      -DCMAKE_C_FLAGS="-flto -march=native -mtune=native" \
+      -DCMAKE_INSTALL_PREFIX="${H2O_PREFIX}" \
+      -DCMAKE_RANLIB=/usr/bin/gcc-ranlib \
+      -G Ninja \
+      -S . && \
+    cmake --build build -j && \
+    cmake --install build
 
-COPY deploy/conf/* /etc/php/8.2/fpm/
+FROM "ubuntu:${UBUNTU_VERSION}"
 
-RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.2/fpm/php-fpm.conf ; fi;
+ARG PHP_VERSION=8.2
 
-### Install h2o
-
-ENV H2O_VERSION=2.2.6
-ENV H2O_ARCHIVE="v${H2O_VERSION}.tar.gz"
-ENV H2O_HOME=/h2o
-
-RUN wget -qO "$H2O_ARCHIVE" "https://github.com/h2o/h2o/archive/$H2O_ARCHIVE" && \
-    tar xf "$H2O_ARCHIVE" && \
-    cd "h2o-$H2O_VERSION" && \
-    cmake -DCMAKE_INSTALL_PREFIX="$H2O_HOME" -DCMAKE_C_FLAGS="-flto -march=native" \
-          -DCMAKE_AR=/usr/bin/gcc-ar -DCMAKE_RANLIB=/usr/bin/gcc-ranlib -DWITH_MRUBY=off . && \
-    make -j "$(nproc)" install  > /dev/null
+ENV TZ=America/Los_Angeles
 
+ARG DEBIAN_FRONTEND=noninteractive
+RUN apt-get -yqq update && \
+    apt-get -yqq install \
+      apt-utils \
+      software-properties-common && \
+    LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php && \
+    apt-get -yqq update && \
+    apt-get -yqq install \
+      "php${PHP_VERSION}" \
+      "php${PHP_VERSION}-cli" \
+      "php${PHP_VERSION}-common" \
+      "php${PHP_VERSION}-fpm" \
+      "php${PHP_VERSION}-mysql"
+ARG H2O_PREFIX
+COPY --from=compile "${H2O_PREFIX}" "${H2O_PREFIX}/"
+COPY deploy/conf "/etc/php/${PHP_VERSION}/fpm/"
+RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" \
+      "/etc/php/${PHP_VERSION}/fpm/php-fpm.conf"; fi;
+COPY deploy/h2o.conf "${H2O_PREFIX}/etc/"
+COPY *.php /var/www/
 EXPOSE 8080
+ARG BENCHMARK_ENV
+ARG TFB_TEST_DATABASE
+ARG TFB_TEST_NAME
 
-CMD export WORKERS=$(( 2 * $(nproc) )) && \
-    sed -i "s/num-threads: x/num-threads: $WORKERS/g" /deploy/h2o.conf && \
+CMD sed -i "s/num-threads: x/num-threads: $((2 * $(nproc)))/g" /opt/h2o/etc/h2o.conf && \
     service php8.2-fpm start && \
-    /h2o/bin/h2o -c /deploy/h2o.conf
+    /opt/h2o/bin/h2o -c /opt/h2o/etc/h2o.conf