Public | Automated Build

Last pushed: 9 days ago
Short Description
Short description is empty for this repo.
Full Description


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
  • calendar
  • bz2
  • 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
Docker Pull Command
Owner
bryanlatten
Source Repository

Comments (1)
aleskinen
a month ago

How I can change port to nginx port to something else? Could this be environmetal variable? I am pretty new with docker so sorry if this is too trivial question.