Using the Elastic Beanstalk PHP platform
This topic describes how to configure, build, and run your PHP applications on Elastic Beanstalk.
AWS Elastic Beanstalk supports a number of platform branches for different versions of the PHP programming language. These platforms support PHP web applications that can run alone or under Composer. See PHP in the AWS Elastic Beanstalk Platforms document for a full list of supported platform branches.
Elastic Beanstalk provides configuration options that you can use to customize the software that runs on the EC2 instances in your Elastic Beanstalk environment. You can configure environment variables required by your application, enable log rotation to Amazon S3, map folders in your application source that contain static files to paths served by the proxy server, and set common PHP initialization settings.
Configuration options are available in the Elastic Beanstalk console for modifying the configuration of a running environment. To avoid losing your environment's configuration when you terminate it, you can use saved configurations to save your settings and later apply them to another environment.
To save settings in your source code, you can include configuration files. Settings in configuration files are applied every time you create an environment or deploy your application. You can also use configuration files to install packages, run scripts, and perform other instance customization operations during deployments.
If you use Composer, you can include a composer.json file in your source bundle to install packages during deployment.
For advanced PHP configuration and PHP settings that are not provided as configuration options, you can use configuration files to provide an INI file that can extend and override the default settings applied by Elastic Beanstalk, or install additional extensions.
Settings applied in the Elastic Beanstalk console override the same settings in configuration files, if they exist. This lets you have default settings in configuration files, and override them with environment-specific settings in the console. For more information about precedence, and other methods of changing settings, see Configuration options.
For details about the various ways you can extend an Elastic Beanstalk Linux-based platform, see Extending Elastic Beanstalk Linux platforms.
Considerations for PHP 8.1 on Amazon Linux 2
Read this section if you're using the PHP 8.1 on Amazon Linux 2 platform branch.
Note
The information in this topic only applies to the PHP 8.1 on Amazon Linux 2 platform branch. It does not apply to the PHP platform branches based on AL2023. It also does not apply to the PHP 8.0 Amazon Linux 2 platform branch.
Elastic Beanstalk stores the PHP 8.1 related RPM packages for the PHP 8.1 on Amazon Linux 2 platform branch on the EC2 instances in a local directory, instead of the Amazon Linux repository. You can use rpm -i to install packages. Starting with PHP 8.1 Platform Version 3.5.0, Elastic Beanstalk stores the PHP 8.1 related RPM packages in the following local EC2 directory.
/opt/elasticbeanstalk/RPMS
The following example installs the php-debuginfo package.
$rpm -i /opt/elasticbeanstalk/RPMS/php-debuginfo-8.1.8-1.amzn2.x86_64.rpm
The version in the package name will vary according to the actual version that's listed in the EC2 local directory
/opt/elasticbeanstalk/RPMS
. Use the same syntax to install other PHP 8.1 RPM packages.
Expand the following section to display a list of RPM packages we provide.
The following list provides the RMP packages that the Elastic Beanstalk PHP 8.1 platform provides on Amazon Linux 2. These are located in the local directory
/opt/elasticbeanstalk/RPMS
.
The version numbers 8.1.8-1 and 3.7.0-1 in the listed package names are only an example.
-
php-8.1.8-1.amzn2.x86_64.rpm
-
php-bcmath-8.1.8-1.amzn2.x86_64.rpm
-
php-cli-8.1.8-1.amzn2.x86_64.rpm
-
php-common-8.1.8-1.amzn2.x86_64.rpm
-
php-dba-8.1.8-1.amzn2.x86_64.rpm
-
php-dbg-8.1.8-1.amzn2.x86_64.rpm
-
php-debuginfo-8.1.8-1.amzn2.x86_64.rpm
-
php-devel-8.1.8-1.amzn2.x86_64.rpm
-
php-embedded-8.1.8-1.amzn2.x86_64.rpm
-
php-enchant-8.1.8-1.amzn2.x86_64.rpm
-
php-fpm-8.1.8-1.amzn2.x86_64.rpm
-
php-gd-8.1.8-1.amzn2.x86_64.rpm
-
php-gmp-8.1.8-1.amzn2.x86_64.rpm
-
php-intl-8.1.8-1.amzn2.x86_64.rpm
-
php-ldap-8.1.8-1.amzn2.x86_64.rpm
-
php-mbstring-8.1.8-1.amzn2.x86_64.rpm
-
php-mysqlnd-8.1.8-1.amzn2.x86_64.rpm
-
php-odbc-8.1.8-1.amzn2.x86_64.rpm
-
php-opcache-8.1.8-1.amzn2.x86_64.rpm
-
php-pdo-8.1.8-1.amzn2.x86_64.rpm
-
php-pear-1.10.13-1.amzn2.noarch.rpm
-
php-pgsql-8.1.8-1.amzn2.x86_64.rpm
-
php-process-8.1.8-1.amzn2.x86_64.rpm
-
php-pspell-8.1.8-1.amzn2.x86_64.rpm
-
php-snmp-8.1.8-1.amzn2.x86_64.rpm
-
php-soap-8.1.8-1.amzn2.x86_64.rpm
-
php-sodium-8.1.8-1.amzn2.x86_64.rpm
-
php-xml-8.1.8-1.amzn2.x86_64.rpm
-
php-pecl-imagick-3.7.0-1.amzn2.x86_64.rpm
-
php-pecl-imagick-debuginfo-3.7.0-1.amzn2.x86_64.rpm
-
php-pecl-imagick-devel-3.7.0-1.amzn2.noarch.rpm
You can use the PEAR and PECL packages to install common extensions. For more information about PEAR, see the PEAR PHP
Extension and Application Repository
The following example commands install the Memcached extensions.
$pecl install memcache
Or you could also use the following:
$pear install pecl/memcache
The following example commands install the Redis extensions.
$pecl install redis
Or you could also use the following:
$pear install pecl/redis
Configuring your PHP environment
You can use the Elastic Beanstalk console to enable log rotation to Amazon S3, configure variables that your application can read from the environment, and change PHP settings.
To configure your PHP environment in the Elastic Beanstalk console
Open the Elastic Beanstalk console
, and in the Regions list, select your AWS Region. -
In the navigation pane, choose Environments, and then choose the name of your environment from the list.
Note
If you have many environments, use the search bar to filter the environment list.
In the navigation pane, choose Configuration.
-
In the Updates, monitoring, and logging configuration category, choose Edit.
PHP settings
-
Proxy server – The proxy server to use on your environment instances. By default, nginx is used.
-
Document root – The folder that contains your site's default page. If your welcome page is not at the root of your source bundle, specify the folder that contains it relative to the root path. For example,
/public
if the welcome page is in a folder namedpublic
. -
Memory limit – The maximum amount of memory that a script is allowed to allocate. For example,
512M
. -
Zlib output compression – Set to
On
to compress responses. -
Allow URL fopen – Set to
Off
to prevent scripts from downloading files from remote locations. -
Display errors – Set to
On
to show internal error messages for debugging. -
Max execution time – The maximum time in seconds that a script is allowed to run before the environment terminates it.
Log options
The Log Options section has two settings:
-
Instance profile– Specifies the instance profile that has permission to access the Amazon S3 bucket associated with your application.
-
Enable log file rotation to Amazon S3 – Specifies whether log files for your application's Amazon EC2 instances are copied to the Amazon S3 bucket associated with your application.
Static files
To improve performance, you can use the Static files section to configure the proxy server to serve static files (for example, HTML or images) from a set of directories inside your web application. For each directory, you set the virtual path to directory mapping. When the proxy server receives a request for a file under the specified path, it serves the file directly instead of routing the request to your application.
For details about configuring static files using configuration files or the Elastic Beanstalk console, see Serving static files.
Environment properties
The Environment Properties section lets you specify environment configuration settings on the Amazon EC2 instances that are running your application. These settings are passed in as key-value pairs to the application.
Your application code can access environment properties by using $_SERVER
or the get_cfg_var
function.
$endpoint = $_SERVER['API_ENDPOINT'];
See Environment properties and other software settings for more information.
The aws:elasticbeanstalk:container:php:phpini namespace
You can use a configuration file to set configuration options and perform other instance configuration tasks during deployments. Configuration options can be defined by the Elastic Beanstalk service or the platform that you use and are organized into namespaces.
You can use the aws:elasticbeanstalk:environment:proxy
namespace to choose the environment's proxy server.
You can use the aws:elasticbeanstalk:environment:proxy:staticfiles
namespace to configure the environment proxy to serve static files.
You define mappings of virtual paths to application directories.
The PHP platform defines options in the aws:elasticbeanstalk:container:php:phpini
namespace, including one that is not available in the
Elastic Beanstalk console. composer_options
sets custom options to use when installing dependencies using Composer through composer.phar
install
. For more information including available options, go to http://getcomposer.org/doc/03-cli.md#install
The following example configuration file specifies a static files option that maps a directory named
staticimages
to the path /images
, and shows settings for each of the options available in the
aws:elasticbeanstalk:container:php:phpini
namespace:
Example .ebextensions/php-settings.config
option_settings:
aws:elasticbeanstalk:environment:proxy:
ProxyServer: apache
aws:elasticbeanstalk:environment:proxy:staticfiles:
/images: staticimages
aws:elasticbeanstalk:container:php:phpini:
document_root: /public
memory_limit: 128M
zlib.output_compression: "Off"
allow_url_fopen: "On"
display_errors: "Off"
max_execution_time: 60
composer_options: vendor/package
Note
The aws:elasticbeanstalk:environment:proxy:staticfiles
namespace isn't defined on Amazon Linux AMI PHP platform branches (preceding
Amazon Linux 2).
Elastic Beanstalk provides many configuration options for customizing your environment. In addition to configuration files, you can also set configuration options using the console, saved configurations, the EB CLI, or the AWS CLI. See Configuration options for more information.