MiteshShah / docker-php

Provides basis for Nginx/PHP-FPM web apps

Home Page:https://hub.docker.com/r/bryanlatten/docker-php/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Docker Pulls

docker-php

Provides basic building blocks for PHP web applications, available on Docker Hub. Add’s PHP-FPM, mods, and specific backend configuration to Behance’s docker-nginx

New naming scheme: PHP_MAJOR.PHP_MINOR-Major.Minor.Patch(-variant)

  • PHP_MAJOR.PHP_MINOR are the runtime versions of PHP.
  • Major.Minor.Patch are versions of the container provisioning software
  • (-variant), an optional distinction, i.e. -alpine. Alpine variants are slim versions of the container.

Includes


  • Ubuntu or Alpine container base
  • Nginx
  • PHP / PHP-FPM: choose from 5.6, 7.0, 7.1, 7.2 (beta)
  • S6: PID 1 zombie reaping, startup coordination, shutdown signal transferal
  • Goss: for serverspec-like testing. Run goss -g /tests/php-fpm/{PHP_MAJOR.PHP_MINOR}(-variant).goss.yaml to validate any configuration updates
  • Extra PHP Modules:

* - not available on -alpine variant
^ - not available on 7.2 ~ - disabled by default (use phpenmod to enable on non-Alpine variants, uncomment .ini file otherwise)

  • apcu
  • bcmath
  • bz2
  • calendar
  • ctype
  • curl
  • date
  • dom
  • exif
  • cgi-fcgi
  • gd
  • gearman*^
  • iconv
  • igbinary
  • intl
  • json
  • mbstring
  • mcrypt^
  • memcache*^
  • memcached^
  • msgpack
  • mysqli
  • mysqlnd
  • newrelic~^ (activates with env variables)
  • opcache
  • openssl
  • pcntl
  • pdo
  • pdo_mysql
  • pdo_pgsql~
  • pgsql~
  • phar
  • posix
  • redis~
  • shmop
  • SimpleXML
  • sockets
  • sysvmsg
  • sysvsem
  • sysvshm
  • tokenizer
  • xdebug~^
  • xml
  • xmlreader
  • xmlwriter
  • yaml~
  • zip
  • zlib

Expectations


Applications that leverage bryanlatten/docker-php as their container parent are expected to copy their application into /app, for example: COPY ./ /app/

Inside the copied directory, there must be a directory named public -- this will be automatically assigned as the webroot for the web server, which expects a front controller called index.php.

Production Mode: an immutable container (without file updates) should set CFG_APP_DEBUG=0 for max PHP performance

NOTE: Nginx is exposed and bound to an unprivileged port, 8080

Monitoring


  1. NewRelic APM: automatically enabled by adding providing environment variables REPLACE_NEWRELIC_APP and REPLACE_NEWRELIC_LICENSE
  2. PHP-FPM Status: available only inside container at /__status. Application healthcheck can pull PHP-FPM statistics from http://127.0.0.1/__status?json. To open to more clients than local, add more allow statements in __status location block in $CONF_NGINX_SITE(/etc/nginx/sites-available/default)
  3. Nginx Status: available only inside container at /__nginx_status. Application healthcheck can pull nginx statistics from http://127.0.0.1/__nginx_status. To open to more clients than local, add more allow statements in __nginx_status location block in $CONF_NGINX_SITE (/etc/nginx/sites-available/default)

Downstream Configuration


Several environment variables can be used to configure various PHP FPM paramaters, as well as a few Nginx configurations. as such. These can be used to drive the configuration of the downstream PHP application in any way necessary, but there are a few environment variables that bryanlatter/docker-php will process along the way...

See parent(s) docker-nginx, docker-base for additional configuration

Variable Example Default Description
* DATABASE_HOST=master.rds.aws.com - PHP has access to environment variables by default
CFG_APP_DEBUG CFG_APP_DEBUG=1 1 Setting to 1 or true will cue the Opcache to watch for file changes. Set to 0 for production mode, which provides a sizeable performance boost, though manually updating a file will not be seen unless the opcache is reset.
CFG_XDEBUG_ENABLE CFG_XDEBUG_ENABLE=1 - Setting to 1 or true will enable the XDebug extension, which is preconfigured to allow remote debugging as well as profiling. NOTE: Requires "dev" mode be enabled via CFG_APP_DEBUG.
SERVER_MAX_BODY_SIZE SERVER_MAX_BODY_SIZE=4M 1M Allows the downstream application to specify a non-default client_max_body_size configuration for the server-level directive in /etc/nginx/sites-available/default
SERVER_FASTCGI_BUFFERS SERVER_FASTCGI_BUFFERS=‘512 32k’ 256 16k docs, tweaking
SERVER_FASTCGI_BUFFER_SIZE SERVER_FASTCGI_BUFFER_SIZE=‘256k’ 128k docs, tweaking
SERVER_FASTCGI_BUSY_BUFFERS_SIZE SERVER_FASTCGI_BUSY_BUFFERS_SIZE=‘1024k’ 256k docs
REPLACE_NEWRELIC_APP REPLACE_NEWRELIC_APP=prod-server-abc - Sets application name for newrelic
REPLACE_NEWRELIC_LICENSE REPLACE_NEWRELIC_LICENSE=abcdefg - Sets license for newrelic, when combined with above, will enable newrelic reporting
PHP_FPM_MEMORY_LIMIT PHP_FPM_MEMORY_LIMIT=256M 192MB Sets memory limit for FPM instances of PHP
PHP_FPM_MAX_EXECUTION_TIME PHP_FPM_MAX_EXECUTION_TIME=30 60 Sets time limit for FPM workers
PHP_FPM_UPLOAD_MAX_FILESIZE PHP_FPM_UPLOAD_MAX_FILESIZE=100M 1M Sets both upload_max_filesize and post_max_size
PHP_FPM_MAX_CHILDREN PHP_FPM_MAX_CHILDREN=15 4096 docs
PHP_FPM_START_SERVERS PHP_FPM_START_SERVERS=40 20 docs
PHP_FPM_MAX_REQUESTS PHP_FPM_MAX_REQUESTS=100 1024 docs How many requests an individual FPM worker will process before recycling
PHP_FPM_MIN_SPARE_SERVERS PHP_FPM_MIN_SPARE_SERVERS=10 5 docs
PHP_OPCACHE_MEMORY_CONSUMPTION PHP_OPCACHE_MEMORY_CONSUMPTION=512 128 docs
PHP_OPCACHE_MAX_WASTED_PERCENTAGE PHP_OPCACHE_MAX_WASTED_PERCENTAGE=10 5 docs
PHP_OPCACHE_INTERNED_STRINGS_BUFFER PHP_OPCACHE_INTERNED_STRINGS_BUFFER=64 16 docs

Testing


  • Requires docker and docker-compose
    To test locally, run bash -e ./test.sh {docker-machine} where docker-machine is the IP of the connected docker engine. These same tests get run automatically, per pull request, via Travis CI

About

Provides basis for Nginx/PHP-FPM web apps

https://hub.docker.com/r/bryanlatten/docker-php/

License:MIT License


Languages

Language:Shell 94.1%Language:PHP 5.9%