A Cloud Native Buildpack for running HTTPD, Nginx, and FPM start commands for PHP apps.
This buildpack will always participate if its requirements are met. In the
HTTPD server case requires php, php-fpm optionally, httpd, and
php-httpd-config. In the Nginx case, it will require nginx and php-nginx-config
instead of httpd and php-httpd-config.
In either the HTTPD server or Nginx case, this buildpack will require
composer-packages when a composer.json file is available.
When this buildpack runs, the PHP_HTTPD_PATH OR the PHP_NGINX_PATH
environment variable must be set by another buildpack in conjunction with
PHP_FPM_PATH. This is because both the HTTPD and Nginx web servers will
require FPM to serve PHP apps. The build will fail if both PHP_HTTPD_PATH and
PHP_NGINX_PATH are set or both unset, as well as if the PHP_FPM_PATH
environment variable is not set. These requirements will be met when used in
conjunction with the other buildpacks in the Paketo PHP language family.
Because of this, the usage of this buildpack is fairly tightly coupled to other
buildpacks in the PHP language family.
| Requirement | Build | Launch |
|---|---|---|
php |
x | |
composer-packages |
x | |
php-fpm |
x | x |
httpd or nginx |
x | |
httpd-config or nginx-config |
x | x |
It will set the default start command to something that looks like:
procmgr-binary /layers/paketo-buildpacks_php-start/php-start/procs.ymlThe procmgr-binary is a process manager that will run multiple start commands
on the container. This is done to allow for FPM to run on the container
alongside the web server. The procs.yml file it runs with contains the
commands and arguments for both php-fpm and the web-server.
When the buildpack runs, you will see in the logs what processes are added to procs.yml.
Both httpd and nginx automatically reload changed files, so applications built by this buildpack
implicitly support live reloading of served files.
This buildpack adds explicit live reload support for httpd and nginx configuration files
at the following locations:
http:<app-directory>/.httpd.conf.d/nginx:<app-directory>/.nginx.conf.d/
See the following integration test files for examples of both application code live reload and configuration live reload.
- integration/httpd_reload_test.go
- integration/nginx_reload_test.go
This CNB writes a start command, so there's currently no scenario we can imagine that you would need to require it as dependency.
To package this buildpack for consumption:
$ ./scripts/package.sh --version <version-number>This will create a buildpackage.cnb file under the build directory which you
can use to build your app as follows:
pack build <app-name> \
--path <path-to-app> \
--buildpack build/buildpackage.cnbTo run all unit tests, run:
./scripts/unit.shTo run all integration tests, run:
/scripts/integration.shFor extra debug logs from the image build process, set the $BP_LOG_LEVEL
environment variable to DEBUG at build-time (ex. pack build my-app --env BP_LOG_LEVEL=DEBUG or through a project.toml
file.