From 4687eb8daa7aec1f57541734ace73d665ae882ab Mon Sep 17 00:00:00 2001 From: Alex Prokopenko Date: Fri, 23 Oct 2020 11:20:27 +0300 Subject: [PATCH] + settings php7.4-fpm container. --- bash/quit-xdebug.sh | 2 +- bash/start-xdebug.sh | 2 +- config/nginx/includes.d/octobercms.conf | 6 +- dockerfiles/php7.1-fpm/Dockerfile | 3 +- dockerfiles/php7.4-fpm/Dockerfile | 127 ++++++++++++++++++++++++++++++++ dockerfiles/php7.4-fpm/xdebug.ini | 25 +++++++ dockerfiles/php7.4-fpm/xdebug.sh | 101 +++++++++++++++++++++++++ 7 files changed, 262 insertions(+), 4 deletions(-) create mode 100644 dockerfiles/php7.4-fpm/Dockerfile create mode 100644 dockerfiles/php7.4-fpm/xdebug.ini create mode 100755 dockerfiles/php7.4-fpm/xdebug.sh diff --git a/bash/quit-xdebug.sh b/bash/quit-xdebug.sh index 8dbb966..d70708e 100755 --- a/bash/quit-xdebug.sh +++ b/bash/quit-xdebug.sh @@ -1,3 +1,3 @@ #!/bin/bash cd $HOME/structure -./dockerfiles/php-fpm/xdebug.sh stop && cd +./dockerfiles/php$1-fpm/xdebug.sh stop && cd diff --git a/bash/start-xdebug.sh b/bash/start-xdebug.sh index ba9aaef..8e66ab4 100755 --- a/bash/start-xdebug.sh +++ b/bash/start-xdebug.sh @@ -1,3 +1,3 @@ #!/bin/bash cd $HOME/structure -./dockerfiles/php-fpm/xdebug.sh start && cd +./dockerfiles/php$1-fpm/xdebug.sh start && cd diff --git a/config/nginx/includes.d/octobercms.conf b/config/nginx/includes.d/octobercms.conf index c32bb79..3b72131 100644 --- a/config/nginx/includes.d/octobercms.conf +++ b/config/nginx/includes.d/octobercms.conf @@ -43,6 +43,10 @@ location ~ ^/plugins/.*/.*/widgets/.*/assets { try_files $uri /404; } location ~ ^/plugins/.*/.*/widgets/.*/resources { try_files $uri /404; } - location ~ ^/themes/.*/assets { try_files $uri /404; } + location ~ ^/themes/.*/assets { + try_files $uri /404; + access_log off; + expires max; + } location ~ ^/themes/.*/semantic { try_files $uri /404; } location ~ ^/themes/.*/resources { try_files $uri /404; } diff --git a/dockerfiles/php7.1-fpm/Dockerfile b/dockerfiles/php7.1-fpm/Dockerfile index 39f6287..a371c68 100644 --- a/dockerfiles/php7.1-fpm/Dockerfile +++ b/dockerfiles/php7.1-fpm/Dockerfile @@ -3,8 +3,9 @@ RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ + libwebp-dev \ && docker-php-ext-install -j$(nproc) iconv \ - && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ + && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install mysqli \ && docker-php-ext-enable mysqli diff --git a/dockerfiles/php7.4-fpm/Dockerfile b/dockerfiles/php7.4-fpm/Dockerfile new file mode 100644 index 0000000..c118595 --- /dev/null +++ b/dockerfiles/php7.4-fpm/Dockerfile @@ -0,0 +1,127 @@ +FROM php:7.4-fpm +RUN apt-get update && apt-get install -y \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libpng-dev \ + libwebp-dev \ + && docker-php-ext-install -j$(nproc) iconv \ + && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ + && docker-php-ext-install -j$(nproc) gd \ + && docker-php-ext-install mysqli \ + && docker-php-ext-enable mysqli + +RUN apt-get update && docker-php-ext-install pdo pdo_mysql && docker-php-ext-enable pdo pdo_mysql + +########################################################################### +# xDebug: +########################################################################### + +ARG INSTALL_XDEBUG=false + +RUN if [ ${INSTALL_XDEBUG} = true ]; then \ + # Install the xdebug extension + if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ + pecl install xdebug-2.5.5; \ + else \ + pecl install xdebug; \ + fi && \ + docker-php-ext-enable xdebug && \ + sed -i 's/^zend_extension=/;zend_extension=/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ +;fi + +# Copy xdebug configuration for remote debugging +COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini + +RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /usr/local/etc/php/conf.d/xdebug.ini && \ + sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /usr/local/etc/php/conf.d/xdebug.ini && \ + sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /usr/local/etc/php/conf.d/xdebug.ini + + +########################################################################### +# Redis and igbinary: +########################################################################### + +ARG INSTALL_REDIS=false + +RUN if [ ${INSTALL_REDIS} = true ]; then \ + pecl install igbinary \ + && pecl install -a redis \ + && docker-php-ext-enable igbinary redis \ +;fi + +########################################################################### +# Zip: +########################################################################### + +ARG INSTALL_ZIP=false + +RUN if [ ${INSTALL_ZIP} = true ]; then \ + apt update && apt install -y libzip-dev \ + && docker-php-ext-install zip \ + && docker-php-ext-enable zip \ +;fi + +########################################################################### +# Pear Mail and Mail_Mime: +########################################################################### + +ARG INSTALL_PEAR_MAIL=false + +RUN if [ ${INSTALL_PEAR_MAIL} = true ]; then \ + pear install Mail && pear install Mail_Mime \ +;fi + +########################################################################### +# BZ2 function: +########################################################################### + +ARG INSTALL_BZ2=false + +RUN if [ ${INSTALL_BZ2} = true ]; then \ + apt update && apt install -y libbz2-ocaml-dev \ + && docker-php-ext-install bz2 \ + && docker-php-ext-enable bz2 \ +;fi + +########################################################################### +# INTL function: +########################################################################### + +ARG INSTALL_INTL=false + +RUN if [ ${INSTALL_INTL} = true ]; then \ + apt update && apt install -y libicu-dev \ + && docker-php-ext-install intl \ + && docker-php-ext-enable intl \ +;fi + +########################################################################### +# php.ini opts: +########################################################################### + +# https://github.com/php/php-src/blob/master/php.ini-development +RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" + +ARG PHP_OPT_SHORT_OPEN_TAG=Off + +RUN sed -i "s/^short_open_tag = .*/short_open_tag = $PHP_OPT_SHORT_OPEN_TAG/g" "$PHP_INI_DIR/php.ini" + +ARG PHP_OPT_MAX_EXECUTION_TIME=30 + +RUN sed -i "s/^max_execution_time = .*/max_execution_time = $PHP_OPT_MAX_EXECUTION_TIME/g" "$PHP_INI_DIR/php.ini" + +ARG PHP_OPT_MEMORY_LIMIT=128M + +RUN sed -i "s/^memory_limit = .*/memory_limit = $PHP_OPT_MEMORY_LIMIT/g" "$PHP_INI_DIR/php.ini" + +ARG PHP_OPT_UPLOAD_MAX_FILESIZE=2M + +RUN sed -i "s/^upload_max_filesize = .*/upload_max_filesize = $PHP_OPT_UPLOAD_MAX_FILESIZE/g" "$PHP_INI_DIR/php.ini" + + +########################################################################### +# Prepend nginx 502 on showing errors: +# @see https://stackoverflow.com/questions/55260221/laravel-php-7-3-nginx-502-upstream-prematurely-closed-fastcgi-stdout +########################################################################### + +RUN sed -i "s/^log_limit = .*/log_limit = 1024/g" "$PHP_INI_DIR/../php-fpm.d/docker.conf" diff --git a/dockerfiles/php7.4-fpm/xdebug.ini b/dockerfiles/php7.4-fpm/xdebug.ini new file mode 100644 index 0000000..b719ba9 --- /dev/null +++ b/dockerfiles/php7.4-fpm/xdebug.ini @@ -0,0 +1,25 @@ +; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini) + +;xdebug.remote_host=dockerhost +xdebug.remote_connect_back=1 +xdebug.remote_port=9000 +xdebug.idekey=PHPSTORM + +xdebug.remote_autostart=0 +xdebug.remote_enable=0 +xdebug.cli_color=0 +xdebug.profiler_enable=1 +xdebug.profiler_enable_trigger=1 +xdebug.profiler_output_dir=/tmp + +xdebug.remote_handler=dbgp +xdebug.remote_mode=req + +xdebug.var_display_max_children=-1 +xdebug.var_display_max_data=-1 +xdebug.var_display_max_depth=-1 + +xdebug.trace_enable_trigger=1 +xdebug.trace_output_dir=/tmp +xdebug.trace_output_name="trace.%t" + diff --git a/dockerfiles/php7.4-fpm/xdebug.sh b/dockerfiles/php7.4-fpm/xdebug.sh new file mode 100755 index 0000000..8e43202 --- /dev/null +++ b/dockerfiles/php7.4-fpm/xdebug.sh @@ -0,0 +1,101 @@ +#! /bin/bash + +# NOTE: At the moment, this has only been confirmed to work with PHP 7 + + +# Grab full name of php-fpm container +PHP_FPM_CONTAINER=$(docker ps | grep php-fpm | awk '{print $1}') + + +# Grab OS type +if [[ "$(uname)" == "Darwin" ]]; then + OS_TYPE="OSX" +else + OS_TYPE=$(expr substr $(uname -s) 1 5) +fi + + +xdebug_status () +{ + echo 'xDebug status' + + # If running on Windows, need to prepend with winpty :( + if [[ $OS_TYPE == "MINGW" ]]; then + winpty docker exec -it $PHP_FPM_CONTAINER bash -c 'php -v' + + else + docker exec -it $PHP_FPM_CONTAINER bash -c 'php -v' + fi + +} + + +xdebug_start () +{ + echo 'Start xDebug' + + # And uncomment line with xdebug extension, thus enabling it + ON_CMD="sed -i 's/^;zend_extension=/zend_extension=/g' \ + /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini" + + + # If running on Windows, need to prepend with winpty :( + if [[ $OS_TYPE == "MINGW" ]]; then + winpty docker exec -it $PHP_FPM_CONTAINER bash -c "${ON_CMD}" + docker restart $PHP_FPM_CONTAINER + winpty docker exec -it $PHP_FPM_CONTAINER bash -c 'php -v' + + else + docker exec -it $PHP_FPM_CONTAINER bash -c "${ON_CMD}" + docker restart $PHP_FPM_CONTAINER + docker exec -it $PHP_FPM_CONTAINER bash -c 'php -v' + fi +} + + +xdebug_stop () +{ + echo 'Stop xDebug' + + # Comment out xdebug extension line + OFF_CMD="sed -i 's/^zend_extension=/;zend_extension=/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini" + + + # If running on Windows, need to prepend with winpty :( + if [[ $OS_TYPE == "MINGW" ]]; then + # This is the equivalent of: + # winpty docker exec -it laradock_php-fpm_1 bash -c 'bla bla bla' + # Thanks to @michaelarnauts at https://github.com/docker/compose/issues/593 + winpty docker exec -it $PHP_FPM_CONTAINER bash -c "${OFF_CMD}" + docker restart $PHP_FPM_CONTAINER + #docker-compose restart php-fpm + winpty docker exec -it $PHP_FPM_CONTAINER bash -c 'php -v' + + else + docker exec -it $PHP_FPM_CONTAINER bash -c "${OFF_CMD}" + # docker-compose restart php-fpm + docker restart $PHP_FPM_CONTAINER + docker exec -it $PHP_FPM_CONTAINER bash -c 'php -v' + fi +} + + +case $@ in + stop|STOP) + xdebug_stop + ;; + start|START) + xdebug_start + ;; + status|STATUS) + xdebug_status + ;; + *) + echo "xDebug [Stop | Start | Status] in the ${PHP_FPM_CONTAINER} container." + echo "xDebug must have already been installed." + echo "Usage:" + echo " .php-fpm/xdebug stop|start|status" + +esac + +exit 1