diff --git a/.github/workflows/build-php-images.yml b/.github/workflows/build-php-images.yml
index 231ba6d..d3f22ae 100644
--- a/.github/workflows/build-php-images.yml
+++ b/.github/workflows/build-php-images.yml
@@ -18,6 +18,12 @@ jobs:
lando-version:
- 3-dev-slim
include:
+ - image: php
+ tag: 8.3-fpm-4
+ context: images/8.3-fpm
+ - image: php
+ tag: 8.3-apache-4
+ context: images/8.3-apache
- image: php
tag: 8.2-fpm-4
context: images/8.2-fpm
diff --git a/.github/workflows/pr-php8-tests.yml b/.github/workflows/pr-php8-tests.yml
index be41fd7..98d6039 100644
--- a/.github/workflows/pr-php8-tests.yml
+++ b/.github/workflows/pr-php8-tests.yml
@@ -15,6 +15,7 @@ jobs:
- '8.0'
- '8.1'
- '8.2'
+ - '8.3'
lando-version:
- 3-dev-slim
os:
diff --git a/builders/php.js b/builders/php.js
index ecde4b8..90975f7 100644
--- a/builders/php.js
+++ b/builders/php.js
@@ -91,7 +91,7 @@ module.exports = {
name: 'php',
config: {
version: '7.4',
- supported: ['8.2', '8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'],
+ supported: ['8.3', '8.2', '8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'],
legacy: ['7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'],
gen2: ['5.5', '5.4', '5.3'],
gen3: ['7.2', '7.1', '7.0', '5.6'],
@@ -109,7 +109,7 @@ module.exports = {
],
confSrc: path.resolve(__dirname, '..', 'config'),
command: ['sh -c \'a2enmod rewrite && apache2-foreground\''],
- composer_version: '2.2.18',
+ composer_version: '2.2.22',
phpServer: 'apache',
defaultFiles: {
_php: 'php.ini',
diff --git a/docs/.vuepress/public/.!80551!favicon.ico b/docs/.vuepress/public/.!80551!favicon.ico
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/extensions.md b/docs/extensions.md
index 868c06e..1b26fcc 100644
--- a/docs/extensions.md
+++ b/docs/extensions.md
@@ -5,65 +5,65 @@ description: Learn what extensions are installed in the Lando PHP plugin
# Installed Extensions
-| | 5.3 | 5.4 | 5.5 | 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2 |
-| -- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| apc | X | X | | | | | | | | | | |
-| apcu | | | X | X | X | X | X | X | X | | | |
-| bcmath | X | X | X | X | X | X | X | X | X | X | X | X |
-| bz2 | X | X | X | X | X | X | X | X | X | X | X | X |
-| calendar | X | X | X | X | X | X | X | X | X | X | X | X |
-| Core | X | X | X | X | X | X | X | X | X | X | X | X |
-| ctype | X | X | X | X | X | X | X | X | X | X | X | X |
-| curl | X | X | X | X | X | X | X | X | X | X | X | X |
-| date | X | X | X | X | X | X | X | X | X | X | X | X |
-| dom | X | X | X | X | X | X | X | X | X | X | X | X |
-| exif | X | X | X | X | X | X | X | X | X | X | X | X |
-| fileinfo | X | X | X | X | X | X | X | X | X | X | X | X |
-| filter | X | X | X | X | X | X | X | X | X | X | X | X |
-| ftp | X | X | X | X | X | X | X | X | X | X | X | X |
-| gd | X | X | X | X | X | X | X | X | X | X | X | X |
-| gettext | X | X | X | X | X | X | X | X | X | X | X | X |
-| hash | X | X | X | X | X | X | X | X | X | X | X | X |
-| iconv | X | X | X | X | X | X | X | X | X | X | X | X |
-| imagick | X | X | X | X | X | X | X | X | X | X | X | X |
-| imap | X | X | X | X | X | X | X | X | X | X | X | X |
-| intl | X | X | X | X | X | X | X | X | X | X | X | X |
-| json | X | X | X | X | X | X | X | X | X | X | X | X |
-| ldap | X | X | X | X | X | X | X | X | X | X | X | X |
-| libxml | X | X | X | X | X | X | X | X | X | X | X | X |
-| mbstring | X | X | X | X | X | X | X | X | X | X | X | X |
-| mcrypt | X | X | X | X | X | X | X | X | X | X | X | X |
-| memcached | X | X | X | X | X | X | X | X | X | | | |
-| mysqli | X | X | X | X | X | X | X | X | X | X | X | X |
-| mysqlnd | X | X | X | X | X | X | X | X | X | X | X | X |
-| OAuth | X | X | X | X | X | X | X | X | X | | | |
-| OPcache | | | X | X | X | X | X | X | X | X | X | X |
-| openssl | X | X | X | X | X | X | X | X | X | X | X | X |
-| pcntl | X | X | X | X | X | X | X | X | X | X | X | X |
-| pcre | X | X | X | X | X | X | X | X | X | X | X | X |
-| PDO | X | X | X | X | X | X | X | X | X | X | X | X |
-| pdo_mysql | X | X | X | X | X | X | X | X | X | X | X | X |
-| pdo_pgsql | X | X | X | X | X | X | X | X | X | X | X | X |
-| pdo_sqlite| X | X | X | X | X | X | X | X | X | X | X | X |
-| Phar | X | X | X | X | X | X | X | X | X | X | X | X |
-| posix | X | X | X | X | X | X | X | X | X | X | X | X |
-| readline | X | X | X | X | X | X | X | X | X | X | X | X |
-| redis | X | X | X | X | X | X | X | X | X | X | X | X |
-| readline | X | X | X | X | X | X | X | X | X | X | X | X |
-| Reflection| X | X | X | X | X | X | X | X | X | X | X | X |
-| session | X | X | X | X | X | X | X | X | X | X | X | X |
-| SimpleXML | X | X | X | X | X | X | X | X | X | X | X | X |
-| soap | X | X | X | X | X | X | X | X | X | X | X | X |
-| SPL | X | X | X | X | X | X | X | X | X | X | X | X |
-| sqlite3 | X | X | X | X | X | X | X | X | X | X | X | X |
-| standard | X | X | X | X | X | X | X | X | X | X | X | X |
-| tokenizer | X | X | X | X | X | X | X | X | X | X | X | X |
-| xdebug | | | | | | | | | | | | |
-| xml | X | X | X | X | X | X | X | X | X | X | X | X |
-| xmlreader | X | X | X | X | X | X | X | X | X | X | X | X |
-| xmlwriter | X | X | X | X | X | X | X | X | X | X | X | X |
-| zip | X | X | X | X | X | X | X | X | X | X | X | X |
-| zlib | X | X | X | X | X | X | X | X | X | X | X | X |
+| | 5.3 | 5.4 | 5.5 | 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2 | 8.3 |
+| -- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| apc | X | X | | | | | | | | | | | |
+| apcu | | | X | X | X | X | X | X | X | | | | |
+| bcmath | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| bz2 | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| calendar | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| Core | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| ctype | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| curl | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| date | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| dom | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| exif | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| fileinfo | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| filter | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| ftp | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| gd | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| gettext | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| hash | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| iconv | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| imagick | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| imap | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| intl | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| json | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| ldap | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| libxml | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| mbstring | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| mcrypt | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| memcached | X | X | X | X | X | X | X | X | X | | | | |
+| mysqli | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| mysqlnd | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| OAuth | X | X | X | X | X | X | X | X | X | | | | |
+| OPcache | | | X | X | X | X | X | X | X | X | X | X | X |
+| openssl | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| pcntl | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| pcre | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| PDO | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| pdo_mysql | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| pdo_pgsql | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| pdo_sqlite| X | X | X | X | X | X | X | X | X | X | X | X | X |
+| Phar | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| posix | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| readline | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| redis | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| readline | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| Reflection| X | X | X | X | X | X | X | X | X | X | X | X | X |
+| session | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| SimpleXML | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| soap | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| SPL | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| sqlite3 | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| standard | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| tokenizer | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| xdebug | | | | | | | | | | | | | |
+| xml | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| xmlreader | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| xmlwriter | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| zip | X | X | X | X | X | X | X | X | X | X | X | X | X |
+| zlib | X | X | X | X | X | X | X | X | X | X | X | X | X |
Note that `xdebug` is off by default but you can enable it by setting your `php` services config to `xdebug: true`. Read more about this in "Configuration" above.
diff --git a/docs/index.md b/docs/index.md
index f25c9fd..4d98c62 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -20,6 +20,7 @@ services:
## Supported versions
+* [8.3](https://hub.docker.com/r/devwithlando/php) (experimental)
* [8.2](https://hub.docker.com/r/devwithlando/php)
* [8.1](https://hub.docker.com/r/devwithlando/php)
* [8.0](https://hub.docker.com/r/devwithlando/php)
diff --git a/examples/8.3/.gitignore b/examples/8.3/.gitignore
new file mode 100644
index 0000000..4ef7878
--- /dev/null
+++ b/examples/8.3/.gitignore
@@ -0,0 +1,3 @@
+vendor
+composer.json
+test
diff --git a/examples/8.3/.lando.yml b/examples/8.3/.lando.yml
new file mode 100644
index 0000000..4edc196
--- /dev/null
+++ b/examples/8.3/.lando.yml
@@ -0,0 +1,58 @@
+name: lando-php83
+events:
+ post-start:
+ - defaults: php -i | grep memory_limit | grep -e "-1"
+services:
+ defaults:
+ type: php:8.3
+ composer_version: false
+ cli:
+ type: php:8.3
+ composer_version: false
+ via: cli
+ build_as_root:
+ - curl -sL https://deb.nodesource.com/setup_14.x | bash -
+ - apt-get update -y
+ - apt-get install -y nodejs
+ cliworker:
+ type: php:8.3
+ composer_version: false
+ via: cli
+ command: sleep infinity
+ custom:
+ type: php:8.3
+ composer_version: "2.5.6"
+ via: nginx
+ ssl: true
+ webroot: web
+ xdebug: true
+ config:
+ php: config/php.ini
+ overrides:
+ image: devwithlando/php:8.3-fpm-4
+ environment:
+ DUALBLADE: maxim
+ OTHER: thing
+ custom_nginx:
+ build_as_root:
+ - mkdir -p /app/test && touch /app/test/managed_build_step
+ overrides:
+ environment:
+ MORE: things
+ OTHER: stuff
+tooling:
+ php:
+ service: defaults
+ node:
+ service: :host
+ options:
+ host:
+ description: The service to use
+ default: cli
+ alias:
+ - h
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/php": ./../../
diff --git a/examples/8.3/README.md b/examples/8.3/README.md
new file mode 100644
index 0000000..00e8a7f
--- /dev/null
+++ b/examples/8.3/README.md
@@ -0,0 +1,131 @@
+PHP 8.3 Example
+===============
+
+This example exists primarily to test the following documentation:
+
+* [PHP Service](https://docs.lando.dev/config/php.html)
+* [Installing Node in a PHP Service](https://docs.lando.dev/guides/installing-node-in-your-lando-php-service.html)
+* [Issue #1990](https://github.com/lando/lando/issues/1990)
+* [Issue #2192](https://github.com/lando/lando/issues/2192)
+
+And probably other stuff
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should start up successfully
+lando poweroff
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should use 8.3 as the default php version
+lando ssh -s defaults -c "php -v" | grep "PHP 8.3"
+
+# Should use 10.x as the default postgresql-client version
+lando ssh -s defaults -c "psql -V" | grep "10."
+
+# Should use apache 2.4 as the default webserver version
+lando ssh -s defaults -c "apachectl -V" | grep "2.4."
+
+# Should only serve over http by default
+lando ssh -s defaults -c "curl https://localhost" || echo $? | grep 1
+
+# Should serve from the app root by default
+lando ssh -s defaults -c "curl http://localhost" | grep "ROOTDIR"
+
+# Should have a 1G php mem limit on appserver
+lando ssh -s defaults -c "curl http://localhost" | grep "memory_limit" | grep "1G"
+
+# Should have COMPOSER_MEMORY_LIMIT set to -1
+lando ssh -s defaults -c "env" | grep "COMPOSER_MEMORY_LIMIT=-1"
+
+# Should install composer 2.x by default
+lando ssh -s defaults -c "composer --version --no-ansi" | grep "Composer version 2."
+
+# Should have unlimited memory for php for CLI opts
+lando php -i | grep memory_limit | grep -e "-1"
+lando ssh -s defaults -c "php -i" | grep "memory_limit" | grep -e "-1"
+
+# Should not enable xdebug by default
+lando ssh -s defaults -c "php -m | grep xdebug" || echo $? | grep 1
+
+# Should have a PATH_INFO and PATH_TRANSLATED SERVER vars
+lando ssh -s custom_nginx -c "curl https://localhost" | grep SERVER | grep PATH_INFO
+lando ssh -s custom_nginx -c "curl https://localhost" | grep SERVER | grep PATH_TRANSLATED
+
+# Should use specified php version if given
+lando ssh -s custom -c "php -v" | grep "PHP 8.3"
+
+# Should install composer 2.5.6 if version number is set
+lando ssh -s custom -c "composer --version --no-ansi" | grep "Composer version 2.5.6"
+
+# Should serve via nginx if specified
+lando ssh -s custom_nginx -c "curl http://localhost" | grep "WEBDIR"
+
+# Should serve via https if specified
+lando ssh -s custom_nginx -c "curl https://localhost" | grep "WEBDIR"
+
+# Should enable xdebug if specified
+lando ssh -s custom -c "php -m" | grep "xdebug"
+
+# Should not serve port 80 for cli
+lando ssh -s cli -c "curl http://localhost" || echo $? | grep 1
+
+# Should install the composer 2.x using the false flag
+lando ssh -s cli -c "composer --version --no-ansi" | grep "Composer version 2."
+
+# Should use custom php ini if specified
+lando ssh -s custom -c "php -i | grep memory_limit | grep 514"
+lando ssh -s custom -c "curl http://custom_nginx" | grep html_errors | grep On | grep On
+
+# Should inherit overrides from its generator
+lando ssh -s custom -c "env | grep DUALBLADE | grep maxim"
+lando ssh -s custom_nginx -c "env | grep DUALBLADE | grep maxim"
+
+# Should be able to run build steps on lando managed nginx service
+# https://github.com/lando/lando/issues/1990
+lando ssh -s custom_nginx -c "cat /app/test/managed_build_step"
+
+# Should be able to override lando managed nginx service
+# https://github.com/lando/lando/issues/1990
+lando ssh -s custom_nginx -c "env | grep OTHER | grep stuff"
+lando ssh -s custom_nginx -c "env | grep MORE | grep things"
+
+# Should set PATH_INFO and PATH_TRANSLATED if appropriate
+# https://github.com/lando/lando/issues/2192
+lando ssh -s custom_nginx -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_INFO | grep "/a/b.php"
+lando ssh -s custom_nginx -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_TRANSLATED | grep "/app/web/a/b.php"
+lando ssh -s custom_nginx -c "curl http://localhost/path_info.php/a/b.php" | grep SCRIPT_NAME | grep "/path_info.php"
+lando ssh -s defaults -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_INFO | grep "/a/b.php"
+lando ssh -s defaults -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_TRANSLATED | grep "/app/a/b.php"
+lando ssh -s defaults -c "curl http://localhost/path_info.php/a/b.php" | grep SCRIPT_NAME | grep "/path_info.php"
+
+# Should allow cli services to specify a boot up command
+lando info -s cliworker --deep | grep Cmd | grep sleep | grep infinity
+
+# Should install the latest composer 2.x by default.
+lando ssh -s cliworker -c "composer --version --no-ansi" | grep "Composer version 2."
+
+# Should have node14 installed in cli service
+lando node -v | grep v14.
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be destroyed with success
+lando destroy -y
+lando poweroff
+```
diff --git a/examples/8.3/config/apache.conf b/examples/8.3/config/apache.conf
new file mode 100644
index 0000000..3a82953
--- /dev/null
+++ b/examples/8.3/config/apache.conf
@@ -0,0 +1,188 @@
+
+ # WHAT IN THE WORLD HAPPENED TO YOU, SERIOUSLY
+ # The ServerName directive sets the request scheme, hostname and port that
+ # the server uses to identify itself. This is used when creating
+ # redirection URLs. In the context of virtual hosts, the ServerName
+ # specifies what hostname must appear in the request's Host: header to
+ # match this virtual host. For the default virtual host (this file) this
+ # value is not decisive as it is used as a last resort host regardless.
+ # However, you must set it for any further virtual host explicitly.
+ ServerName appserver
+
+ ServerAdmin webmaster@localhost
+ DocumentRoot ${LANDO_WEBROOT}
+
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride All
+ Order allow,deny
+ Allow from all
+ Require all granted
+
+
+ # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
+ # error, crit, alert, emerg.
+ # It is also possible to configure the loglevel for particular
+ # modules, e.g.
+ #LogLevel info ssl:warn
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+ # For most configuration files from conf-available/, which are
+ # enabled or disabled at a global level, it is possible to
+ # include a line for only one particular virtual host. For example the
+ # following line enables the CGI configuration for this host only
+ # after it has been globally disabled with "a2disconf".
+ #Include conf-available/serve-cgi-bin.conf
+
+ # Pass some common ENVs, its ok if this fails
+ SetEnv BACKDROP_SETTINGS ${BACKDROP_SETTINGS}
+ SetEnvIf x-forwarded-proto https HTTPS=on
+
+
+
+
+
+ ServerAdmin webmaster@localhost
+ ServerName appserver
+
+ DocumentRoot ${LANDO_WEBROOT}
+
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride All
+ Order allow,deny
+ Allow from all
+ Require all granted
+
+ # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
+ # error, crit, alert, emerg.
+ # It is also possible to configure the loglevel for particular
+ # modules, e.g.
+ #LogLevel info ssl:warn
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+ # For most configuration files from conf-available/, which are
+ # enabled or disabled at a global level, it is possible to
+ # include a line for only one particular virtual host. For example the
+ # following line enables the CGI configuration for this host only
+ # after it has been globally disabled with "a2disconf".
+ #Include conf-available/serve-cgi-bin.conf
+
+ # SSL Engine Switch:
+ # Enable/Disable SSL for this virtual host.
+ SSLEngine on
+
+ # A self-signed (snakeoil) certificate can be created by installing
+ # the ssl-cert package. See
+ # /usr/share/doc/apache2/README.Debian.gz for more info.
+ # If both key and certificate are stored in the same file, only the
+ # SSLCertificateFile directive is needed.
+ SSLCertificateFile "/certs/cert.crt"
+ SSLCertificateKeyFile "/certs/cert.key"
+
+ # Server Certificate Chain:
+ # Point SSLCertificateChainFile at a file containing the
+ # concatenation of PEM encoded CA certificates which form the
+ # certificate chain for the server certificate. Alternatively
+ # the referenced file can be the same as SSLCertificateFile
+ # when the CA certificates are directly appended to the server
+ # certificate for convenience.
+ #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt
+
+ # Certificate Authority (CA):
+ # Set the CA certificate verification path where to find CA
+ # certificates for client authentication or alternatively one
+ # huge file containing all of them (file must be PEM encoded)
+ # Note: Inside SSLCACertificatePath you need hash symlinks
+ # to point to the certificate files. Use the provided
+ # Makefile to update the hash symlinks after changes.
+ #SSLCACertificatePath /etc/ssl/certs/
+ #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
+
+ # Certificate Revocation Lists (CRL):
+ # Set the CA revocation path where to find CA CRLs for client
+ # authentication or alternatively one huge file containing all
+ # of them (file must be PEM encoded)
+ # Note: Inside SSLCARevocationPath you need hash symlinks
+ # to point to the certificate files. Use the provided
+ # Makefile to update the hash symlinks after changes.
+ #SSLCARevocationPath /etc/apache2/ssl.crl/
+ #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
+
+ # Client Authentication (Type):
+ # Client certificate verification type and depth. Types are
+ # none, optional, require and optional_no_ca. Depth is a
+ # number which specifies how deeply to verify the certificate
+ # issuer chain before deciding the certificate is not valid.
+ #SSLVerifyClient require
+ #SSLVerifyDepth 10
+
+ # SSL Engine Options:
+ # Set various options for the SSL engine.
+ # o FakeBasicAuth:
+ # Translate the client X.509 into a Basic Authorisation. This means that
+ # the standard Auth/DBMAuth methods can be used for access control. The
+ # user name is the `one line' version of the client's X.509 certificate.
+ # Note that no password is obtained from the user. Every entry in the user
+ # file needs this password: `xxj31ZMTZzkVA'.
+ # o ExportCertData:
+ # This exports two additional environment variables: SSL_CLIENT_CERT and
+ # SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
+ # server (always existing) and the client (only existing when client
+ # authentication is used). This can be used to import the certificates
+ # into CGI scripts.
+ # o StdEnvVars:
+ # This exports the standard SSL/TLS related `SSL_*' environment variables.
+ # Per default this exportation is switched off for performance reasons,
+ # because the extraction step is an expensive operation and is usually
+ # useless for serving static content. So one usually enables the
+ # exportation for CGI and SSI requests only.
+ # o OptRenegotiate:
+ # This enables optimized SSL connection renegotiation handling when SSL
+ # directives are used in per-directory context.
+ #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
+
+ SSLOptions +StdEnvVars
+
+
+ SSLOptions +StdEnvVars
+
+
+ # SSL Protocol Adjustments:
+ # The safe and default but still SSL/TLS standard compliant shutdown
+ # approach is that mod_ssl sends the close notify alert but doesn't wait for
+ # the close notify alert from client. When you need a different shutdown
+ # approach you can use one of the following variables:
+ # o ssl-unclean-shutdown:
+ # This forces an unclean shutdown when the connection is closed, i.e. no
+ # SSL close notify alert is send or allowed to received. This violates
+ # the SSL/TLS standard but is needed for some brain-dead browsers. Use
+ # this when you receive I/O errors because of the standard approach where
+ # mod_ssl sends the close notify alert.
+ # o ssl-accurate-shutdown:
+ # This forces an accurate shutdown when the connection is closed, i.e. a
+ # SSL close notify alert is send and mod_ssl waits for the close notify
+ # alert of the client. This is 100% SSL/TLS standard compliant, but in
+ # practice often causes hanging connections with brain-dead browsers. Use
+ # this only for browsers where you know that their SSL implementation
+ # works correctly.
+ # Notice: Most problems of broken clients are also related to the HTTP
+ # keep-alive facility, so you usually additionally want to disable
+ # keep-alive for those clients, too. Use variable "nokeepalive" for this.
+ # Similarly, one has to force some clients to use HTTP/1.0 to workaround
+ # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
+ # "force-response-1.0" for this.
+ BrowserMatch "MSIE [2-6]" \
+ nokeepalive ssl-unclean-shutdown \
+ downgrade-1.0 force-response-1.0
+ # MSIE 7 and newer should be able to use keepalive
+ BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
+
+ # Pass some common ENVs, its ok if this fails
+ SetEnv BACKDROP_SETTINGS ${BACKDROP_SETTINGS}
+ SetEnvIf x-forwarded-proto https HTTPS=on
+
+
+
diff --git a/examples/8.3/config/nginx.conf b/examples/8.3/config/nginx.conf
new file mode 100644
index 0000000..f874450
--- /dev/null
+++ b/examples/8.3/config/nginx.conf
@@ -0,0 +1,30 @@
+server {
+ listen 443 ssl;
+ listen 80;
+ listen [::]:80 default ipv6only=on;
+ server_name localhost;
+
+ ssl_certificate /certs/cert.crt;
+ ssl_certificate_key /certs/cert.key;
+
+ ssl_session_cache shared:SSL:1m;
+ ssl_session_timeout 5m;
+
+ ssl_ciphers HIGH:!aNULL:!MD5;
+ ssl_prefer_server_ciphers on;
+
+ root "{{LANDO_WEBROOT}}";
+ index index.php index.html index.htm;
+
+ # hello
+ location ~ \.php$ {
+ fastcgi_pass fpm:9000;
+ fastcgi_index index.php;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_buffers 256 128k;
+ fastcgi_connect_timeout 300s;
+ fastcgi_send_timeout 300s;
+ fastcgi_read_timeout 300s;
+ include fastcgi_params;
+ }
+}
diff --git a/examples/8.3/config/php.ini b/examples/8.3/config/php.ini
new file mode 100644
index 0000000..1076fd2
--- /dev/null
+++ b/examples/8.3/config/php.ini
@@ -0,0 +1,4 @@
+[PHP]
+
+memory_limit = 514M
+html_errors = On
diff --git a/examples/8.3/index.php b/examples/8.3/index.php
new file mode 100644
index 0000000..d64cf6b
--- /dev/null
+++ b/examples/8.3/index.php
@@ -0,0 +1,3 @@
+ROOTDIR
+
+
diff --git a/examples/8.3/path_info.php b/examples/8.3/path_info.php
new file mode 100644
index 0000000..ccce0c3
--- /dev/null
+++ b/examples/8.3/path_info.php
@@ -0,0 +1 @@
+
diff --git a/examples/8.3/web/index.php b/examples/8.3/web/index.php
new file mode 100644
index 0000000..b9b85a7
--- /dev/null
+++ b/examples/8.3/web/index.php
@@ -0,0 +1,3 @@
+WEBDIR
+
+
diff --git a/examples/8.3/web/path_info.php b/examples/8.3/web/path_info.php
new file mode 100644
index 0000000..ccce0c3
--- /dev/null
+++ b/examples/8.3/web/path_info.php
@@ -0,0 +1 @@
+
diff --git a/examples/images-edge/8.3-apache-4/.lando.yml b/examples/images-edge/8.3-apache-4/.lando.yml
new file mode 100644
index 0000000..39287fc
--- /dev/null
+++ b/examples/images-edge/8.3-apache-4/.lando.yml
@@ -0,0 +1,13 @@
+name: lando-php-edge83apache
+services:
+ default:
+ type: php:8.3
+ composer_version: false
+ ssl: true
+ overrides:
+ image: devwithlando/php:8.3-apache-4-edge
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/php": ./../../
diff --git a/examples/images-edge/8.3-apache-4/README.md b/examples/images-edge/8.3-apache-4/README.md
new file mode 100644
index 0000000..6c253b1
--- /dev/null
+++ b/examples/images-edge/8.3-apache-4/README.md
@@ -0,0 +1,50 @@
+PHP 8.3 Apache Image Edge Example
+=================================
+
+This example exists primarily to test the following documentation:
+
+* [PHP Service](https://docs.lando.dev/config/php.html)
+* [Service Overrides](https://docs.lando.dev/config/services.html#advanced)
+
+And probably other stuff
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should start up successfully
+lando poweroff
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should use 8.3 as the default php version
+lando ssh -s default -c "php -v" | grep "PHP 8.3"
+
+# Should use 10.x as the default postgresql-client version
+lando ssh -s default -c "psql -V" | grep "10."
+
+# Should use apache 2.4 as the default webserver version
+lando ssh -s default -c "apachectl -V" | grep "2.4."
+
+# Should install composer 2.x by default
+lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2."
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be destroyed with success
+lando destroy -y
+lando poweroff
+```
diff --git a/examples/images-edge/8.3-apache-4/index.php b/examples/images-edge/8.3-apache-4/index.php
new file mode 100644
index 0000000..d64cf6b
--- /dev/null
+++ b/examples/images-edge/8.3-apache-4/index.php
@@ -0,0 +1,3 @@
+ROOTDIR
+
+
diff --git a/examples/images-edge/8.3-fpm-4/.lando.yml b/examples/images-edge/8.3-fpm-4/.lando.yml
new file mode 100644
index 0000000..67b51df
--- /dev/null
+++ b/examples/images-edge/8.3-fpm-4/.lando.yml
@@ -0,0 +1,14 @@
+name: lando-php-edge83nginx
+services:
+ default:
+ type: php:8.3
+ composer_version: false
+ via: nginx
+ ssl: true
+ overrides:
+ image: devwithlando/php:8.3-fpm-4-edge
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/php": ./../../
diff --git a/examples/images-edge/8.3-fpm-4/README.md b/examples/images-edge/8.3-fpm-4/README.md
new file mode 100644
index 0000000..aaed10e
--- /dev/null
+++ b/examples/images-edge/8.3-fpm-4/README.md
@@ -0,0 +1,50 @@
+PHP 8.3 Nginx Image Edge Example
+================================
+
+This example exists primarily to test the following documentation:
+
+* [PHP Service](https://docs.lando.dev/config/php.html)
+* [Service Overrides](https://docs.lando.dev/config/services.html#advanced)
+
+And probably other stuff
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should start up successfully
+lando poweroff
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should use 8.3 as the default php version
+lando ssh -s default -c "php -v" | grep "PHP 8.3"
+
+# Should use 10.x as the default postgresql-client version
+lando ssh -s default -c "psql -V" | grep "10."
+
+# Should use nginx 1. as the default webserver version
+lando ssh -s default_nginx -c "nginx -v 2>&1 | grep 1.17"
+
+# Should install composer 2.x by default
+lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2."
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be destroyed with success
+lando destroy -y
+lando poweroff
+```
diff --git a/examples/images-edge/8.3-fpm-4/index.php b/examples/images-edge/8.3-fpm-4/index.php
new file mode 100644
index 0000000..d64cf6b
--- /dev/null
+++ b/examples/images-edge/8.3-fpm-4/index.php
@@ -0,0 +1,3 @@
+ROOTDIR
+
+
diff --git a/examples/images-stable/8.3-apache-4/.lando.yml b/examples/images-stable/8.3-apache-4/.lando.yml
new file mode 100644
index 0000000..fdb89a0
--- /dev/null
+++ b/examples/images-stable/8.3-apache-4/.lando.yml
@@ -0,0 +1,13 @@
+name: lando-php-stable83apache
+services:
+ default:
+ type: php:8.3
+ composer_version: false
+ ssl: true
+ overrides:
+ image: devwithlando/php:8.3-apache-4
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/php": ./../../
diff --git a/examples/images-stable/8.3-apache-4/README.md b/examples/images-stable/8.3-apache-4/README.md
new file mode 100644
index 0000000..595a96c
--- /dev/null
+++ b/examples/images-stable/8.3-apache-4/README.md
@@ -0,0 +1,50 @@
+PHP 8.3 Apache Image Stable Example
+===================================
+
+This example exists primarily to test the following documentation:
+
+* [PHP Service](https://docs.lando.dev/config/php.html)
+* [Service Overrides](https://docs.lando.dev/config/services.html#advanced)
+
+And probably other stuff
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should start up successfully
+lando poweroff
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should use 8.3 as the default php version
+lando ssh -s default -c "php -v" | grep "PHP 8.3"
+
+# Should use 10.x as the default postgresql-client version
+lando ssh -s default -c "psql -V" | grep "10."
+
+# Should use apache 2.4 as the default webserver version
+lando ssh -s default -c "apachectl -V" | grep "2.4."
+
+# Should install composer 2.x by default
+lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2."
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be destroyed with success
+lando destroy -y
+lando poweroff
+```
diff --git a/examples/images-stable/8.3-apache-4/index.php b/examples/images-stable/8.3-apache-4/index.php
new file mode 100644
index 0000000..d64cf6b
--- /dev/null
+++ b/examples/images-stable/8.3-apache-4/index.php
@@ -0,0 +1,3 @@
+ROOTDIR
+
+
diff --git a/examples/images-stable/8.3-fpm-4/.lando.yml b/examples/images-stable/8.3-fpm-4/.lando.yml
new file mode 100644
index 0000000..01b76db
--- /dev/null
+++ b/examples/images-stable/8.3-fpm-4/.lando.yml
@@ -0,0 +1,14 @@
+name: lando-php-stable83nginx
+services:
+ default:
+ type: php:8.3
+ composer_version: false
+ via: nginx
+ ssl: true
+ overrides:
+ image: devwithlando/php:8.3-fpm-4
+
+# This is important because it lets lando know to test against the plugin in this repo
+# DO NOT REMOVE THIS!
+plugins:
+ "@lando/php": ./../../
diff --git a/examples/images-stable/8.3-fpm-4/README.md b/examples/images-stable/8.3-fpm-4/README.md
new file mode 100644
index 0000000..fb606b4
--- /dev/null
+++ b/examples/images-stable/8.3-fpm-4/README.md
@@ -0,0 +1,50 @@
+PHP 8.3 Nginx Image Stable Example
+==================================
+
+This example exists primarily to test the following documentation:
+
+* [PHP Service](https://docs.lando.dev/config/php.html)
+* [Service Overrides](https://docs.lando.dev/config/services.html#advanced)
+
+And probably other stuff
+
+Start up tests
+--------------
+
+Run the following commands to get up and running with this example.
+
+```bash
+# Should start up successfully
+lando poweroff
+lando start
+```
+
+Verification commands
+---------------------
+
+Run the following commands to validate things are rolling as they should.
+
+```bash
+# Should use 8.3 as the default php version
+lando ssh -s default -c "php -v" | grep "PHP 8.3"
+
+# Should use 10.x as the default postgresql-client version
+lando ssh -s default -c "psql -V" | grep "10."
+
+# Should use nginx 1. as the default webserver version
+lando ssh -s default_nginx -c "nginx -v 2>&1 | grep 1.17"
+
+# Should install composer 2.x by default
+lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2."
+```
+
+Destroy tests
+-------------
+
+Run the following commands to trash this app like nothing ever happened.
+
+```bash
+# Should be destroyed with success
+lando destroy -y
+lando poweroff
+```
diff --git a/examples/images-stable/8.3-fpm-4/index.php b/examples/images-stable/8.3-fpm-4/index.php
new file mode 100644
index 0000000..d64cf6b
--- /dev/null
+++ b/examples/images-stable/8.3-fpm-4/index.php
@@ -0,0 +1,3 @@
+ROOTDIR
+
+
diff --git a/images/8.3-apache/Dockerfile b/images/8.3-apache/Dockerfile
new file mode 100644
index 0000000..96eea53
--- /dev/null
+++ b/images/8.3-apache/Dockerfile
@@ -0,0 +1,85 @@
+# docker build -t devwithlando/php:8.3-apache-4 .
+
+FROM php:8.3-apache-bullseye
+
+# Install dependencies we need
+RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 \
+ && apt -y update && apt-get install -y \
+ gnupg2 \
+ wget \
+ && echo 'deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main' >> /etc/apt/sources.list.d/pgdg.list \
+ && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
+ && apt-get update && apt-get install -y \
+ bzip2 \
+ default-mysql-client \
+ exiftool \
+ git-core \
+ imagemagick \
+ libbz2-dev \
+ libc-client-dev \
+ libfreetype6-dev \
+ libicu-dev \
+ libjpeg62-turbo-dev \
+ libkrb5-dev \
+ libldap2-dev \
+ libmagickwand-dev \
+ libmemcached-dev \
+ libpng-dev \
+ libpq-dev \
+ libssl-dev \
+ libwebp-dev \
+ libxml2-dev \
+ libzip-dev \
+ libonig-dev \
+ openssl \
+ postgresql-client-10 \
+ pv \
+ rsync \
+ ssh \
+ unzip \
+ wget \
+ xfonts-75dpi \
+ xfonts-base \
+ zlib1g-dev \
+ && pecl install apcu \
+ && pecl install imagick \
+ && pecl install memcached \
+ && pecl install oauth \
+ && pecl install redis-6.0.2 \
+ && pecl install xdebug-3.3.0alpha3 \
+ && docker-php-ext-configure ldap --with-libdir=lib/$(uname -m)-linux-gnu/ \
+ && docker-php-ext-enable apcu \
+ && docker-php-ext-enable imagick \
+ && docker-php-ext-enable memcached \
+ && docker-php-ext-enable oauth \
+ && docker-php-ext-enable redis \
+ && docker-php-ext-install bcmath \
+ && docker-php-ext-install bz2 \
+ && docker-php-ext-install calendar \
+ && docker-php-ext-install exif \
+ && docker-php-ext-install gettext \
+ && docker-php-ext-install intl \
+ && docker-php-ext-install ldap \
+ && docker-php-ext-install mbstring \
+ && docker-php-ext-install mysqli \
+ && docker-php-ext-install opcache \
+ && docker-php-ext-install pcntl \
+ && docker-php-ext-install pdo \
+ && docker-php-ext-install pdo_mysql \
+ && docker-php-ext-install pdo_pgsql \
+ && docker-php-ext-install soap \
+ && docker-php-ext-install zip \
+ && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
+ && php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.2.22 \
+ && php -r "unlink('composer-setup.php');" \
+ && chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
+ && apt-get -y clean \
+ && apt-get -y autoclean \
+ && apt-get -y autoremove \
+ && rm -rf /var/lib/apt/lists/* && rm -rf && rm -rf /var/lib/cache/* && rm -rf /var/lib/log/* && rm -rf /tmp/* \
+ && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
+ && docker-php-ext-install imap \
+ && docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype \
+ && docker-php-ext-install gd
+
+RUN curl https://dl.yarnpkg.com
diff --git a/images/8.3-fpm/Dockerfile b/images/8.3-fpm/Dockerfile
new file mode 100644
index 0000000..7017b1b
--- /dev/null
+++ b/images/8.3-fpm/Dockerfile
@@ -0,0 +1,86 @@
+# docker build -t devwithlando/php:8.3-fpm-4 .
+
+FROM php:8.3-fpm-bullseye
+
+# Install dependencies we need
+RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 \
+ && apt -y update && apt-get install -y \
+ gnupg2 \
+ wget \
+ && echo 'deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main' >> /etc/apt/sources.list.d/pgdg.list \
+ && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
+ && apt-get update && apt-get install -y \
+ bzip2 \
+ default-mysql-client \
+ exiftool \
+ git-core \
+ imagemagick \
+ libbz2-dev \
+ libc-client-dev \
+ libfreetype6-dev \
+ libicu-dev \
+ libjpeg62-turbo-dev \
+ libkrb5-dev \
+ libldap2-dev \
+ libmagickwand-dev \
+ libmemcached-dev \
+ libpng-dev \
+ libpq-dev \
+ libssl-dev \
+ libwebp-dev \
+ libxml2-dev \
+ libzip-dev \
+ libonig-dev \
+ openssl \
+ postgresql-client-10 \
+ pv \
+ rsync \
+ ssh \
+ unzip \
+ wget \
+ xfonts-75dpi \
+ xfonts-base \
+ zlib1g-dev \
+ && pecl install apcu \
+ && pecl install imagick \
+ && pecl install memcached \
+ && pecl install oauth \
+ && pecl install redis-6.0.2 \
+ && pecl install xdebug-3.3.0alpha3 \
+ && docker-php-ext-configure ldap --with-libdir=lib/$(uname -m)-linux-gnu/ \
+ && docker-php-ext-enable apcu \
+ && docker-php-ext-enable imagick \
+ && docker-php-ext-enable memcached \
+ && docker-php-ext-enable oauth \
+ && docker-php-ext-enable redis \
+ && docker-php-ext-install bcmath \
+ && docker-php-ext-install bz2 \
+ && docker-php-ext-install calendar \
+ && docker-php-ext-install exif \
+ && docker-php-ext-install gettext \
+ && docker-php-ext-install intl \
+ && docker-php-ext-install ldap \
+ && docker-php-ext-install mbstring \
+ && docker-php-ext-install mysqli \
+ && docker-php-ext-install opcache \
+ && docker-php-ext-install pcntl \
+ && docker-php-ext-install pdo \
+ && docker-php-ext-install pdo_mysql \
+ && docker-php-ext-install pdo_pgsql \
+ && docker-php-ext-install soap \
+ && docker-php-ext-install zip \
+ && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
+ && php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.2.22 \
+ && php -r "unlink('composer-setup.php');" \
+ && chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
+ && apt-get -y clean \
+ && apt-get -y autoclean \
+ && apt-get -y autoremove \
+ && rm -rf /var/lib/apt/lists/* && rm -rf && rm -rf /var/lib/cache/* && rm -rf /var/lib/log/* && rm -rf /tmp/* \
+ && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
+ && docker-php-ext-install imap \
+ && docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype \
+ && docker-php-ext-install gd
+
+# Tests
+RUN curl https://dl.yarnpkg.com