Browse Source

[php] Symfony add RoadRunner (#9024)

* Add Symfony with Roadrunner

* Clean symfony docker files

* Fix rr using v2023.3

* Clean dockerfiles again

* Change Caddyfile

* Use composer/composer bin image
Only use 2.99Mb vs the composer than use 199Mb
Joan Miquel 1 year ago
parent
commit
a32ba57945

+ 25 - 0
frameworks/PHP/symfony/.rr.yaml

@@ -0,0 +1,25 @@
+version: "3"
+#https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml
+
+server:
+  command: "php /symfony/public/runtime.php"
+  env:
+    - APP_RUNTIME: Runtime\RoadRunnerSymfonyNyholm\Runtime
+
+http:
+  address: "0.0.0.0:8080"
+
+  middleware: ["headers"]
+  headers:
+    response:
+      Server: "RoadRunner"
+  #pool:
+    #num_workers: 0
+    #max_jobs: 500
+  
+logs:
+  mode: production
+  level: error
+#rpc:
+#  listen: tcp://127.0.0.1:6001
+

+ 24 - 0
frameworks/PHP/symfony/benchmark_config.json

@@ -116,6 +116,30 @@
       "versus": "php",
       "tags": []
     },
+    "roadrunner": {
+      "plaintext_url": "/plaintext",
+      "json_url": "/json",
+      "db_url": "/db",
+      "update_url": "/updates?queries=",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "Postgres",
+      "framework": "symfony",
+      "language": "PHP",
+      "flavor": "PHP8",
+      "orm": "Full",
+      "platform": "roadrunner",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "symfony-roadrunner",
+      "notes": "",
+      "versus": "php",
+      "tags": []
+    },
     "franken": {
       "plaintext_url": "/plaintext",
       "json_url": "/json",

+ 2 - 2
frameworks/PHP/symfony/deploy/Caddyfile

@@ -3,7 +3,7 @@
     {$CADDY_DEBUG}
 
 	frankenphp {
-		#worker /path/to/your/worker.php
+		#worker /path/to/your/runtime.php
 		{$FRANKENPHP_CONFIG}
 	}
 }
@@ -15,7 +15,7 @@ route {
 
     # If the requested file does not exist, try index files
     @indexFiles file {
-        try_files {path} {path}/worker.php worker.php
+        try_files {path} {path}/runtime.php runtime.php
         split_path .php
     }
     rewrite @indexFiles {http.matchers.file.relative}

+ 1 - 1
frameworks/PHP/symfony/deploy/conf/php.ini

@@ -1767,7 +1767,7 @@ ldap.max_links = -1
 opcache.enable=1
 
 ; Determines if Zend OPCache is enabled for the CLI version of PHP
-;opcache.enable_cli=0
+opcache.enable_cli=1
 
 ; The OPcache shared memory storage size.
 opcache.memory_consumption=256

+ 1 - 1
frameworks/PHP/symfony/public/worker.php → frameworks/PHP/symfony/public/runtime.php

@@ -4,6 +4,6 @@ use App\Kernel;
 
 require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
 
-return function (array $context) {
+return function (array $context): Kernel {
     return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
 };

+ 13 - 18
frameworks/PHP/symfony/symfony-franken.dockerfile

@@ -2,30 +2,25 @@ FROM dunglas/frankenphp
 
 # add additional extensions here:
 RUN install-php-extensions \
-    pdo_pgsql \
     intl \
-    opcache
-
-RUN apt-get update -yqq > /dev/null && apt-get upgrade -yqq > /dev/null && \
-    apt-get install unzip > /dev/null
-
-COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+    opcache \
+    pdo_pgsql \
+    zip > /dev/null
 
-EXPOSE 8080
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
 
-COPY deploy/Caddyfile /etc/caddy/Caddyfile
+COPY --link deploy/Caddyfile /etc/caddy/Caddyfile
+COPY --link deploy/conf/php.ini /usr/local/etc/php/
 
-ADD . /symfony
 WORKDIR /symfony
+COPY --link . .
 
-RUN mkdir -m 777 -p /symfony/var/cache/{dev,prod} /symfony/var/log
-
-ENV COMPOSER_ALLOW_SUPERUSER=1
-RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --no-scripts
+ENV FRANKENPHP_CONFIG="worker /symfony/public/runtime.php"
+ENV APP_RUNTIME="Runtime\FrankenPhpSymfony\Runtime"
+#ENV CADDY_DEBUG=debug
+RUN composer require runtime/frankenphp-symfony --update-no-dev --no-scripts --quiet
 RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
 
-RUN composer require runtime/frankenphp-symfony
-ENV FRANKENPHP_CONFIG="worker ./public/worker.php"
-ENV APP_RUNTIME=Runtime\\FrankenPhpSymfony\\Runtime
+EXPOSE 8080
 
-#ENV CADDY_DEBUG=debug
+RUN frankenphp -v

+ 4 - 10
frameworks/PHP/symfony/symfony-mysql.dockerfile

@@ -1,4 +1,3 @@
-FROM composer/composer:2-bin AS composer
 FROM ubuntu:22.04
 
 ARG DEBIAN_FRONTEND=noninteractive
@@ -11,24 +10,19 @@ RUN apt-get install -yqq nginx git unzip curl \
     php8.3-cli php8.3-fpm php8.3-mysql  \
     php8.3-mbstring php8.3-xml php8.3-curl php8.3-dev > /dev/null
 
-COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
 
-COPY deploy/conf/* /etc/php/8.3/fpm/
-
-ADD . /symfony
+COPY --link deploy/conf/* /etc/php/8.3/fpm/
 WORKDIR /symfony
+COPY --link . .
 
 RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.3/fpm/php-fpm.conf ; fi;
 
-RUN mkdir -m 777 -p /symfony/var/cache/{dev,prod} /symfony/var/log
-
-ENV COMPOSER_ALLOW_SUPERUSER=1
-RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --no-scripts
+RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --no-scripts --quiet
 RUN cp deploy/mysql/.env . && composer dump-env prod && bin/console cache:clear
 
 RUN echo "opcache.preload=/symfony/var/cache/prod/App_KernelProdContainer.preload.php" >> /etc/php/8.3/fpm/php.ini
 
-
 EXPOSE 8080
 
 # Uncomment next line for Laravel console error logging to be viewable in docker logs

+ 4 - 8
frameworks/PHP/symfony/symfony-raw.dockerfile

@@ -10,19 +10,15 @@ RUN apt-get install -yqq nginx git unzip curl \
     php8.3-cli php8.3-fpm php8.3-pgsql  \
     php8.3-mbstring php8.3-xml php8.3-curl > /dev/null
 
-COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
 
-COPY deploy/conf/* /etc/php/8.3/fpm/
-
-ADD . /symfony
+COPY --link deploy/conf/* /etc/php/8.3/fpm/
 WORKDIR /symfony
+COPY --link . .
 
 RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.3/fpm/php-fpm.conf ; fi;
 
-RUN mkdir -m 777 -p /symfony/var/cache/{dev,prod} /symfony/var/log
-
-ENV COMPOSER_ALLOW_SUPERUSER=1
-RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --no-scripts
+RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --no-scripts --quiet
 RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
 
 RUN echo "opcache.preload=/symfony/var/cache/prod/App_KernelProdContainer.preload.php" >> /etc/php/8.3/fpm/php.ini

+ 25 - 0
frameworks/PHP/symfony/symfony-roadrunner.dockerfile

@@ -0,0 +1,25 @@
+FROM php:8.3-cli
+
+COPY --from=ghcr.io/roadrunner-server/roadrunner:2023.3 --link /usr/bin/rr /usr/local/bin/rr
+COPY --from=mlocati/php-extension-installer --link /usr/bin/install-php-extensions /usr/local/bin/
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
+
+RUN install-php-extensions \
+    intl \
+    opcache \
+    pdo_pgsql \
+    sockets \
+    zip > /dev/null
+
+COPY --link deploy/conf/php.ini /usr/local/etc/php/
+WORKDIR /symfony
+COPY --link . .
+
+ENV APP_RUNTIME="Runtime\RoadRunnerSymfonyNyholm\Runtime"
+RUN composer require runtime/roadrunner-symfony-nyholm --update-no-dev --no-scripts --quiet
+RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
+
+EXPOSE 8080
+
+RUN rr -v
+ENTRYPOINT ["rr", "serve"]

+ 7 - 15
frameworks/PHP/symfony/symfony-swoole.dockerfile

@@ -10,25 +10,17 @@ RUN apt-get update -yqq && \
     apt-get install -yqq libpq-dev libicu-dev git unzip > /dev/null && \ 
     docker-php-ext-install pdo_pgsql opcache intl > /dev/null
 
-COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
 
-COPY deploy/swoole/php.ini /usr/local/etc/php/
-
-ADD . /symfony
+COPY --link deploy/swoole/php.ini /usr/local/etc/php/
 WORKDIR /symfony
-RUN mkdir -m 777 -p /symfony/var/cache/{dev,prod} /symfony/var/log
-#RUN mkdir -m 777 -p /symfony/var/cache/swoole /symfony/var/log
-RUN COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --no-scripts --quiet
-RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
-
-ENV APP_RUNTIME=Runtime\\Swoole\\Runtime
-RUN composer require runtime/swoole
-
-RUN COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload --no-dev --classmap-authoritative
-RUN COMPOSER_ALLOW_SUPERUSER=1 composer dump-env prod
+COPY --link . .
 
 #ENV APP_DEBUG=1
+ENV APP_RUNTIME="Runtime\Swoole\Runtime"
+RUN composer require runtime/swoole --update-no-dev --no-scripts --quiet
+RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
 
 EXPOSE 8080
 
-CMD php /symfony/public/swoole.php
+ENTRYPOINT [ "php", "/symfony/public/swoole.php" ]

+ 10 - 13
frameworks/PHP/symfony/symfony-workerman.dockerfile

@@ -6,25 +6,22 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /de
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php > /dev/null && \
     apt-get update -yqq > /dev/null && apt-get upgrade -yqq > /dev/null
 
-RUN apt-get install -yqq git unzip \
+RUN apt-get install -yqq unzip \
     php8.3-cli php8.3-pgsql php8.3-mbstring php8.3-xml php8.3-curl > /dev/null
 
-COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
 
-RUN apt-get install -y php-pear php8.3-dev libevent-dev > /dev/null
-RUN pecl install event-3.1.3 > /dev/null && echo "extension=event.so" > /etc/php/8.3/cli/conf.d/event.ini
+RUN apt-get install -y php-pear php8.3-dev libevent-dev > /dev/null && \
+    pecl install event-3.1.3 > /dev/null && echo "extension=event.so" > /etc/php/8.3/cli/conf.d/event.ini
 
-EXPOSE 8080
-
-ADD . /symfony
 WORKDIR /symfony
+COPY --link . .
 
-RUN mkdir -m 777 -p /symfony/var/cache/{dev,prod} /symfony/var/log
-
-ENV COMPOSER_ALLOW_SUPERUSER=1
-RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --no-scripts
+RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --no-scripts --quiet
 RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
 
-COPY deploy/conf/cli-php.ini /etc/php/8.3/cli/php.ini
+COPY --link deploy/conf/cli-php.ini /etc/php/8.3/cli/php.ini
+
+EXPOSE 8080
 
-CMD php server.php start
+ENTRYPOINT [ "php", "server.php", "start" ]

+ 4 - 7
frameworks/PHP/symfony/symfony.dockerfile

@@ -10,19 +10,16 @@ RUN apt-get install -yqq nginx git unzip curl \
     php8.3-cli php8.3-fpm php8.3-pgsql  \
     php8.3-mbstring php8.3-xml php8.3-curl php8.3-dev > /dev/null
 
-COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer
 
-COPY deploy/conf/* /etc/php/8.3/fpm/
+COPY --link deploy/conf/* /etc/php/8.3/fpm/
 
-ADD . /symfony
 WORKDIR /symfony
+COPY --link . .
 
 RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.3/fpm/php-fpm.conf ; fi;
 
-RUN mkdir -m 777 -p /symfony/var/cache/{dev,prod} /symfony/var/log
-
-ENV COMPOSER_ALLOW_SUPERUSER=1
-RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --no-scripts
+RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --no-scripts --quiet
 RUN cp deploy/postgresql/.env . && composer dump-env prod && bin/console cache:clear
 
 RUN echo "opcache.preload=/symfony/var/cache/prod/App_KernelProdContainer.preload.php" >> /etc/php/8.3/fpm/php.ini